]> git.tdb.fi Git - libs/game.git/blobdiff - source/game/eventsource.h
Add unit tests for the event bus
[libs/game.git] / source / game / eventsource.h
index 0856e08c452a7abd48b263db1bcb54092e4c75bb..1748f156f16588629b410dc030ac9326026ad487 100644 (file)
@@ -29,7 +29,7 @@ public:
 
        template<typename T>
        void add_observer(EventObserver &obs, std::function<void(const T &)> cb)
-       { static_cast<EventDispatcher<T> &>(*this).add_observer(obs, std::move(cb)); }
+       { static_cast<EventDispatcher<T> &>(*this).add_observer(&obs, std::move(cb)); }
 
        void remove_observer(EventObserver &obs) override
        { (static_cast<EventDispatcher<E> &>(*this).remove_observer(&obs), ...); }
@@ -41,6 +41,9 @@ private:
 public:
        template<typename T, typename... Args>
        void emit(Args &&...) const;
+
+       template<typename T, typename... Args>
+       void emit_to(EventObserver &, Args &&...) const;
 };
 
 
@@ -61,6 +64,15 @@ inline void EventSource<E...>::emit(Args &&... args) const
        bus.dispatch(event);
 }
 
+template<typename... E>
+template<typename T, typename... Args>
+inline void EventSource<E...>::emit_to(EventObserver &obs, Args &&... args) const
+{
+       T event(std::forward<Args>(args)...);
+       static_cast<const EventDispatcher<T> &>(*this).dispatch_to(obs, event);
+       bus.dispatch_to(obs, event);
+}
+
 } // namespace Msp::Game
 
 #endif