Skip to content

Commit cc77dfb

Browse files
committed
eventsystem again
1 parent f4bf701 commit cc77dfb

1 file changed

Lines changed: 7 additions & 0 deletions

File tree

src/port/hooks/impl/EventSystem.cpp

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,17 +9,22 @@ EventID EventSystem::RegisterEvent() {
99
}
1010

1111
ListenerID EventSystem::RegisterListener(EventID id, EventCallback callback, EventPriority priority) {
12+
if (id == -1) {
1213
throw std::runtime_error("Trying to register listener for unregistered event");
1314
}
1415

1516
auto& listeners = this->mEventListeners[id];
1617

18+
if (std::find_if(listeners.begin(), listeners.end(),
19+
[callback](EventListener listener) { return listener.function == callback; }) != listeners.end()) {
1720
throw std::runtime_error("Listener already registered");
1821
}
1922

2023
listeners.push_back({ priority, callback });
2124

2225
// Sort by priority
26+
std::sort(listeners.begin(), listeners.end(),
27+
[](EventListener a, EventListener b) { return a.priority < b.priority; });
2328

2429
return listeners.size() - 1;
2530
}
@@ -42,9 +47,11 @@ extern "C" EventID EventSystem_RegisterEvent() {
4247
return EventSystem::Instance->RegisterEvent();
4348
}
4449

50+
extern "C" ListenerID EventSystem_RegisterListener(EventID id, EventCallback callback, EventPriority priority) {
4551
return EventSystem::Instance->RegisterListener(id, callback, priority);
4652
}
4753

54+
extern "C" void EventSystem_UnregisterListener(EventID ev, ListenerID id) {
4855
EventSystem::Instance->UnregisterListener(ev, id);
4956
}
5057

0 commit comments

Comments
 (0)