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)
|
||||
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 ?
|
||||
{
|
||||
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) {
|
||||
CObject* base = m_objMan->FindNearest(nullptr, OBJECT_BASE, 10000000.0f);
|
||||
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())
|
||||
{
|
||||
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());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Do this here to prevent the first frame from taking a long time to render
|
||||
m_engine->UpdateGroundSpotTextures();
|
||||
|
|
|
@ -1391,9 +1391,13 @@ Error CAutoBase::TakeOff(bool printMsg)
|
|||
|
||||
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.
|
||||
// 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))
|
||||
CResourceManager::RemoveExistingDirectory(saveDir);
|
||||
CResourceManager::CreateNewDirectory(saveDir);
|
||||
|
@ -1423,6 +1427,12 @@ Error CAutoBase::TakeOff(bool printMsg)
|
|||
FreezeCargo(false);
|
||||
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
|
||||
|
|
Loading…
Reference in New Issue