X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fgame%2Fstage.cpp;h=83176104348538a148d667c9126fff11107e7a8b;hb=c7177adc21993307482b2c18dc4db6a03361586d;hp=0eb4238fcff375709404b00e52061730e0694cae;hpb=38ffef0320a70909f3e13e9681e4720352e440aa;p=libs%2Fgame.git diff --git a/source/game/stage.cpp b/source/game/stage.cpp index 0eb4238..8317610 100644 --- a/source/game/stage.cpp +++ b/source/game/stage.cpp @@ -1,14 +1,24 @@ #include "stage.h" +#include "camera.h" #include "root.h" #include "system.h" +using namespace std; + namespace Msp::Game { Stage::Stage(DataFile::Collection &r): resources(r), event_source(event_bus), + event_observer(event_bus), root(std::make_unique(*this)) -{ } +{ + event_observer.observe([this](auto &e){ + if(!active_camera) + if(Handle camera = dynamic_handle_cast(e.component)) + set_active_camera(camera); + }); +} // Hide unique_ptr destructors from the header Stage::~Stage() @@ -19,10 +29,18 @@ void Stage::remove_system(System &s) erase_if(systems, [&s](auto &p){ return p.get()==&s; }); } +void Stage::set_active_camera(Handle c) +{ + active_camera = c; + event_source.emit(active_camera); +} + void Stage::tick(Time::TimeDelta dt) { for(const auto &s: systems) s->tick(dt); + for(const auto &s: systems) + s->deferred_tick(); } } // namespace Msp::Game