X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fgame%2Feventsource.h;h=ccb830fb9fb3d4da7c91b265e6002285d9b1d937;hb=fce6e7846814e54de9d38000d2f5e2295ee2119e;hp=5dacbeeed71603ec0418f3245a7fc82c39e449c5;hpb=6a93721ab67315e916f6c649b1f7bc5447d611a4;p=libs%2Fgame.git diff --git a/source/game/eventsource.h b/source/game/eventsource.h index 5dacbee..ccb830f 100644 --- a/source/game/eventsource.h +++ b/source/game/eventsource.h @@ -41,9 +41,20 @@ private: public: template void emit(Args &&...) const; + + template + void emit_to(EventObserver &, Args &&...) const; }; +template +template +inline void EventSource::cancel_observation() +{ + for(const auto &h: static_cast &>(*this).handlers) + h.observer->remove_source(*this); +} + template template inline void EventSource::emit(Args &&... args) const @@ -54,11 +65,12 @@ inline void EventSource::emit(Args &&... args) const } template -template -inline void EventSource::cancel_observation() +template +inline void EventSource::emit_to(EventObserver &obs, Args &&... args) const { - for(const auto &h: static_cast &>(*this).handlers) - h.observer->remove_source(*this); + T event(std::forward(args)...); + static_cast &>(*this).dispatch_to(obs, event); + bus.dispatch_to(obs, event); } } // namespace Msp::Game