From e4de32f9f7c461b6adad6df7156c3c0eae60b2dc Mon Sep 17 00:00:00 2001 From: Alan Youngblood Date: Mon, 15 Feb 2021 21:10:18 -0500 Subject: [PATCH] Added FSM and Game State Manager --- build/BeagleRescue | Bin 314584 -> 321488 bytes src/ecs/KeyboardController.h | 9 +++- src/game/Game.cpp | 6 ++- src/game/Game.hpp | 2 + src/game/GameStateManager.cpp | 95 ++++++++++++++++++++++++++++++++++ src/game/GameStateManager.h | 57 ++++++++++++++++++++ src/game/StateMachine.cpp | 84 ++++++++++++++++++++++++++++++ src/game/StateMachine.h | 64 +++++++++++++++++++++++ 8 files changed, 315 insertions(+), 2 deletions(-) create mode 100644 src/game/GameStateManager.cpp create mode 100644 src/game/GameStateManager.h create mode 100644 src/game/StateMachine.cpp create mode 100644 src/game/StateMachine.h diff --git a/build/BeagleRescue b/build/BeagleRescue index ace83dce34533c6febf3a93673088e7e11516d19..4f34e47a308d3866e37c3dd2a1951afaef718315 100755 GIT binary patch delta 91404 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 go}tw?N0Zpt*!ep2pP`MmywVpR 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 diff --git a/src/ecs/KeyboardController.h b/src/ecs/KeyboardController.h index 6bf7f63..0123271 100644 --- a/src/ecs/KeyboardController.h +++ b/src/ecs/KeyboardController.h @@ -87,7 +87,7 @@ public: sprite->Play("Idle"); if (!Game::gravityOnPlayer){ Game::gravityOnPlayer = true; - sprite->Play("Fall"); +// sprite->Play("Fall"); } break; case SDLK_RIGHT: @@ -108,6 +108,13 @@ public: transform->velocity.y = 0; sprite->Play("Fall"); Game::gravityOnPlayer = true; + break; + case SDLK_u: +// Advance the GSM state via the u key + Game::gsm->AdvanceState(); + break; + case SDLK_i: + Game::gsm->GameOver(); break; case SDLK_ESCAPE: // exit the game when Escape pressed Game::isRunning = false; diff --git a/src/game/Game.cpp b/src/game/Game.cpp index 9463acc..1d1e8ea 100644 --- a/src/game/Game.cpp +++ b/src/game/Game.cpp @@ -28,6 +28,7 @@ UIText* text; UINineSlice* my9Slice; UIText* scoreboardText; UINineSlice* scoreboard9Slice; +GameStateManager* Game::gsm = new GameStateManager(); SDL_Renderer* Game::renderer = nullptr; SDL_Event Game::event; @@ -243,7 +244,10 @@ void Game::update() void Game::render() { SDL_RenderClear(renderer); - +// if (gsm->currentState==GameStateManager::ST_COREGAME) +// { +// printf("Core Game state\n"); +// } for (auto& t : tiles) { t->draw(); diff --git a/src/game/Game.hpp b/src/game/Game.hpp index be6af5b..b463bb4 100644 --- a/src/game/Game.hpp +++ b/src/game/Game.hpp @@ -15,6 +15,7 @@ #include #include "Vector2D.h" #include "../assetmgr/AssetManager.h" +#include "GameStateManager.h" class ColliderComponent; class AssetManager; @@ -41,6 +42,7 @@ public: static bool playerIsGrounded; static SDL_Rect camera; static AssetManager* assets; + static GameStateManager* gsm; enum groupLabels : std::size_t { groupMap, diff --git a/src/game/GameStateManager.cpp b/src/game/GameStateManager.cpp new file mode 100644 index 0000000..ac95ed1 --- /dev/null +++ b/src/game/GameStateManager.cpp @@ -0,0 +1,95 @@ +#include +#include "GameStateManager.h" +#include + +using namespace std; + +void GameStateManager::AdvanceState() +{ + //given the AdvanceState event transition to a new state based on current state and gameData + BEGIN_TRANSITION_MAP // (Next State) // - Current State - + TRANSITION_MAP_ENTRY (ST_TITLESCREEN) // ST_Init + TRANSITION_MAP_ENTRY (ST_COREGAME) // ST_TitleScreen + TRANSITION_MAP_ENTRY (EVENT_IGNORED) // ST_Instructions + TRANSITION_MAP_ENTRY (EVENT_IGNORED) // ST_HiScoreList + TRANSITION_MAP_ENTRY (EVENT_IGNORED) // ST_Credits + TRANSITION_MAP_ENTRY (EVENT_IGNORED) // ST_CoreGame + TRANSITION_MAP_ENTRY (ST_COREGAME) // ST_PauseScreen + TRANSITION_MAP_ENTRY (ST_INIT) // ST_GameOver + END_TRANSITION_MAP(NULL) +} + +void GameStateManager::PauseGame(GameData* gameData) +{ +// given the PauseGame event transition to a new state based on current state and gameData +// printf("gameData->isPaused: %d\n",gameData->isPaused); + BEGIN_TRANSITION_MAP // - Current State - + TRANSITION_MAP_ENTRY (EVENT_IGNORED) // ST_Init + TRANSITION_MAP_ENTRY (EVENT_IGNORED) // ST_TitleScreen + TRANSITION_MAP_ENTRY (EVENT_IGNORED) // ST_Instructions + TRANSITION_MAP_ENTRY (EVENT_IGNORED) // ST_HiScoreList + TRANSITION_MAP_ENTRY (EVENT_IGNORED) // ST_Credits + TRANSITION_MAP_ENTRY (EVENT_IGNORED) // ST_CoreGame + TRANSITION_MAP_ENTRY (ST_INSTRUCTIONS) // ST_PauseScreen + TRANSITION_MAP_ENTRY (CANNOT_HAPPEN) // ST_GameOver + END_TRANSITION_MAP(gameData) + + } +void GameStateManager::GameOver() +{ + //given the PauseGame event transition to a new state based on current state and gameData +// printf("GameOver triggered\n"); + BEGIN_TRANSITION_MAP // - Current State - + TRANSITION_MAP_ENTRY (EVENT_IGNORED) // ST_Init + TRANSITION_MAP_ENTRY (EVENT_IGNORED) // ST_TitleScreen + TRANSITION_MAP_ENTRY (EVENT_IGNORED) // ST_Instructions + TRANSITION_MAP_ENTRY (EVENT_IGNORED) // ST_HiScoreList + TRANSITION_MAP_ENTRY (EVENT_IGNORED) // ST_Credits + TRANSITION_MAP_ENTRY (ST_GAMEOVER) // ST_CoreGame + TRANSITION_MAP_ENTRY (EVENT_IGNORED) // ST_PauseScreen + TRANSITION_MAP_ENTRY (EVENT_IGNORED) // ST_GameOver + END_TRANSITION_MAP(NULL) +} + +void GameStateManager::ST_Init(EventData*) +{ + printf("GameStateManager::ST_Init\n"); +// InternalEvent(ST_TITLESCREEN); +} + +void GameStateManager::ST_TitleScreen(EventData*) +{ + printf("GameStateManager::ST_TitleScreen\n"); +// InternalEvent(ST_TITLESCREEN); +} + +void GameStateManager::ST_Instructions(GameData*) +{ + printf("GameStateManager::ST_Instructions\n"); +} + +void GameStateManager::ST_HiScoreList(GameData*) +{ + printf("GameStateManager::ST_HiScoreList\n"); +} + +void GameStateManager::ST_Credits(GameData*) +{ + printf("GameStateManager::ST_Credits\n"); +} + +void GameStateManager::ST_CoreGame(EventData*) +{ + printf("GameStateManager::ST_CoreGame\n"); +} + +void GameStateManager::ST_PauseScreen(EventData*) +{ + printf("GameStateManager::ST_PauseScreen\n"); +} + +void GameStateManager::ST_GameOver(GameData*) +{ + printf("GameStateManager::ST_GameOver\n"); +} + diff --git a/src/game/GameStateManager.h b/src/game/GameStateManager.h new file mode 100644 index 0000000..d2f8168 --- /dev/null +++ b/src/game/GameStateManager.h @@ -0,0 +1,57 @@ +#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 + }; +}; + diff --git a/src/game/StateMachine.cpp b/src/game/StateMachine.cpp new file mode 100644 index 0000000..49803c6 --- /dev/null +++ b/src/game/StateMachine.cpp @@ -0,0 +1,84 @@ +#include +#include "StateMachine.h" +// ============================================================================= +// Do NOT modify this file, instead make custom changes in the GameStateManager +// or create your own StateMachine including and implementing this header +// ============================================================================= + +StateMachine::StateMachine(unsigned char maxStates) : + currentState(0), + _maxStates(maxStates), + _eventGenerated(false), + _pEventData(NULL) +{ +} + +// generates an external event. called once per external event +// to start the state machine executing +void StateMachine::ExternalEvent(unsigned char newState, + EventData* pData) +{ + // if we are supposed to ignore this event + if (newState == EVENT_IGNORED) { + // just delete the event data, if any + if (pData) + delete pData; + } + else { + // TODO - capture software lock here for thread-safety if necessary + + // generate the event and execute the state engine + InternalEvent(newState, pData); + StateEngine(); + + // TODO - release software lock here + } +} + +// generates an internal event. called from within a state +// function to transition to a new state +void StateMachine::InternalEvent(unsigned char newState, + EventData* pData) +{ + if (pData == NULL) + pData = new EventData(); + + _pEventData = pData; + _eventGenerated = true; + currentState = newState; +} + +// the state engine executes the state machine states +void StateMachine::StateEngine(void) +{ + EventData* pDataTemp = NULL; + + // while events are being generated keep executing states + while (_eventGenerated) { + pDataTemp = _pEventData; // copy of event data pointer + _pEventData = NULL; // event data used up, reset ptr + _eventGenerated = false; // event used up, reset flag + + assert(currentState < _maxStates); + + // get state map + const StateStruct* pStateMap = GetStateMap(); + + // execute the state passing in event data, if any + (this->*pStateMap[currentState].pStateFunc)(pDataTemp); + + // if event data was used, then delete it + if (pDataTemp) { + delete pDataTemp; + pDataTemp = NULL; + } + } +} + +// unsigned char getCurrentState() +// { +// const StateStruct* pStateMap = GetStateMap(); +// this->*pStateMap[currentState]; +// unsigned char state = StateMachine.currentState; +// return state; +// } diff --git a/src/game/StateMachine.h b/src/game/StateMachine.h new file mode 100644 index 0000000..bda2119 --- /dev/null +++ b/src/game/StateMachine.h @@ -0,0 +1,64 @@ +#ifndef _STATE_MACHINE_H +#define _STATE_MACHINE_H +#include +// ============================================================================= +// Do NOT modify this file, instead make custom changes in the GameStateManager +// or create your own StateMachine including and implementing this header +// ============================================================================= +class EventData +{ +public: + virtual ~EventData() {}; +}; + +struct StateStruct; + +// base class for state machines +class StateMachine +{ +public: + StateMachine(unsigned char maxStates); + virtual ~StateMachine() {} +// unsigned char getCurrentState(); + unsigned char currentState; +protected: + enum { EVENT_IGNORED = 0xFE, CANNOT_HAPPEN }; + void ExternalEvent(unsigned char, EventData* = NULL); + void InternalEvent(unsigned char, EventData* = NULL); + virtual const StateStruct* GetStateMap() = 0; +private: + const unsigned char _maxStates; + bool _eventGenerated; + EventData* _pEventData; + void StateEngine(void); +}; + +typedef void (StateMachine::*StateFunc)(EventData *); +struct StateStruct +{ + StateFunc pStateFunc; +}; + +#define BEGIN_STATE_MAP \ +public:\ +const StateStruct* GetStateMap() {\ + static const StateStruct StateMap[] = { + +#define STATE_MAP_ENTRY(stateFunc)\ + { reinterpret_cast(stateFunc) }, + +#define END_STATE_MAP \ + }; \ + return &StateMap[0]; } + +#define BEGIN_TRANSITION_MAP \ + static const unsigned char TRANSITIONS[] = {\ + +#define TRANSITION_MAP_ENTRY(entry)\ + entry, + +#define END_TRANSITION_MAP(data) \ + 0 };\ + ExternalEvent(TRANSITIONS[currentState], data); + +#endif //STATE_MACHINE_H