]> git.tdb.fi Git - libs/game.git/blob - source/gameview/presenter.cpp
Add a view sub-library, including a Camera component
[libs/game.git] / source / gameview / presenter.cpp
1 #include "presenter.h"
2 #include <functional>
3 #include <msp/game/events.h>
4 #include <msp/game/stage.h>
5 #include "renderer.h"
6
7 using namespace std;
8
9 namespace Msp::GameView {
10
11 Presenter::Presenter(Game::Director &d, GL::View &v):
12         director(d),
13         gl_view(v),
14         resources(director.get_resources()),
15         event_observer(director.get_event_bus())
16 {
17         event_observer.observe<Game::Events::StageActivated>([this](auto &e){ stage_activated(e); });
18
19         if(Game::Stage *active_stage = director.get_active_stage())
20                 stage_activated({ *active_stage });
21 }
22
23 Presenter::~Presenter()
24 {
25         for(Renderer *r: renderers)
26                 r->get_stage().remove_system(*r);
27 }
28
29 void Presenter::stage_activated(const Game::Events::StageActivated &event)
30 {
31         if(!event.stage.get_system<Renderer>())
32                 renderers.push_back(&event.stage.add_system<Renderer>(ref(gl_view)));
33 }
34
35 } // namespace Msp::GameView