diff options
Diffstat (limited to 'src/port/hooks/impl/EventSystem.cpp')
| -rw-r--r-- | src/port/hooks/impl/EventSystem.cpp | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/src/port/hooks/impl/EventSystem.cpp b/src/port/hooks/impl/EventSystem.cpp new file mode 100644 index 00000000..5aa74bc0 --- /dev/null +++ b/src/port/hooks/impl/EventSystem.cpp @@ -0,0 +1,29 @@ +#include "EventSystem.h" + +EventSystem* EventSystem::Instance = new EventSystem(); + +size_t EventSystem::RegisterListener(EventID id, EventPriority priority, EventCallback callback) { + if (std::find(this->mEventListeners[id].begin(), this->mEventListeners[id].end(), callback) != this->mEventListeners[id].end()) { + throw std::runtime_error("Listener already registered"); + } + + this->mEventListeners[id].push_back(callback); +} + +void EventSystem::CallEvent(EventID id, IEvent* event) { + if (this->mEventListeners[id].empty()) { + return; + } + + for (auto& callback : this->mEventListeners[id]) { + callback(event); + } +} + +extern "C" size_t EventSystem_RegisterListener(EventID id, EventPriority priority, EventCallback callback) { + return EventSystem::Instance->RegisterListener(id, priority, callback); +} + +extern "C" void EventSystem_CallEvent(EventID id, void* event) { + EventSystem::Instance->CallEvent(id, static_cast<IEvent*>(event)); +}
\ No newline at end of file |
