From 8462aee14e3732d482c5457569d61e3f8f60e9d9 Mon Sep 17 00:00:00 2001 From: KiritoDv Date: Sun, 29 Dec 2024 00:46:19 -0600 Subject: Moved to a dynamic id system and increased id size to uint32_t --- src/port/hooks/impl/EventSystem.cpp | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) (limited to 'src/port/hooks/impl/EventSystem.cpp') diff --git a/src/port/hooks/impl/EventSystem.cpp b/src/port/hooks/impl/EventSystem.cpp index 71eaffb5..3418b6ef 100644 --- a/src/port/hooks/impl/EventSystem.cpp +++ b/src/port/hooks/impl/EventSystem.cpp @@ -4,8 +4,16 @@ EventSystem* EventSystem::Instance = new EventSystem(); +EventID EventSystem::RegisterEvent() { + return this->mInternalEventID++; +} + ListenerID EventSystem::RegisterListener(EventID id, EventCallback callback, EventPriority priority) { - auto& listeners = this->mEventListeners[(uint8_t)((id >> 16) & 0xFF)][(uint16_t)(id & 0xFFFF)]; + if(id == -1) { + throw std::runtime_error("Trying to register listener for unregistered event"); + } + + auto& listeners = this->mEventListeners[id]; if(std::find_if(listeners.begin(), listeners.end(), [callback](EventListener listener) { return listener.function == callback; @@ -24,23 +32,23 @@ ListenerID EventSystem::RegisterListener(EventID id, EventCallback callback, Eve } void EventSystem::UnregisterListener(EventID id, ListenerID listenerId) { - auto& listeners = this->mEventListeners[(uint8_t)((id >> 16) & 0xFF)][(uint16_t)(id & 0xFFFF)]; + auto& listeners = this->mEventListeners[id]; listeners.erase(listeners.begin() + listenerId); } void EventSystem::CallEvent(EventID id, IEvent* event) { - auto& listeners = this->mEventListeners[(uint8_t)((id >> 16) & 0xFF)][(uint16_t)(id & 0xFFFF)]; - - if (listeners.empty()) { - return; - } + auto& listeners = this->mEventListeners[id]; for (auto& listener : listeners) { listener.function(event); } } +extern "C" EventID EventSystem_RegisterEvent() { + return EventSystem::Instance->RegisterEvent(); +} + extern "C" size_t EventSystem_RegisterListener(EventID id, EventCallback callback, EventPriority priority) { return EventSystem::Instance->RegisterListener(id, callback, priority); } -- cgit v1.2.3