diff options
| author | KiritoDv <kiritodev01@gmail.com> | 2024-12-28 15:07:59 -0600 |
|---|---|---|
| committer | KiritoDv <kiritodev01@gmail.com> | 2024-12-28 15:07:59 -0600 |
| commit | 4419dfca91382efdeb57742f39de5c86ad5afa2d (patch) | |
| tree | 3032a4137e80749ff3c036ef5b9955646a8abdbe /src/port/hooks/impl/EventSystem.cpp | |
| parent | 072bc49d38d857c3dd6df153dd00c2e674557b6a (diff) | |
Implemented namespace system, added ItemDropEvent and cleaned up a little bit
Diffstat (limited to 'src/port/hooks/impl/EventSystem.cpp')
| -rw-r--r-- | src/port/hooks/impl/EventSystem.cpp | 25 |
1 files changed, 16 insertions, 9 deletions
diff --git a/src/port/hooks/impl/EventSystem.cpp b/src/port/hooks/impl/EventSystem.cpp index f2ce527c..71eaffb5 100644 --- a/src/port/hooks/impl/EventSystem.cpp +++ b/src/port/hooks/impl/EventSystem.cpp @@ -1,35 +1,42 @@ #include "EventSystem.h" #include <stdexcept> +#include <algorithm> EventSystem* EventSystem::Instance = new EventSystem(); ListenerID EventSystem::RegisterListener(EventID id, EventCallback callback, EventPriority priority) { - if(std::find_if(this->mEventListeners[id].begin(), this->mEventListeners[id].end(), [callback](EventListener listener) { + auto& listeners = this->mEventListeners[(uint8_t)((id >> 16) & 0xFF)][(uint16_t)(id & 0xFFFF)]; + + if(std::find_if(listeners.begin(), listeners.end(), [callback](EventListener listener) { return listener.function == callback; - }) != this->mEventListeners[id].end()) { + }) != listeners.end()) { throw std::runtime_error("Listener already registered"); } - this->mEventListeners[id].push_back({ priority, callback }); + listeners.push_back({ priority, callback }); // Sort by priority - std::sort(this->mEventListeners[id].begin(), this->mEventListeners[id].end(), [](EventListener a, EventListener b) { + std::sort(listeners.begin(), listeners.end(), [](EventListener a, EventListener b) { return a.priority < b.priority; }); - return this->mEventListeners[id].size() - 1; + return listeners.size() - 1; } -void EventSystem::UnregisterListener(EventID ev, ListenerID id) { - this->mEventListeners[ev].erase(this->mEventListeners[ev].begin() + id); +void EventSystem::UnregisterListener(EventID id, ListenerID listenerId) { + auto& listeners = this->mEventListeners[(uint8_t)((id >> 16) & 0xFF)][(uint16_t)(id & 0xFFFF)]; + + listeners.erase(listeners.begin() + listenerId); } void EventSystem::CallEvent(EventID id, IEvent* event) { - if (this->mEventListeners[id].empty()) { + auto& listeners = this->mEventListeners[(uint8_t)((id >> 16) & 0xFF)][(uint16_t)(id & 0xFFFF)]; + + if (listeners.empty()) { return; } - for (auto& listener : this->mEventListeners[id]) { + for (auto& listener : listeners) { listener.function(event); } } |
