#pragma once #include "constants.hpp" #include "simplefsm.hpp" #include "gui/debug_ui.hpp" #include "gui/main_ui.hpp" #include "gui/combat_ui.hpp" #include "gui/status_ui.hpp" #include "gui/loot_ui.hpp" #include "boss/fight.hpp" #include "gui/map_view.hpp" #include "events.hpp" #include "gui/event_router.hpp" #include "gui/dnd_loot.hpp" #include "storyboard/ui.hpp" #include "events.hpp" namespace gui { enum class State { START=__LINE__, MOVING=__LINE__, IN_COMBAT=__LINE__, COMBAT_ROTATE=__LINE__, ATTACKING=__LINE__, ROTATING=__LINE__, BOSS_FIGHT=__LINE__, LOOTING=__LINE__, IDLE=__LINE__, CUT_SCENE_PLAYING=__LINE__, END=__LINE__, }; class FSM : public DeadSimpleFSM { public: sf::RenderWindow $window; bool $draw_stats = false; bool autowalking = false; bool $map_open = false; DebugUI $debug_ui; MainUI $main_ui; std::shared_ptr $boss_fight = nullptr; std::shared_ptr $boss_scene = nullptr; CombatUI $combat_ui; StatusUI $status_ui; MapViewUI $map_ui; LootUI $loot_ui; sf::Font $font; gui::routing::Router $router; DNDLoot $dnd_loot; FSM(); void event(game::Event ev, std::any data={}); void autowalk(); void start_autowalk(double rot_speed); void START(game::Event ev); void MOVING(game::Event ev); void ATTACKING(game::Event ev, std::any data); void MAPPING(game::Event ev); void ROTATING(game::Event ev); void IDLE(game::Event ev, std::any data); void IN_COMBAT(game::Event ev); void COMBAT_ROTATE(game::Event ev); void BOSS_FIGHT(game::Event ev, std::any data); void LOOTING(game::Event ev, std::any data); void CUT_SCENE_PLAYING(game::Event ev, std::any data); void END(game::Event ev); void try_move(int dir, bool strafe); sf::Vector2f mouse_position(); void mouse_action(guecs::Modifiers mods); void handle_keyboard_mouse(); void draw_gui(); void render(); bool active(); void run_systems(); void handle_world_events(); void handle_boss_fight_events(); void next_level(bool bossfight); void debug_render(); void take_screenshot(); }; }