summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/game/GameModel.cpp10
-rw-r--r--src/simulation/Gravity.cpp20
2 files changed, 15 insertions, 15 deletions
diff --git a/src/game/GameModel.cpp b/src/game/GameModel.cpp
index fef4e61..b2f7d70 100644
--- a/src/game/GameModel.cpp
+++ b/src/game/GameModel.cpp
@@ -289,19 +289,15 @@ void GameModel::SetSave(SaveInfo * newSave)
if(currentSave && currentSave->GetGameSave())
{
GameSave * saveData = currentSave->GetGameSave();
- SetPaused(saveData->paused & GetPaused());
+ 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)
- {
+ if(saveData->gravityEnable)
sim->grav->start_grav_async();
- }
- else if(!saveData->gravityEnable && sim->grav->ngrav_enable)
- {
+ else
sim->grav->stop_grav_async();
- }
sim->clear_sim();
sim->Load(saveData);
}
diff --git a/src/simulation/Gravity.cpp b/src/simulation/Gravity.cpp
index 2b7810d..89f626e 100644
--- a/src/simulation/Gravity.cpp
+++ b/src/simulation/Gravity.cpp
@@ -167,17 +167,20 @@ void Gravity::update_grav_async()
void Gravity::start_grav_async()
{
- if(!ngrav_enable){
- gravthread_done = 0;
- grav_ready = 0;
- pthread_mutex_init (&gravmutex, NULL);
- pthread_cond_init(&gravcv, NULL);
- pthread_create(&gravthread, NULL, &Gravity::update_grav_async_helper, this); //Start asynchronous gravity simulation
- ngrav_enable = 1;
- }
+ if(ngrav_enable) //If it's already enabled, restart it
+ stop_grav_async();
+
+ gravthread_done = 0;
+ grav_ready = 0;
+ pthread_mutex_init (&gravmutex, NULL);
+ pthread_cond_init(&gravcv, NULL);
+ pthread_create(&gravthread, NULL, &Gravity::update_grav_async_helper, this); //Start asynchronous gravity simulation
+ ngrav_enable = 1;
+
memset(gravy, 0, (XRES/CELL)*(YRES/CELL)*sizeof(float));
memset(gravx, 0, (XRES/CELL)*(YRES/CELL)*sizeof(float));
memset(gravp, 0, (XRES/CELL)*(YRES/CELL)*sizeof(float));
+ memset(gravmap, 0, (XRES/CELL)*(YRES/CELL)*sizeof(float));
}
void Gravity::stop_grav_async()
@@ -195,6 +198,7 @@ void Gravity::stop_grav_async()
memset(gravy, 0, (XRES/CELL)*(YRES/CELL)*sizeof(float));
memset(gravx, 0, (XRES/CELL)*(YRES/CELL)*sizeof(float));
memset(gravp, 0, (XRES/CELL)*(YRES/CELL)*sizeof(float));
+ memset(gravmap, 0, (XRES/CELL)*(YRES/CELL)*sizeof(float));
}
#ifdef GRAVFFT