51 lines
1.2 KiB
C++
51 lines
1.2 KiB
C++
#pragma once
|
|
#include "events.hpp"
|
|
#include "events.hpp"
|
|
#include "algos/simplefsm.hpp"
|
|
#include <SFML/Graphics.hpp>
|
|
#include <guecs/ui.hpp>
|
|
|
|
namespace gui {
|
|
namespace routing {
|
|
enum class State {
|
|
START=__LINE__,
|
|
IDLE=__LINE__,
|
|
MOUSE_ACTIVE=__LINE__,
|
|
MOUSE_MOVING=__LINE__,
|
|
MOUSE_DRAGGING=__LINE__
|
|
};
|
|
|
|
enum class Event {
|
|
STARTED=0,
|
|
MOUSE_DOWN=1,
|
|
MOUSE_UP=2,
|
|
MOUSE_MOVE=3,
|
|
KEY_PRESS=4
|
|
};
|
|
|
|
class Router : public DeadSimpleFSM<State, Event> {
|
|
public:
|
|
sf::Vector2i position;
|
|
guecs::Modifiers mouse_mods = guecs::NO_MODS;
|
|
sf::Keyboard::Scancode scancode;
|
|
game::Event $next_event = game::Event::TICK;
|
|
int move_count = 0;
|
|
bool left_button = true;
|
|
int $drag_tolerance = 4;
|
|
|
|
void event(Event ev);
|
|
|
|
void START(Event ev);
|
|
void IDLE(Event ev);
|
|
void MOUSE_ACTIVE(Event ev);
|
|
void MOUSE_MOVING(Event ev);
|
|
void MOUSE_DRAGGING(Event ev);
|
|
|
|
std::pair<game::Event, guecs::Modifiers> process_event(std::optional<sf::Event> ev);
|
|
|
|
void set_event(game::Event ev) {
|
|
$next_event = ev;
|
|
}
|
|
};
|
|
}
|
|
}
|