#pragma once #include #include #include #include #include "fsm.hpp" using std::string; 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}, {"note", 0}, }; public: int starting_hp = 0; int hit_points = 0; int hits_taken = 0; int rounds = 0; int streak = 0; GameState _state = GameState::START; GameEngine(int hp); // FOUND BUG: I was accidentally copying this and shouldn't have been GameEngine(GameEngine &g) = delete; int determine_damage(string &type); bool is_dead(); 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); } } // 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); // current API that will die void start_round(); void end_round(); void heal(); bool hit(string &type); void reset(); };