1#include <zen/events/ZEN_Events.h>
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)) {
13 void EventsDispatcher::registerListener(
EventListener *newListener) {
18 auto start = m_listeners.begin();
19 auto end = m_listeners.end();
21 const int p = newListener->getPriority();
23 auto duplicate = std::find_if(start, end, [newListener](Listener &l) {
24 return newListener == l.listener_ptr;
26 if (duplicate != end) {
30 auto position = std::find_if(start, end, [p](
const Listener &l) {
31 return p > l.listener_ptr->getPriority();
33 m_listeners.insert(position, Listener(p, newListener));
36 void EventsDispatcher::unregisterListener(
EventListener *targetListener) {
37 if (!targetListener) {
41 auto start = m_listeners.begin();
42 auto end = m_listeners.end();
44 auto it = std::find_if(start, end, [targetListener](Listener &l) {
45 return targetListener == l.listener_ptr;
48 m_listeners.erase(it);