#pragma once #include "raycaster.hpp" #include "constants.hpp" #include "stats.hpp" #include "levelmanager.hpp" #include "camera.hpp" #include "fsm.hpp" #include "render.hpp" #include "panel.hpp" #include using ftxui::Canvas; namespace gui { class MapViewUI : public Panel { public: Canvas $canvas; GameLevel $level; MapViewUI(GameLevel &level); void create_render(); void resize_canvas(); void draw_map(); void update_level(GameLevel &level); }; enum class State { START, MOVING, MAPPING, ROTATING, IDLE, END }; enum class Event { STARTED, TICK, MOVE_FORWARD, MOVE_BACK, MOVE_LEFT, MOVE_RIGHT, MAP_OPEN, CLOSE, ROTATE_LEFT, ROTATE_RIGHT, QUIT }; class FSM : public DeadSimpleFSM { public: float $rotation = -30.0f; Point $player{0,0}; LevelManager $levels; sf::RenderWindow $window; SFMLRender $renderer; GameLevel $level; MapViewUI $map_view; 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 MAPPING(Event); void ROTATING(Event ); void IDLE(Event ev); void END(Event ev); void try_move(int dir, bool strafe); void keyboard(); void draw_weapon(); void draw_gui(); void render(); void mouse(); void generate_map(); bool active(); void run_systems(); }; }