--- /dev/null
+#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