Zen 0.3.0
Loading...
Searching...
No Matches
ZEN_Events.cpp
1#include <zen/events/ZEN_Events.h>
2
3namespace Zen {
4 void EventsDispatcher::dispatch(const ZenEvent &event) {
5 for (const auto &l : m_listeners) {
6 EventListener *eventListener = l.listener_ptr;
7 if (eventListener && eventListener->onEvent(event)) { // if not null and if onEvent == true
8 break;
9 }
10 }
11 }
12
13 void EventsDispatcher::registerListener(EventListener *newListener) {
14 if (!newListener) {
15 return;
16 }
17
18 auto start = m_listeners.begin();
19 auto end = m_listeners.end();
20
21 const int p = newListener->getPriority();
22
23 auto duplicate = std::find_if(start, end, [newListener](Listener &l) {
24 return newListener == l.listener_ptr;
25 });
26 if (duplicate != end) {
27 return;
28 }
29
30 auto position = std::find_if(start, end, [p](const Listener &l) {
31 return p > l.listener_ptr->getPriority();
32 });
33 m_listeners.insert(position, Listener(p, newListener));
34 }
35
36 void EventsDispatcher::unregisterListener(EventListener *targetListener) {
37 if (!targetListener) {
38 return;
39 }
40
41 auto start = m_listeners.begin();
42 auto end = m_listeners.end();
43
44 auto it = std::find_if(start, end, [targetListener](Listener &l) {
45 return targetListener == l.listener_ptr;
46 });
47 if (it != end) {
48 m_listeners.erase(it);
49 }
50 }
51
52}; // namespace Zen