Exploring raycasters and possibly make a little "doom like" game based on it.
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.
 
 
 
 
 
 
raycaster/event_router.cpp

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");
}
}
}