libultraship
Reimplementations of libultra (N64 SDK) functions for modern hardware
Loading...
Searching...
No Matches
EventTypes.h
Go to the documentation of this file.
1#pragma once
2
3#include <stdint.h>
4#include "ship/Api.h"
5
8typedef int32_t EventID;
10typedef int64_t ListenerID;
11
24
33typedef struct {
36} IEvent;
37
39typedef void (*EventCallback)(IEvent*);
40
44typedef struct EventMetadata {
45 const char* Path;
46 int Line;
47 uint64_t Count;
49
59
81#ifdef INIT_EVENT_IDS
82#ifdef __cplusplus
84#define DECLARE_EVENT(eventName) extern "C" EventID eventName##ID = -1;
85#else
86#define DECLARE_EVENT(eventName) EventID eventName##ID = -1;
87#endif
88#else
90#define DECLARE_EVENT(eventName) API_EXPORT EventID eventName##ID;
91#endif
92
93#define STRINGIFY_DETAIL(x) #x
94#define TOSTRING(x) STRINGIFY_DETAIL(x)
95
97#define FILE_AND_LINE __FILE__ ":" TOSTRING(__LINE__)
98
110#define DEFINE_EVENT(eventName, ...) \
111 typedef struct { \
112 IEvent Event; \
113 __VA_ARGS__ \
114 } eventName; \
115 \
116 DECLARE_EVENT(eventName)
117
123#define CALL_EVENT(eventType, ...) \
124 eventType eventType##_ = { { false }, __VA_ARGS__ }; \
125 EventSystemCallEvent(eventType##ID, &eventType##_, __FILE__, __LINE__, FILE_AND_LINE);
126
137#define CALL_CANCELLABLE_EVENT(eventType, ...) \
138 eventType eventType##_ = { { false }, __VA_ARGS__ }; \
139 EventSystemCallEvent(eventType##ID, &eventType##_, __FILE__, __LINE__, FILE_AND_LINE); \
140 if (!eventType##_.Event.Cancelled)
141
147#define CHECK_IF_NOT_CANCELLED(eventType) if (!eventType##_.Event.Cancelled)
148
152#define CALL_CANCELLABLE_RETURN_EVENT(eventType, ...) \
153 eventType eventType##_ = { { false }, __VA_ARGS__ }; \
154 EventSystemCallEvent(eventType##ID, &eventType##_, __FILE__, __LINE__, FILE_AND_LINE); \
155 if (eventType##_.Event.Cancelled) { \
156 return; \
157 }
158
164#define REGISTER_EVENT(eventType) eventType##ID = EventSystemRegisterEvent(#eventType);
165
172#define REGISTER_LISTENER(eventType, priority, callback) \
173 EventSystemRegisterListener(eventType##ID, callback, priority, __FILE__, __LINE__);
174
180#define UNREGISTER_LISTENER(eventType, listenerID) EventSystemUnregisterListener(eventType##ID, listenerID);
181
// end of EventMacros group
183
API export/import macros for cross-platform shared library symbol visibility.
EventPriority
Priority levels that control listener dispatch order within an event.
Definition EventTypes.h:19
@ EVENT_PRIORITY_HIGH
Invoked last; suitable for override or post-processing handlers.
Definition EventTypes.h:22
@ EVENT_PRIORITY_LOW
Invoked first; suitable for default or early handlers.
Definition EventTypes.h:20
@ EVENT_PRIORITY_NORMAL
Default priority for most listeners.
Definition EventTypes.h:21
int32_t EventID
Numeric identifier for an event. -1 is uninitialized, IDs < -1 are internally registered,...
Definition EventTypes.h:8
TickEvent
Built-in tick phases used by Context::Tick().
Definition EventTypes.h:185
@ TICK_EVENT_UPDATE
Definition EventTypes.h:186
@ TICK_EVENT_DRAW
Definition EventTypes.h:188
@ TICK_EVENT_LATE_UPDATE
Definition EventTypes.h:187
void(* EventCallback)(IEvent *)
Callback signature for event listeners. The argument is the event payload cast to IEvent*.
Definition EventTypes.h:39
int64_t ListenerID
Numeric identifier for a registered listener; used to unregister later.
Definition EventTypes.h:10
Runtime record for a single event listener registration.
Definition EventTypes.h:53
EventCallback Function
The callback to invoke when the event fires.
Definition EventTypes.h:56
ListenerID ID
Unique identifier assigned at registration time.
Definition EventTypes.h:54
EventPriority Priority
Dispatch priority; higher values fire first.
Definition EventTypes.h:55
EventMetadata Metadata
Diagnostic metadata about the registration site.
Definition EventTypes.h:57
Diagnostic metadata recorded for each unique call site that fires an event.
Definition EventTypes.h:44
uint64_t Count
Number of times this call site has fired the event.
Definition EventTypes.h:47
int Line
Source line number of the call site.
Definition EventTypes.h:46
Base event payload struct.
Definition EventTypes.h:33
bool Cancelled
Set to true by a listener to indicate the event has been handled and should not propagate further.
Definition EventTypes.h:35