#pragma once #include "simplefsm.hpp" #include #include "gui/status_ui.hpp" #include "gui/loot_ui.hpp" #include "gui/event_router.hpp" namespace gui { enum class DNDState { START=100, LOOTING=101, LOOT_GRAB=102, INV_GRAB=103, ITEM_PICKUP=104, END=105 }; class DNDLoot : public DeadSimpleFSM { public: std::optional $grab_source = std::nullopt; std::shared_ptr $grab_sprite = nullptr; StatusUI& $status_ui; LootUI& $loot_ui; sf::RenderWindow& $window; routing::Router& $router; DNDLoot(StatusUI& status_ui, LootUI& loot_ui, sf::RenderWindow& window, routing::Router& router); bool event(Event ev, std::any data={}); void START(Event ev); void LOOTING(Event ev, std::any data); void LOOT_GRAB(Event ev, std::any data); void INV_GRAB(Event ev, std::any data); void END(Event ev); void ITEM_PICKUP(Event ev, std::any data); void handle_mouse(Event ev, guecs::UI& gui); void mouse_action(bool hover); void render(); void open(); void close(); sf::Vector2f mouse_position(); }; }