Event router wasn't sending button press information correctly.

This commit is contained in:
Zed A. Shaw 2026-08-09 12:34:06 -04:00
parent 4ed2fa192b
commit 79dc86809f
2 changed files with 25 additions and 19 deletions

View file

@ -2,6 +2,7 @@
#include "event_router.hpp"
#include "dbc.hpp"
#include "events.hpp"
#include <magic_enum/magic_enum.hpp>
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<sf::Event::MouseButtonPressed>()) {
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<sf::Event::MouseButtonReleased>()) {
// 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<sf::Event::MouseMoved>()) {
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)));
}
}

View file

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