diff --git a/Makefile b/Makefile index eeea2eb..1040bdd 100644 --- a/Makefile +++ b/Makefile @@ -16,7 +16,7 @@ test: meson test -C builddir --suite turings_tarpit # make an install for real maybe copy dll and .exe to dir and zip? -install: build +install: build test powershell "cp ./builddir/subprojects/libgit2-1.8.1/liblibgit2package.dll ." powershell "cp ./builddir/subprojects/efsw/libefsw.dll ." powershell "cp builddir/escape_turings_tarpit.exe ." diff --git a/game_engine.cpp b/game_engine.cpp index cf18ed9..6042c3c 100644 --- a/game_engine.cpp +++ b/game_engine.cpp @@ -59,3 +59,23 @@ void GameEngine::heal() { bool GameEngine::is_dead() { return hit_points <= 0; } + +void GameEngine::start(GameEvent ev) { + state(GameState::IDLE); +} + +void GameEngine::idle(GameEvent ev) { + state(GameState::IDLE); +} + +void GameEngine::in_round(GameEvent ev) { + state(GameState::IN_ROUND); +} + +void GameEngine::dead(GameEvent ev) { + state(GameState::DEAD); +} + +void GameEngine::alive(GameEvent ev) { + state(GameState::ALIVE); +} diff --git a/game_engine.hpp b/game_engine.hpp index 4fd04f6..bff805d 100644 --- a/game_engine.hpp +++ b/game_engine.hpp @@ -4,10 +4,21 @@ #include #include #include +#include "fsm.hpp" using std::string; -class GameEngine { +enum class GameState { + START, IDLE, IN_ROUND, DEAD, ALIVE +}; + + +enum class GameEvent { + BUILD_START, BUILD_END, + HIT +}; + +class GameEngine : DeadSimpleFSM { std::map damage_types{ {"error", 4}, {"warning", 1}, @@ -20,6 +31,7 @@ class GameEngine { int hits_taken = 0; int rounds = 0; int streak = 0; + GameState _state = GameState::START; GameEngine(int hp); @@ -27,16 +39,30 @@ class GameEngine { GameEngine(GameEngine &g) = delete; int determine_damage(string &type); + bool is_dead(); - void start_round(); + void event(GameEvent ev) { + switch(_state) { + FSM_STATE(GameState::START, start, ev); + FSM_STATE(GameState::IDLE, idle, ev); + FSM_STATE(GameState::IN_ROUND, in_round, ev); + FSM_STATE(GameState::DEAD, dead, ev); + FSM_STATE(GameState::ALIVE, alive, ev); + } + } - void end_round(); + // FSM to replace the others + void start(GameEvent ev); + void idle(GameEvent ev); + void in_round(GameEvent ev); + void dead(GameEvent ev); + void alive(GameEvent ev); - bool hit(string &type); - - bool is_dead(); + // current API that will die + void start_round(); + void end_round(); void heal(); - + bool hit(string &type); void reset(); };