diff --git a/src/gui/event_router.cpp b/src/gui/event_router.cpp index 469731d..c2f4d22 100644 --- a/src/gui/event_router.cpp +++ b/src/gui/event_router.cpp @@ -2,6 +2,7 @@ #include "event_router.hpp" #include "dbc.hpp" #include "events.hpp" +#include namespace gui { namespace routing { @@ -15,28 +16,17 @@ namespace gui { return {game::Event::QUIT, guecs::NO_MODS}; } + mouse_mods = guecs::NO_MODS; + if(const auto* mouse = ev->getIf()) { - if(mouse->button == sf::Mouse::Button::Left || mouse->button == sf::Mouse::Button::Right) { - left_button = mouse->button == sf::Mouse::Button::Left; - position = mouse->position; - if(left_button) { - mouse_mods = {1 << guecs::ModBit::left}; - } else { - mouse_mods = {1 << guecs::ModBit::right}; - } - event(MOUSE_DOWN); - } + set_mouse(mouse); + event(MOUSE_DOWN); } else if(const auto* mouse = ev->getIf()) { - // need to sort this out but if you don't do this it thinks you're always pressing it - if(mouse->button == sf::Mouse::Button::Left || mouse->button == sf::Mouse::Button::Right) { - left_button = mouse->button == sf::Mouse::Button::Left; - position = mouse->position; - mouse_mods = guecs::NO_MODS; - event(MOUSE_UP); - } + set_mouse(mouse); + event(MOUSE_UP); } else if(const auto* mouse = ev->getIf()) { + mouse_mods.set(guecs::ModBit::hover); position = mouse->position; - mouse_mods = {1 << guecs::ModBit::hover}; event(MOUSE_MOVE); } @@ -99,8 +89,11 @@ namespace gui { set_event(game::Event::KEY_PRESS); state(State::IDLE); break; + case MOUSE_DOWN: + dbc::log("IGNORED! MOUSE_DOWN received while in MOUSE_ACTIVE"); + break; default: - dbc::sentinel("invalid event"); + dbc::sentinel($F("INVALID EVENT: {}", magic_enum::enum_name(ev))); } } diff --git a/src/gui/event_router.hpp b/src/gui/event_router.hpp index 5445ac4..f6ce3b6 100644 --- a/src/gui/event_router.hpp +++ b/src/gui/event_router.hpp @@ -46,6 +46,19 @@ namespace gui { void set_event(game::Event ev) { $next_event = ev; } + + void set_mouse(const auto* mouse) { + if(mouse->button == sf::Mouse::Button::Left) { + mouse_mods.set(guecs::ModBit::left); + } + + if(mouse->button == sf::Mouse::Button::Right) { + mouse_mods.set(guecs::ModBit::right); + } + + // need to sort this out but if you don't do this it thinks you're always pressing it + position = mouse->position; + } }; } }