Restart N. Grav when needed (somewhat effects issue #31) and fix shitty logic when setting paused state on loading save (Fixes issue #34)
This commit is contained in:
parent
824bde4ceb
commit
90ad1fd856
@ -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);
|
||||
}
|
||||
|
@ -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
|
||||
|
Reference in New Issue
Block a user