From 90ebaf467f0699fddfd4156cda4afe99aea2c580 Mon Sep 17 00:00:00 2001 From: devZoGok Date: Wed, 1 Nov 2023 08:54:16 +0200 Subject: [PATCH] corrected reseting of Lua scripts after toggling game pause state --- game.cpp | 36 ++++++++++++++++++++++++++++++++++++ inGameAppState.cpp | 29 ++--------------------------- inGameAppState.h | 4 ++-- 3 files changed, 40 insertions(+), 29 deletions(-) diff --git a/game.cpp b/game.cpp index 934d3b2..9ffc652 100644 --- a/game.cpp +++ b/game.cpp @@ -1,11 +1,24 @@ #include "game.h" #include "player.h" #include "projectile.h" +#include "gameManager.h" +#include "activeGameState.h" +#include "inGameAppState.h" +#include "concreteGuiManager.h" +#include "defConfigs.h" + +#include + +#include + +#include #include namespace battleship{ + using namespace std; using namespace vb01; + using namespace gameBase; static Game *game = nullptr; @@ -50,5 +63,28 @@ namespace battleship{ } void Game::togglePause(){ + GameManager *gm = GameManager::getSingleton(); + ConcreteGuiManager *guiManager = ConcreteGuiManager::getSingleton(); + ActiveGameState *activeState = ((InGameAppState*)gm->getStateManager()->getAppStateByType(AppStateType::IN_GAME_STATE))->getActiveState(); + + if (!paused) { + gm->getStateManager()->dettachAppState(activeState); + guiManager->readLuaScreenScript("gamePaused.lua", activeState->getButtons()); + } + else { + for(string f : configData::scripts) + generateView().script_file(gm->getPath() + f); + + guiManager->readLuaScreenScript("inGame.lua", activeState->getButtons()); + AssetManager::getSingleton()->load(gm->getPath() + (string)generateView()["modelPrefix"], true); + + for(Player *p : Game::getSingleton()->getPlayers()) + for(Unit *u : p->getUnits()) + u->reinit(); + + gm->getStateManager()->attachAppState(activeState); + } + + paused = !paused; } } diff --git a/inGameAppState.cpp b/inGameAppState.cpp index 56338ef..0489035 100755 --- a/inGameAppState.cpp +++ b/inGameAppState.cpp @@ -27,8 +27,7 @@ namespace battleship{ InGameAppState::ResumeButton::ResumeButton(Vector2 pos, Vector2 size) : Button(pos, size, "Resume", GameManager::getSingleton()->getPath() + "Fonts/batang.ttf", -1, true) {} void InGameAppState::ResumeButton::onClick() { - StateManager *sm = GameManager::getSingleton()->getStateManager(); - ((InGameAppState*)sm->getAppStateByType((int)AppStateType::IN_GAME_STATE))->toggleMainMenu(); + Game::getSingleton()->togglePause(); } InGameAppState::ConsoleButton::ConsoleButton(Vector2 pos, Vector2 size) : Button(pos, size, "Console", GameManager::getSingleton()->getPath() + "Fonts/batang.ttf", -1, true) { } @@ -98,35 +97,11 @@ namespace battleship{ Game::getSingleton()->update(); } - void InGameAppState::toggleMainMenu() { - GameManager *gm = GameManager::getSingleton(); - ConcreteGuiManager *guiManager = ConcreteGuiManager::getSingleton(); - - if (!isMainMenuActive) { - isMainMenuActive = true; - gm->getStateManager()->dettachAppState(activeState); - - guiManager->readLuaScreenScript("gamePaused.lua", activeState->getButtons()); - } - else { - isMainMenuActive = false; - gm->getStateManager()->attachAppState(activeState); - - AssetManager::getSingleton()->load(gm->getPath() + (string)generateView()["modelPrefix"], true); - - guiManager->readLuaScreenScript("inGame.lua", activeState->getButtons()); - - for(Player *p : Game::getSingleton()->getPlayers()) - for(Unit *u : p->getUnits()) - u->reinit(); - } - } - void InGameAppState::onAction(int bind, bool isPressed) { switch((Bind)bind){ case Bind::TOGGLE_MAIN_MENU: if(isPressed && !GameObjectFrameController::getSingleton()->isPlacingFrames()) - toggleMainMenu(); + Game::getSingleton()->togglePause(); break; } } diff --git a/inGameAppState.h b/inGameAppState.h index 5bf6860..46d11aa 100755 --- a/inGameAppState.h +++ b/inGameAppState.h @@ -12,6 +12,7 @@ #include +//TODO refactor dependence on ActiveGameState namespace battleship{ class InGameAppState : public gameBase::AbstractAppState { public: @@ -46,14 +47,13 @@ namespace battleship{ void onAction(int, bool); void onAnalog(int, float); std::vector getSelectedUnits(Player*); + inline ActiveGameState* getActiveState(){return activeState;} private: bool isMainMenuActive = false; std::vector difficultyLevels, factions, modelPaths; Player *mainPlayer; int playerId; ActiveGameState* activeState; - - void toggleMainMenu(); }; }