X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fgame%2Feventsource.h;h=1748f156f16588629b410dc030ac9326026ad487;hb=316a4432767efbea70c1409edf5f546e61077c54;hp=5dacbeeed71603ec0418f3245a7fc82c39e449c5;hpb=6a93721ab67315e916f6c649b1f7bc5447d611a4;p=libs%2Fgame.git diff --git a/source/game/eventsource.h b/source/game/eventsource.h index 5dacbee..1748f15 100644 --- a/source/game/eventsource.h +++ b/source/game/eventsource.h @@ -29,7 +29,7 @@ public: template void add_observer(EventObserver &obs, std::function cb) - { static_cast &>(*this).add_observer(obs, std::move(cb)); } + { static_cast &>(*this).add_observer(&obs, std::move(cb)); } void remove_observer(EventObserver &obs) override { (static_cast &>(*this).remove_observer(&obs), ...); } @@ -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