43 lines
1.1 KiB
C++
43 lines
1.1 KiB
C++
#include "GameStateManager.h"
|
|||
|
|
#include "StateFactories.h"
|
||
|
|
|
||
|
|
GameStateManager& GameStateManager::Instance() {
|
||
|
|
static GameStateManager instance;
|
||
|
|
return instance;
|
||
|
|
}
|
||
|
|
|
||
|
|
void GameStateManager::RequestStateChange(StateID id) {
|
||
|
|
hasPendingChange = true;
|
||
|
|
pendingState = id;
|
||
|
|
}
|
||
|
|
|
||
|
|
void GameStateManager::Update() {
|
||
|
|
if (hasPendingChange) {
|
||
|
|
hasPendingChange = false;
|
||
|
|
|
||
|
|
if (currentState) {
|
||
|
|
currentState->Exit();
|
||
|
|
}
|
||
|
|
|
||
|
|
switch (pendingState) {
|
||
|
|
case StateID::MainMenu: currentState = CreateMainMenuState(); break;
|
||
|
|
case StateID::Settings: currentState = CreateSettingsState(); break;
|
||
|
|
case StateID::Menu1: currentState = CreateMenu1State(); break;
|
||
|
|
case StateID::Menu2: currentState = CreateMenu2State(); break;
|
||
|
|
case StateID::Menu3: currentState = CreateMenu3State(); break;
|
||
|
|
}
|
||
|
|
|
||
|
|
currentState->Enter();
|
||
|
|
}
|
||
|
|
|
||
|
|
if (currentState) {
|
||
|
|
currentState->Update();
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
void GameStateManager::Render() {
|
||
|
|
if (currentState) {
|
||
|
|
currentState->Render();
|
||
|
|
}
|
||
|
|
}
|