diff --git a/gui/dnd_loot.cpp b/gui/dnd_loot.cpp index 61dd677..1451b83 100644 --- a/gui/dnd_loot.cpp +++ b/gui/dnd_loot.cpp @@ -76,28 +76,8 @@ namespace gui { state(DNDState::LOOTING); } break; - case MOUSE_CLICK: - mouse_action(false); - break; - case MOUSE_DRAG: - case MOUSE_MOVE: { - if($grab_source) { - auto& source = $loot_ui.$gui.get(*$grab_source); - source.move($window.mapPixelToCoords($router.position)); - } - mouse_action(true); - } break; - case MOUSE_DRAG_START: - mouse_action(false); - break; - case MOUSE_DROP: - mouse_action(false); - break; - case TICK: - // do nothing - break; default: - state(DNDState::LOOT_GRAB); + handle_mouse(ev, $loot_ui.$gui); } } @@ -120,25 +100,8 @@ namespace gui { $grab_source = UISystem::loot_grab($status_ui.$gui, data); state(DNDState::LOOTING); break; - case MOUSE_CLICK: - mouse_action(false); - break; - case MOUSE_DRAG: - case MOUSE_MOVE: { - if($grab_source) { - auto& source = $status_ui.$gui.get(*$grab_source); - source.move($window.mapPixelToCoords($router.position)); - } - mouse_action(true); - } break; - case MOUSE_DRAG_START: { - mouse_action(false); - } break; - case MOUSE_DROP: - mouse_action(false); - break; default: - state(DNDState::INV_GRAB); + handle_mouse(ev, $status_ui.$gui); } } @@ -170,4 +133,31 @@ namespace gui { $status_ui.mouse(pos.x, pos.y, hover); if($loot_ui.active) $loot_ui.mouse(pos.x, pos.y, hover); } + + void DNDLoot::handle_mouse(Event ev, guecs::UI& gui) { + using enum Event; + + switch(ev) { + case MOUSE_CLICK: + mouse_action(false); + break; + case MOUSE_DRAG: + case MOUSE_MOVE: { + if($grab_source) { + auto& source = gui.get(*$grab_source); + source.move($window.mapPixelToCoords($router.position)); + } + mouse_action(true); + } break; + case MOUSE_DRAG_START: + mouse_action(false); + break; + case MOUSE_DROP: + mouse_action(false); + break; + default: + break; // ignored + } + } + } diff --git a/gui/dnd_loot.hpp b/gui/dnd_loot.hpp index 9eeb450..f44f0f5 100644 --- a/gui/dnd_loot.hpp +++ b/gui/dnd_loot.hpp @@ -33,6 +33,7 @@ namespace gui { void LOOT_GRAB(Event ev, std::any data); void INV_GRAB(Event ev, std::any data); void END(Event ev); + void handle_mouse(Event ev, guecs::UI& gui); void mouse_action(bool hover); sf::Vector2f mouse_position(); };