#pragma once #include "raycaster.hpp" #include "constants.hpp" #include "stats.hpp" #include "levelmanager.hpp" #include "camera.hpp" #include "fsm.hpp" namespace gui { enum class State { START, MOVING, ROTATING, IDLE, END }; enum class Event { STARTED, TICK, MOVE_FORWARD, MOVE_BACK, MOVE_LEFT, MOVE_RIGHT, ROTATE_LEFT, ROTATE_RIGHT, QUIT }; class FSM : public DeadSimpleFSM { public: GameLevel level; float $rotation = -30.0f; Point $player{0,0}; LevelManager $levels; sf::RenderWindow $window; CameraLOL $camera; sf::Font $font; sf::Text $text; Stats $stats; TexturePack $textures; Raycaster $rayview; FSM(); void event(Event ev); void START(Event ); void MOVING(Event ); void ROTATING(Event ); void IDLE(Event ev); void END(Event ev); bool can_move(Point move_to); void keyboard(); void draw_weapon(); void draw_gui(); void render(); void mouse(); void generate_map(); bool active(); void run_systems(); }; }