summaryrefslogtreecommitdiff
path: root/src/port/hooks/impl/EventSystem.cpp
diff options
context:
space:
mode:
authorKiritoDv <kiritodev01@gmail.com>2024-12-28 15:07:59 -0600
committerKiritoDv <kiritodev01@gmail.com>2024-12-28 15:07:59 -0600
commit4419dfca91382efdeb57742f39de5c86ad5afa2d (patch)
tree3032a4137e80749ff3c036ef5b9955646a8abdbe /src/port/hooks/impl/EventSystem.cpp
parent072bc49d38d857c3dd6df153dd00c2e674557b6a (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.cpp25
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);
}
}