#include "gui/uisystems.hpp" #include "gui/guecstra.hpp" namespace UISystem { std::optional<guecs::Entity> loot_grab(guecs::UI& gui, std::any data) { auto gui_id = std::any_cast<guecs::Entity>(data); if(auto source = gui.get_if<guecs::GrabSource>(gui_id)) { source->grab(); return gui_id; } else { return std::nullopt; } } bool loot_drop(guecs::UI& source, guecs::UI& target, std::optional<guecs::Entity> source_id, std::any data) { if(!source_id) return false; auto target_id = std::any_cast<guecs::Entity>(data); auto& drop = target.get<guecs::DropTarget>(target_id); auto& grab = source.get<guecs::GrabSource>(*source_id); if(drop.commit(grab.world_entity)) { grab.commit(); return true; } else { return false; } } }