]> git.tdb.fi Git - libs/game.git/blobdiff - source/game/eventobserver.cpp
Add an event bus for delivering events
[libs/game.git] / source / game / eventobserver.cpp
diff --git a/source/game/eventobserver.cpp b/source/game/eventobserver.cpp
new file mode 100644 (file)
index 0000000..440d299
--- /dev/null
@@ -0,0 +1,24 @@
+#include "eventobserver.h"
+#include "eventsource.h"
+
+namespace Msp::Game {
+
+EventObserver::EventObserver(EventBus &b):
+       bus(b)
+{ }
+
+EventObserver::~EventObserver()
+{
+       bus.remove_observer(*this);
+       for(EventSourceBase *s: observed_sources)
+               s->remove_observer(*this);
+}
+
+void EventObserver::remove_source(EventSourceBase &src)
+{
+       auto i = lower_bound(observed_sources, &src);
+       if(i!=observed_sources.end() && *i==&src)
+               observed_sources.erase(i);
+}
+
+} // namespace Msp::Game