Event router wasn't sending button press information correctly.
This commit is contained in:
parent
4ed2fa192b
commit
79dc86809f
2 changed files with 25 additions and 19 deletions
|
|
@ -2,6 +2,7 @@
|
||||||
#include "event_router.hpp"
|
#include "event_router.hpp"
|
||||||
#include "dbc.hpp"
|
#include "dbc.hpp"
|
||||||
#include "events.hpp"
|
#include "events.hpp"
|
||||||
|
#include <magic_enum/magic_enum.hpp>
|
||||||
|
|
||||||
namespace gui {
|
namespace gui {
|
||||||
namespace routing {
|
namespace routing {
|
||||||
|
|
@ -15,28 +16,17 @@ namespace gui {
|
||||||
return {game::Event::QUIT, guecs::NO_MODS};
|
return {game::Event::QUIT, guecs::NO_MODS};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
mouse_mods = guecs::NO_MODS;
|
||||||
|
|
||||||
if(const auto* mouse = ev->getIf<sf::Event::MouseButtonPressed>()) {
|
if(const auto* mouse = ev->getIf<sf::Event::MouseButtonPressed>()) {
|
||||||
if(mouse->button == sf::Mouse::Button::Left || mouse->button == sf::Mouse::Button::Right) {
|
set_mouse(mouse);
|
||||||
left_button = mouse->button == sf::Mouse::Button::Left;
|
event(MOUSE_DOWN);
|
||||||
position = mouse->position;
|
|
||||||
if(left_button) {
|
|
||||||
mouse_mods = {1 << guecs::ModBit::left};
|
|
||||||
} else {
|
|
||||||
mouse_mods = {1 << guecs::ModBit::right};
|
|
||||||
}
|
|
||||||
event(MOUSE_DOWN);
|
|
||||||
}
|
|
||||||
} else if(const auto* mouse = ev->getIf<sf::Event::MouseButtonReleased>()) {
|
} 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
|
set_mouse(mouse);
|
||||||
if(mouse->button == sf::Mouse::Button::Left || mouse->button == sf::Mouse::Button::Right) {
|
event(MOUSE_UP);
|
||||||
left_button = mouse->button == sf::Mouse::Button::Left;
|
|
||||||
position = mouse->position;
|
|
||||||
mouse_mods = guecs::NO_MODS;
|
|
||||||
event(MOUSE_UP);
|
|
||||||
}
|
|
||||||
} else if(const auto* mouse = ev->getIf<sf::Event::MouseMoved>()) {
|
} else if(const auto* mouse = ev->getIf<sf::Event::MouseMoved>()) {
|
||||||
|
mouse_mods.set(guecs::ModBit::hover);
|
||||||
position = mouse->position;
|
position = mouse->position;
|
||||||
mouse_mods = {1 << guecs::ModBit::hover};
|
|
||||||
event(MOUSE_MOVE);
|
event(MOUSE_MOVE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -99,8 +89,11 @@ namespace gui {
|
||||||
set_event(game::Event::KEY_PRESS);
|
set_event(game::Event::KEY_PRESS);
|
||||||
state(State::IDLE);
|
state(State::IDLE);
|
||||||
break;
|
break;
|
||||||
|
case MOUSE_DOWN:
|
||||||
|
dbc::log("IGNORED! MOUSE_DOWN received while in MOUSE_ACTIVE");
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
dbc::sentinel("invalid event");
|
dbc::sentinel($F("INVALID EVENT: {}", magic_enum::enum_name(ev)));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -46,6 +46,19 @@ namespace gui {
|
||||||
void set_event(game::Event ev) {
|
void set_event(game::Event ev) {
|
||||||
$next_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;
|
||||||
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue