]> git.tdb.fi Git - libs/game.git/blobdiff - source/gameview/presenter.cpp
Add a view sub-library, including a Camera component
[libs/game.git] / source / gameview / presenter.cpp
diff --git a/source/gameview/presenter.cpp b/source/gameview/presenter.cpp
new file mode 100644 (file)
index 0000000..c65e2a9
--- /dev/null
@@ -0,0 +1,35 @@
+#include "presenter.h"
+#include <functional>
+#include <msp/game/events.h>
+#include <msp/game/stage.h>
+#include "renderer.h"
+
+using namespace std;
+
+namespace Msp::GameView {
+
+Presenter::Presenter(Game::Director &d, GL::View &v):
+       director(d),
+       gl_view(v),
+       resources(director.get_resources()),
+       event_observer(director.get_event_bus())
+{
+       event_observer.observe<Game::Events::StageActivated>([this](auto &e){ stage_activated(e); });
+
+       if(Game::Stage *active_stage = director.get_active_stage())
+               stage_activated({ *active_stage });
+}
+
+Presenter::~Presenter()
+{
+       for(Renderer *r: renderers)
+               r->get_stage().remove_system(*r);
+}
+
+void Presenter::stage_activated(const Game::Events::StageActivated &event)
+{
+       if(!event.stage.get_system<Renderer>())
+               renderers.push_back(&event.stage.add_system<Renderer>(ref(gl_view)));
+}
+
+} // namespace Msp::GameView