VoxelEngine
 
Loading...
Searching...
No Matches
EventSource.h
1
2#pragma once
3
4#include <unordered_set>
5
6namespace engine {
7 class EventSite;
8
9 class EventSource {
10 public:
11 EventSource() = default;
12 virtual ~EventSource() = default;
13
14 void subscribe(EventSite* site);
15 void unsubscribe(EventSite* site);
16
17 template <typename TEventSite, typename TEvent>
18 void fireEvent(void (TEventSite::*fire)(TEvent* event), TEvent* event) {
19 for (EventSite* site : m_sources) {
20 TEventSite* appSite = dynamic_cast<TEventSite*>(
21 site
22 ); // TODO I dont like the dynamic cast and virtual inheritance of EventClass (right now only because of UI manager diamond inheritance)
23 if (appSite) {
24 (appSite->*fire)(event);
25 }
26 }
27 }
28
29 private:
30 std::unordered_set<EventSite*> m_sources;
31 };
32} // namespace engine
Definition EventSite.h:4
Definition EventSource.h:9