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

This commit is contained in:
Zed A. Shaw 2025-06-14 22:56:23 -04:00
parent d99d9a68c8
commit cd02507023
2 changed files with 30 additions and 39 deletions

View file

@ -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<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:
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<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:
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<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
}
}
}