Career: Save the rest of the level as well as just the spaceship. Also put all career save files in __career__ folder.
parent
884129a676
commit
d22b32477e
|
@ -3376,6 +3376,15 @@ void CRobotMain::CreateScene(bool soluce, bool fixScene, bool resetObject)
|
||||||
if (!resetObject)
|
if (!resetObject)
|
||||||
ChangeColor(); // changes the colors of texture
|
ChangeColor(); // changes the colors of texture
|
||||||
|
|
||||||
|
if (m_levelCategory == LevelCategory::CareerMode)
|
||||||
|
{
|
||||||
|
std::string careerSaveDir = GetPlayerProfile()->GetSaveFile("__career__/" + std::to_string(m_levelChap) + "_" + std::to_string(m_levelRank));
|
||||||
|
if (CResourceManager::Exists(careerSaveDir+"/data.sav"))
|
||||||
|
{
|
||||||
|
m_sceneReadPath = careerSaveDir;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (!m_sceneReadPath.empty()) // loading file ?
|
if (!m_sceneReadPath.empty()) // loading file ?
|
||||||
{
|
{
|
||||||
m_ui->GetLoadingScreen()->SetProgress(0.25f, RT_LOADING_OBJECTS_SAVED);
|
m_ui->GetLoadingScreen()->SetProgress(0.25f, RT_LOADING_OBJECTS_SAVED);
|
||||||
|
@ -3772,8 +3781,10 @@ void CRobotMain::CreateScene(bool soluce, bool fixScene, bool resetObject)
|
||||||
if (m_levelCategory == LevelCategory::CareerMode) {
|
if (m_levelCategory == LevelCategory::CareerMode) {
|
||||||
CObject* base = m_objMan->FindNearest(nullptr, OBJECT_BASE, 10000000.0f);
|
CObject* base = m_objMan->FindNearest(nullptr, OBJECT_BASE, 10000000.0f);
|
||||||
if(base) {
|
if(base) {
|
||||||
std::string saveDir = GetPlayerProfile()->GetSaveFile("__spaceship__"); // TODO: change save path?
|
std::string saveDir = GetPlayerProfile()->GetSaveFile("__career__/__spaceship__");
|
||||||
|
// TODO: If it doesn't exist, use some global default instead of using whatever is in this level file
|
||||||
|
if(CResourceManager::Exists(saveDir))
|
||||||
|
{
|
||||||
for (CObject* obj : m_objMan->GetAllObjects())
|
for (CObject* obj : m_objMan->GetAllObjects())
|
||||||
{
|
{
|
||||||
if (obj == base) continue;
|
if (obj == base) continue;
|
||||||
|
@ -3790,6 +3801,7 @@ void CRobotMain::CreateScene(bool soluce, bool fixScene, bool resetObject)
|
||||||
IOReadScene(saveDir+"/data.sav", saveDir+"/cbot.run", true, base->GetPosition());
|
IOReadScene(saveDir+"/data.sav", saveDir+"/cbot.run", true, base->GetPosition());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Do this here to prevent the first frame from taking a long time to render
|
// Do this here to prevent the first frame from taking a long time to render
|
||||||
m_engine->UpdateGroundSpotTextures();
|
m_engine->UpdateGroundSpotTextures();
|
||||||
|
|
|
@ -1391,9 +1391,13 @@ Error CAutoBase::TakeOff(bool printMsg)
|
||||||
|
|
||||||
if (m_main->GetLevelCategory() == LevelCategory::CareerMode)
|
if (m_main->GetLevelCategory() == LevelCategory::CareerMode)
|
||||||
{
|
{
|
||||||
|
std::string careerSaveParentDir = m_main->GetPlayerProfile()->GetSaveFile("__career__");
|
||||||
|
if (!CResourceManager::DirectoryExists(careerSaveParentDir))
|
||||||
|
CResourceManager::CreateNewDirectory(careerSaveParentDir);
|
||||||
|
|
||||||
// Note: we don't write a cbot.run file - running programs won't remain running when transferred to other worlds.
|
// Note: we don't write a cbot.run file - running programs won't remain running when transferred to other worlds.
|
||||||
// We still need a directory per save file, because programs are saved there.
|
// We still need a directory per save file, because programs are saved there.
|
||||||
std::string saveDir = m_main->GetPlayerProfile()->GetSaveFile("__spaceship__"); // TODO: change save path?
|
std::string saveDir = careerSaveParentDir + "/__spaceship__";
|
||||||
if (CResourceManager::DirectoryExists(saveDir))
|
if (CResourceManager::DirectoryExists(saveDir))
|
||||||
CResourceManager::RemoveExistingDirectory(saveDir);
|
CResourceManager::RemoveExistingDirectory(saveDir);
|
||||||
CResourceManager::CreateNewDirectory(saveDir);
|
CResourceManager::CreateNewDirectory(saveDir);
|
||||||
|
@ -1423,6 +1427,12 @@ Error CAutoBase::TakeOff(bool printMsg)
|
||||||
FreezeCargo(false);
|
FreezeCargo(false);
|
||||||
return ERR_UNKNOWN; // TODO: proper error code
|
return ERR_UNKNOWN; // TODO: proper error code
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// It's OK to save the cargo in the level save dir, because it's deleted when loading.
|
||||||
|
std::string levelSaveDir = careerSaveParentDir + "/" + std::to_string(m_main->GetLevelChap()) + "_" + std::to_string(m_main->GetLevelRank());
|
||||||
|
if (CResourceManager::DirectoryExists(levelSaveDir))
|
||||||
|
CResourceManager::RemoveExistingDirectory(levelSaveDir);
|
||||||
|
m_main->GetPlayerProfile()->SaveScene(levelSaveDir, "Career mode save");
|
||||||
}
|
}
|
||||||
|
|
||||||
m_main->SetMovieLock(true); // blocks everything until the end
|
m_main->SetMovieLock(true); // blocks everything until the end
|
||||||
|
|
Loading…
Reference in New Issue