Make a function that handles the mouse events for everything since those are very similar.

master
Zed A. Shaw 4 days ago
parent d99d9a68c8
commit cd02507023
  1. 68
      gui/dnd_loot.cpp
  2. 1
      gui/dnd_loot.hpp

@ -76,28 +76,8 @@ namespace gui {
state(DNDState::LOOTING); state(DNDState::LOOTING);
} }
break; break;
case MOUSE_CLICK:
mouse_action(false);
break;
case MOUSE_DRAG:
case MOUSE_MOVE: {
if($grab_source) {
auto& source = $loot_ui.$gui.get<guecs::GrabSource>(*$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: 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); $grab_source = UISystem::loot_grab($status_ui.$gui, data);
state(DNDState::LOOTING); state(DNDState::LOOTING);
break; break;
case MOUSE_CLICK:
mouse_action(false);
break;
case MOUSE_DRAG:
case MOUSE_MOVE: {
if($grab_source) {
auto& source = $status_ui.$gui.get<guecs::GrabSource>(*$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: 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); $status_ui.mouse(pos.x, pos.y, hover);
if($loot_ui.active) $loot_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<guecs::GrabSource>(*$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
}
}
} }

@ -33,6 +33,7 @@ namespace gui {
void LOOT_GRAB(Event ev, std::any data); void LOOT_GRAB(Event ev, std::any data);
void INV_GRAB(Event ev, std::any data); void INV_GRAB(Event ev, std::any data);
void END(Event ev); void END(Event ev);
void handle_mouse(Event ev, guecs::UI& gui);
void mouse_action(bool hover); void mouse_action(bool hover);
sf::Vector2f mouse_position(); sf::Vector2f mouse_position();
}; };

Loading…
Cancel
Save