BeagleRescue/src/game/GameStateManager.h

58 lines
1.7 KiB
C++

#pragma once
#include "StateMachine.h"
// Structure to hold event data passed into state StateMachine
struct GameData : public EventData
{
char* menuId;
bool win;
};
// The Game State Machine Class
class GameStateManager : public StateMachine
{
public:
GameStateManager() : StateMachine(ST_MAX_STATES) {}
// external events taken by this state machine
void AdvanceState();
void GameOver();
void PauseGame(GameData* gameData);
private:
//state machine state functions
void ST_Init(EventData*);
void ST_TitleScreen(EventData*);
void ST_Instructions(GameData*);
void ST_HiScoreList(GameData*);
void ST_Credits(GameData*);
void ST_CoreGame(EventData*);
void ST_PauseScreen(EventData*);
void ST_GameOver(GameData*);
//state map to define state function order
BEGIN_STATE_MAP
STATE_MAP_ENTRY(&GameStateManager::ST_Init)
STATE_MAP_ENTRY(&GameStateManager::ST_TitleScreen)
STATE_MAP_ENTRY(&GameStateManager::ST_Instructions)
STATE_MAP_ENTRY(&GameStateManager::ST_HiScoreList)
STATE_MAP_ENTRY(&GameStateManager::ST_Credits)
STATE_MAP_ENTRY(&GameStateManager::ST_CoreGame)
STATE_MAP_ENTRY(&GameStateManager::ST_PauseScreen)
STATE_MAP_ENTRY(&GameStateManager::ST_GameOver)
END_STATE_MAP
//state enumeration order must match order of state method entries on state map
enum E_States {
ST_INIT = 0,
ST_TITLESCREEN,
ST_INSTRUCTIONS,
ST_HISCORELIST,
ST_CREDITS,
ST_COREGAME,
ST_PAUSESCREEN,
ST_GAMEOVER,
ST_MAX_STATES
};
};