summaryrefslogtreecommitdiff
path: root/src/game/GameModel.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/game/GameModel.cpp')
-rw-r--r--src/game/GameModel.cpp28
1 files changed, 28 insertions, 0 deletions
diff --git a/src/game/GameModel.cpp b/src/game/GameModel.cpp
index 536ca42..fef4e61 100644
--- a/src/game/GameModel.cpp
+++ b/src/game/GameModel.cpp
@@ -308,6 +308,34 @@ void GameModel::SetSave(SaveInfo * newSave)
notifySaveChanged();
}
+void GameModel::SetSaveFile(SaveFile * newSave)
+{
+ SetSave(NULL);
+
+ if(newSave && newSave->GetGameSave())
+ {
+ GameSave * saveData = newSave->GetGameSave();
+ SetPaused(saveData->paused & GetPaused());
+ sim->gravityMode = saveData->gravityMode;
+ sim->air->airMode = saveData->airMode;
+ sim->legacy_enable = saveData->legacyEnable;
+ sim->water_equal_test = saveData->waterEEnabled;
+ if(saveData->gravityEnable && !sim->grav->ngrav_enable)
+ {
+ sim->grav->start_grav_async();
+ }
+ else if(!saveData->gravityEnable && sim->grav->ngrav_enable)
+ {
+ sim->grav->stop_grav_async();
+ }
+ sim->clear_sim();
+ sim->Load(saveData);
+ }
+ delete newSave;
+
+ notifySaveChanged();
+}
+
Simulation * GameModel::GetSimulation()
{
return sim;