#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 }; };