void GameController::OpenLocalSaveWindow(bool asCurrent) { Simulation * sim = gameModel->GetSimulation(); GameSave * gameSave = sim->Save(); if(!gameSave) { new ErrorMessage("Error", "Unable to build save."); } else { sim->SaveSimOptions(gameSave); gameSave->paused = gameModel->GetPaused(); SaveFile tempSave(""); if (gameModel->GetSaveFile()) { tempSave.SetFileName(gameModel->GetSaveFile()->GetName()); tempSave.SetDisplayName(gameModel->GetSaveFile()->GetDisplayName()); } tempSave.SetGameSave(gameSave); if (!asCurrent || !gameModel->GetSaveFile()) { class LocalSaveCallback: public FileSavedCallback { GameController * c; public: LocalSaveCallback(GameController * _c): c(_c) {} virtual ~LocalSaveCallback() {} virtual void FileSaved(SaveFile* file) { c->gameModel->SetSaveFile(file); } }; new LocalSaveActivity(tempSave, new LocalSaveCallback(this)); } else if (gameModel->GetSaveFile()) { gameModel->SetSaveFile(&tempSave); Client::Ref().MakeDirectory(LOCAL_SAVE_DIR); if (Client::Ref().WriteFile(gameSave->Serialise(), gameModel->GetSaveFile()->GetName())) new ErrorMessage("Error", "Unable to write save file."); else gameModel->SetInfoTip("Saved Successfully"); } } }
void GameController::OpenLocalSaveWindow(bool asCurrent) { Simulation * sim = gameModel->GetSimulation(); GameSave * gameSave = sim->Save(); gameSave->paused = gameModel->GetPaused(); gameSave->gravityMode = sim->gravityMode; gameSave->airMode = sim->air->airMode; gameSave->legacyEnable = sim->legacy_enable; gameSave->waterEEnabled = sim->water_equal_test; gameSave->gravityEnable = sim->grav->ngrav_enable; gameSave->aheatEnable = sim->aheat_enable; if(!gameSave) { new ErrorMessage("Error", "Unable to build save."); } else { std::string filename = ""; if (gameModel->GetSaveFile()) filename = gameModel->GetSaveFile()->GetDisplayName(); SaveFile tempSave(filename); tempSave.SetGameSave(gameSave); if (!asCurrent || !gameModel->GetSaveFile()) { class LocalSaveCallback: public FileSavedCallback { GameController * c; public: LocalSaveCallback(GameController * _c): c(_c) {} virtual ~LocalSaveCallback() {}; virtual void FileSaved(SaveFile* file) { c->gameModel->SetSaveFile(file); } }; new LocalSaveActivity(tempSave, new LocalSaveCallback(this)); } else if (gameModel->GetSaveFile()) { Client::Ref().MakeDirectory(LOCAL_SAVE_DIR); if (Client::Ref().WriteFile(gameSave->Serialise(), gameModel->GetSaveFile()->GetName())) new ErrorMessage("Error", "Unable to write save file."); } } }
void LocalSaveActivity::saveWrite(ByteString finalFilename) { Client::Ref().MakeDirectory(LOCAL_SAVE_DIR); GameSave *gameSave = save.GetGameSave(); Json::Value localSaveInfo; localSaveInfo["type"] = "localsave"; localSaveInfo["username"] = Client::Ref().GetAuthUser().Username; localSaveInfo["title"] = finalFilename; localSaveInfo["date"] = (Json::Value::UInt64)time(NULL); Client::Ref().SaveAuthorInfo(&localSaveInfo); gameSave->authors = localSaveInfo; std::vector<char> saveData = gameSave->Serialise(); if (saveData.size() == 0) new ErrorMessage("Error", "Unable to serialize game data."); else if (Client::Ref().WriteFile(saveData, finalFilename)) new ErrorMessage("Error", "Unable to write save file."); else { callback->FileSaved(&save); Exit(); } }