17 template<
typename UEvent>
18 void create_listener() {
19 size_t id = type_id<UEvent>();
20 if (m_event_listeners.contains(
id)) {
23 m_event_listeners.emplace(
id, listener<UEvent>());
26 template<
typename UEvent,
typename UObject,
typename UCallback>
27 void subscribe(UObject* p_instance,
const UCallback& p_callback) {
28 size_t id = type_id<UEvent>();
30 if (!m_event_listeners.contains(
id)) {
31 create_listener<UEvent>();
35 std::any_cast<atlas::event::listener<UEvent>&>(
36 m_event_listeners.at(
id))
37 .subscribe(p_instance, p_callback);
42 template<
typename UEvent>
43 void publish(UEvent& p_event) {
44 size_t id = type_id<UEvent>();
46 if (!m_event_listeners.contains(
id)) {
50 std::any_cast<atlas::event::listener<UEvent>&>(
51 m_event_listeners.at(
id))
56 template<
typename UEvent>
58 return typeid(UEvent).hash_code();
62 std::unordered_map<size_t, std::any> m_event_listeners;