You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
86 lines
1.9 KiB
86 lines
1.9 KiB
#define FSM_DEBUG 1
|
|
#include "event_router.hpp"
|
|
#include "dbc.hpp"
|
|
|
|
namespace routing {
|
|
using enum Event;
|
|
using enum State;
|
|
|
|
void Router::process_window(sf::RenderWindow& window) {
|
|
(void)window;
|
|
}
|
|
|
|
void Router::event(Event ev) {
|
|
switch($state) {
|
|
FSM_STATE(State, START, ev);
|
|
FSM_STATE(State, IDLE, ev);
|
|
FSM_STATE(State, MOUSE_ACTIVE, ev);
|
|
FSM_STATE(State, MOUSE_MOVING, ev);
|
|
}
|
|
}
|
|
|
|
void Router::START(Event ) {
|
|
state(State::IDLE);
|
|
}
|
|
|
|
void Router::IDLE(Event ev) {
|
|
switch(ev) {
|
|
case MOUSE_DOWN:
|
|
state(State::MOUSE_ACTIVE);
|
|
break;
|
|
case MOUSE_UP:
|
|
dbc::log("mouse up in IDLE");
|
|
break;
|
|
case MOUSE_MOVE:
|
|
dbc::log("mouse move, send moved event");
|
|
break;
|
|
case KEY_PRESS:
|
|
dbc::log("key pressed");
|
|
break;
|
|
default:
|
|
dbc::sentinel("invalid event");
|
|
}
|
|
}
|
|
|
|
void Router::MOUSE_ACTIVE(Event ev) {
|
|
switch(ev) {
|
|
case MOUSE_DOWN:
|
|
dbc::log("mouse down in MOUSE_ACTIVE");
|
|
break;
|
|
case MOUSE_UP:
|
|
dbc::log("mouse up, send click event");
|
|
state(State::IDLE);
|
|
break;
|
|
case MOUSE_MOVE:
|
|
state(State::MOUSE_MOVING);
|
|
break;
|
|
case KEY_PRESS:
|
|
dbc::log("send the key but cancel");
|
|
state(State::IDLE);
|
|
break;
|
|
default:
|
|
dbc::sentinel("invalid event");
|
|
}
|
|
}
|
|
|
|
void Router::MOUSE_MOVING(Event ev) {
|
|
switch(ev) {
|
|
case MOUSE_DOWN:
|
|
dbc::log("mouse down in MOUSE_MOVING state");
|
|
break;
|
|
case MOUSE_UP:
|
|
dbc::log("mouse up, send drop event");
|
|
state(State::IDLE);
|
|
break;
|
|
case MOUSE_MOVE:
|
|
dbc::log("mouse move, send drag event");
|
|
break;
|
|
case KEY_PRESS:
|
|
dbc::log("send the key but cancel");
|
|
state(State::IDLE);
|
|
break;
|
|
default:
|
|
dbc::sentinel("invalid event");
|
|
}
|
|
}
|
|
}
|
|
|