diff --git a/src/game/GameController.cpp b/src/game/GameController.cpp index a4e0cccc8..5c8ed6f9a 100644 --- a/src/game/GameController.cpp +++ b/src/game/GameController.cpp @@ -343,6 +343,12 @@ void GameController::OpenSaveWindow() } } +void GameController::FrameStep() +{ + gameModel->FrameStep(1); + gameModel->SetPaused(true); +} + void GameController::Vote(int direction) { if(gameModel->GetSave() && gameModel->GetUser().ID && gameModel->GetSave()->GetID() && gameModel->GetSave()->GetVote()==0) diff --git a/src/game/GameController.h b/src/game/GameController.h index 84af34332..0e7037198 100644 --- a/src/game/GameController.h +++ b/src/game/GameController.h @@ -60,6 +60,7 @@ public: void Vote(int direction); void ChangeBrush(); void ShowConsole(); + void FrameStep(); ui::Point PointTranslate(ui::Point point); }; diff --git a/src/game/GameModel.cpp b/src/game/GameModel.cpp index c026da89a..6fc9dea99 100644 --- a/src/game/GameModel.cpp +++ b/src/game/GameModel.cpp @@ -277,6 +277,11 @@ bool GameModel::GetPaused() return sim->sys_pause?true:false; } +void GameModel::FrameStep(int frames) +{ + sim->framerender += frames; +} + void GameModel::ClearSimulation() { sim->clear_sim(); diff --git a/src/game/GameModel.h b/src/game/GameModel.h index 0d7fc3fbb..170d1ed1d 100644 --- a/src/game/GameModel.h +++ b/src/game/GameModel.h @@ -70,6 +70,7 @@ public: vector GetToolList(); void SetActiveMenu(Menu * menu); Menu * GetActiveMenu(); + void FrameStep(int frames); User GetUser(); void SetUser(User user); void SetBrush(int i); diff --git a/src/game/GameView.cpp b/src/game/GameView.cpp index e93b9b7b2..9e4a6dd70 100644 --- a/src/game/GameView.cpp +++ b/src/game/GameView.cpp @@ -513,6 +513,9 @@ void GameView::OnKeyPress(int key, Uint16 character, bool shift, bool ctrl, bool case '`': c->ShowConsole(); break; + case 'f': + c->FrameStep(); + break; } } diff --git a/src/simulation/Simulation.cpp b/src/simulation/Simulation.cpp index 11414eafc..9e58f2299 100644 --- a/src/simulation/Simulation.cpp +++ b/src/simulation/Simulation.cpp @@ -2076,7 +2076,7 @@ void Simulation::update_particles_i(int start, int inc) int lighting_ok=1; float pGravX, pGravY, pGravD; - if (sys_pause&&lighting_recreate>0) + if (lighting_recreate>0) { for (i=0; i<=parts_lastActiveIndex; i++) { @@ -2097,8 +2097,8 @@ void Simulation::update_particles_i(int start, int inc) if (lighting_recreate>21) lighting_recreate=21; - if (sys_pause&&!framerender)//do nothing if paused - return; + //if (sys_pause&&!framerender)//do nothing if paused + // return; //wire! if(elementCount[PT_WIRE] > 0) @@ -3078,7 +3078,8 @@ void Simulation::update_particles()//doesn't update the particles themselves, bu pthread_t *InterThreads; #endif - air->update_air(); + if(!sys_pause||framerender) + air->update_air(); memset(pmap, 0, sizeof(pmap)); memset(photons, 0, sizeof(photons)); @@ -3130,8 +3131,11 @@ void Simulation::update_particles()//doesn't update the particles themselves, bu } } - update_particles_i(0, 1); + if(!sys_pause||framerender) + update_particles_i(0, 1); + if(framerender) + framerender--; // this should probably be elsewhere /*for (y=0; y