diff options
| author | Simon Robertshaw <simon@hardwired.org.uk> | 2012-07-29 11:29:19 (GMT) |
|---|---|---|
| committer | Simon Robertshaw <simon@hardwired.org.uk> | 2012-07-29 11:29:19 (GMT) |
| commit | 90ad1fd8564f8a305932b1488159c1f784c04ae8 (patch) | |
| tree | bee30f5de7eb12e53c5d7c1dd5b43cb4f7d3459d /src | |
| parent | 824bde4cebd78aa04c9018171316f7533307e0ce (diff) | |
| download | powder-90ad1fd8564f8a305932b1488159c1f784c04ae8.zip powder-90ad1fd8564f8a305932b1488159c1f784c04ae8.tar.gz | |
Restart N. Grav when needed (somewhat effects issue #31) and fix shitty logic when setting paused state on loading save (Fixes issue #34)
Diffstat (limited to 'src')
| -rw-r--r-- | src/game/GameModel.cpp | 10 | ||||
| -rw-r--r-- | src/simulation/Gravity.cpp | 20 |
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 |
