]> git.tdb.fi Git - libs/game.git/blobdiff - source/game/eventsource.h
Provide a way to request events for existing entities and components
[libs/game.git] / source / game / eventsource.h
index 5dacbeeed71603ec0418f3245a7fc82c39e449c5..ccb830fb9fb3d4da7c91b265e6002285d9b1d937 100644 (file)
@@ -41,9 +41,20 @@ private:
 public:
        template<typename T, typename... Args>
        void emit(Args &&...) const;
+
+       template<typename T, typename... Args>
+       void emit_to(EventObserver &, Args &&...) const;
 };
 
 
+template<typename... E>
+template<typename T>
+inline void EventSource<E...>::cancel_observation()
+{
+       for(const auto &h: static_cast<EventDispatcher<T> &>(*this).handlers)
+               h.observer->remove_source(*this);
+}
+
 template<typename... E>
 template<typename T, typename... Args>
 inline void EventSource<E...>::emit(Args &&... args) const
@@ -54,11 +65,12 @@ inline void EventSource<E...>::emit(Args &&... args) const
 }
 
 template<typename... E>
-template<typename T>
-inline void EventSource<E...>::cancel_observation()
+template<typename T, typename... Args>
+inline void EventSource<E...>::emit_to(EventObserver &obs, Args &&... args) const
 {
-       for(const auto &h: static_cast<EventDispatcher<T> &>(*this).handlers)
-               h.observer->remove_source(*this);
+       T event(std::forward<Args>(args)...);
+       static_cast<const EventDispatcher<T> &>(*this).dispatch_to(obs, event);
+       bus.dispatch_to(obs, event);
 }
 
 } // namespace Msp::Game