X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fgameview%2Fpresenter.cpp;fp=source%2Fgameview%2Fpresenter.cpp;h=c65e2a919c4b64f6babc93a25b41360c365312fc;hb=f298027c2042b63cec903c98dfc97e792a4f923f;hp=0000000000000000000000000000000000000000;hpb=38ffef0320a70909f3e13e9681e4720352e440aa;p=libs%2Fgame.git diff --git a/source/gameview/presenter.cpp b/source/gameview/presenter.cpp new file mode 100644 index 0000000..c65e2a9 --- /dev/null +++ b/source/gameview/presenter.cpp @@ -0,0 +1,35 @@ +#include "presenter.h" +#include +#include +#include +#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([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()) + renderers.push_back(&event.stage.add_system(ref(gl_view))); +} + +} // namespace Msp::GameView