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/simulation | |
| 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/simulation')
| -rw-r--r-- | src/simulation/Gravity.cpp | 20 |
1 files changed, 12 insertions, 8 deletions
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 |
