corrected reseting of Lua scripts after toggling game pause state

This commit is contained in:
devZoGok
2023-12-09 12:26:13 +02:00
parent 1bbf4dc40e
commit 90ebaf467f
3 changed files with 40 additions and 29 deletions
+36
View File
@@ -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 <assetManager.h>
#include <stateManager.h>
#include <solUtil.h>
#include <SFML/Audio.hpp>
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;
}
}
+2 -27
View File
@@ -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;
}
}
+2 -2
View File
@@ -12,6 +12,7 @@
#include <vector>
//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<Unit*> getSelectedUnits(Player*);
inline ActiveGameState* getActiveState(){return activeState;}
private:
bool isMainMenuActive = false;
std::vector<std::string> difficultyLevels, factions, modelPaths;
Player *mainPlayer;
int playerId;
ActiveGameState* activeState;
void toggleMainMenu();
};
}