Tramway SDK
event.h
Go to the documentation of this file.
1// Tramway Drifting and Dungeon Exploration Simulator SDK Runtime
2
3#ifndef TRAM_SDK_FRAMEWORK_EVENT_H
4#define TRAM_SDK_FRAMEWORK_EVENT_H
5
6#include <cstdint>
7#include <cstddef>
8#include <type_traits>
9
10#include <framework/uid.h>
11
12namespace tram {
13
14typedef uint16_t event_t;
15typedef uint32_t id_t;
16typedef uint32_t listener_t;
17
18class EntityComponent;
19class Entity;
20
21struct Value;
22typedef Value value_t;
23
24struct Event {
25 enum Type : event_t {
26 NONE, //< Invalid event type
27 KEYPRESS, //< Keyboard key still pressed
28 KEYDOWN, //< Keyboard key pressed
29 KEYUP, //< Keyboard key released
30 KEYCHAR, //< Keyboard input registered
31 CURSORPOS, //< Cursor moved
32 FRAME, //< Emitted every frame
33 TICK, //< Emitted every tick
34 SELECTED, //< Cursor on top of an interactable object
35 LOOK_AT, //< Entity is looking in a direction
37 };
38
39 static event_t Register(const char* name);
40 static event_t GetType(name_t name);
41 static name_t GetName(event_t type);
42 static event_t GetLast();
43
44 static void Post(const Event &event);
45 static void Dispatch();
46
48 static listener_t AddListener(event_t type, Entity* entity);
49 static listener_t AddListener(event_t type, void* data, void (*handler)(Event& event, void* data));
50 static listener_t AddListener(event_t type, void (*handler)(Event& event));
51
52 static void RemoveListener(listener_t listener_id);
53
54 static void* AllocateData(size_t ammount);
55 template <typename T> static T* AllocateData() { return (T*)AllocateData(sizeof(T)); }
56 template <typename T> static T* AllocateData(const T& data) { T* ptr = (T*)AllocateData(sizeof(T)); *ptr = data; return ptr; }
57
61
62 union {
63 void* data = nullptr;
64 int32_t data_int;
66 };
67};
68
70public:
72 void make(event_t event, Entity* parent);
73 void make(event_t event, EntityComponent* parent);
74 void make(event_t event, void (*handler)(Event& event));
75 void clear();
76 explicit operator bool() { return listener != 0; }
77protected:
79};
80
81}
82
83#endif // TRAM_SDK_FRAMEWORK_EVENT_H
Component base class.
Definition: entitycomponent.h:16
Entity base class.
Definition: entity.h:23
Smart wrapper class for Event listeners.
Definition: event.h:69
~EventListener()
Definition: event.cpp:387
listener_t listener
Definition: event.h:78
void make(event_t event, Entity *parent)
Essentially same as Event::AddListener().
Definition: event.cpp:392
void clear()
Essentially same as Event::RemoveListener().
Definition: event.cpp:410
Generic, type-safe union.
Definition: value.h:18
Serialization, i.e.
uint16_t event_t
Definition: event.h:14
uint32_t id_t
Definition: core.h:10
Value value_t
Definition: event.h:21
uint32_t listener_t
Definition: event.h:16
Event data.
Definition: event.h:24
static void RemoveListener(listener_t listener_id)
Deregisters a listener.
Definition: event.cpp:268
static T * AllocateData()
Definition: event.h:55
static event_t GetLast()
Returns the last event_t plus one.
Definition: event.cpp:186
static void Dispatch()
Dispatches events from the event queue.
Definition: event.cpp:313
event_t type
Type of the event.
Definition: event.h:58
static void Post(const Event &event)
Adds an event to the event queue.
Definition: event.cpp:366
Type
Definition: event.h:25
@ TICK
Definition: event.h:33
@ KEYCHAR
Definition: event.h:30
@ KEYUP
Definition: event.h:29
@ LAST_EVENT
Definition: event.h:36
@ CURSORPOS
Definition: event.h:31
@ FRAME
Definition: event.h:32
@ SELECTED
Definition: event.h:34
@ KEYDOWN
Definition: event.h:28
@ NONE
Definition: event.h:26
@ LOOK_AT
Definition: event.h:35
@ KEYPRESS
Definition: event.h:27
int32_t data_int
Arbitrary data integer.
Definition: event.h:64
static event_t Register(const char *name)
Registers a new event type.
Definition: event.cpp:131
void * data
Pointer to arbitrary data.
Definition: event.h:63
id_t poster
Definition: event.h:60
event_t subtype
Arbitrary event subtype.
Definition: event.h:59
value_t * data_value
Pointer to a value_t.
Definition: event.h:65
static T * AllocateData(const T &data)
Definition: event.h:56
static name_t GetName(event_t type)
Returns the name that was associated with a given event_t.
Definition: event.cpp:175
static listener_t AddListener(event_t type, EntityComponent *component)
Registers a listener.
Definition: event.cpp:203
static event_t GetType(name_t name)
Returns the event_t associated with a given name.
Definition: event.cpp:159
Interned string type.
Definition: uid.h:10