TheAtlasEngine
 
Loading...
Searching...
No Matches
event_listener.hpp
1#pragma once
2#include <functional>
3#include <any>
4#include <unordered_map>
5#include <deque>
6
7namespace atlas::event {
8
15 template<typename UEvent>
16 class listener {
17 using event = std::function<void(UEvent&)>;
18
19 public:
20 listener() = default;
21
22 template<typename UObject, typename UCallback>
23 void subscribe(UObject* p_instance, const UCallback& p_callback) {
24 m_event_handlers.push_back(
25 [p_instance, p_callback](UEvent& p_event) {
26 (p_instance->*p_callback)(p_event);
27 });
28 }
29
30 // Notify all subscribers to this particular event listener
31 void notify_all(UEvent& p_event) {
32 for (const auto& callback : m_event_handlers) {
33 callback(p_event);
34 }
35 }
36
37 private:
38 std::deque<event> m_event_handlers;
39 };
40};
Generic event listener of event type UEvent.
Definition event_listener.hpp:16