@@ -9,17 +9,22 @@ EventID EventSystem::RegisterEvent() {
99}
1010
1111ListenerID 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