X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fgame%2Fstage.cpp;h=5663a71fadf8b36e1db21267724cf3d27e9530c2;hb=f377d216dfc44e36da3697557f38dfedcbec45d1;hp=1c56c7e8a159abe3e41f32bb3b4b629eb4ffb533;hpb=f298027c2042b63cec903c98dfc97e792a4f923f;p=libs%2Fgame.git diff --git a/source/game/stage.cpp b/source/game/stage.cpp index 1c56c7e..5663a71 100644 --- a/source/game/stage.cpp +++ b/source/game/stage.cpp @@ -1,4 +1,5 @@ #include "stage.h" +#include "accessguard.h" #include "camera.h" #include "root.h" #include "system.h" @@ -7,7 +8,8 @@ using namespace std; namespace Msp::Game { -Stage::Stage(DataFile::Collection &r): +Stage::Stage(Reflection::Reflector &f, DataFile::Collection &r): + reflector(f), resources(r), event_source(event_bus), event_observer(event_bus), @@ -35,10 +37,34 @@ void Stage::set_active_camera(Handle c) event_source.emit(active_camera); } +void Stage::synthesize_initial_events(EventObserver &target_observer) +{ + synthesize_initial_events(Handle::from_object(root.get()), target_observer); + if(active_camera) + event_source.emit_to(target_observer, active_camera); +} + +void Stage::synthesize_initial_events(Handle entity, EventObserver &target_observer) +{ + for(Handle c: entity->get_components()) + event_source.emit_to(target_observer, c); + for(Handle e: entity->get_children()) + synthesize_initial_events(e, target_observer); + event_source.emit_to(target_observer, entity); +} + void Stage::tick(Time::TimeDelta dt) { + { +#ifdef DEBUG + AccessGuard::BlockForScope _block;; +#endif + for(const auto &s: systems) + s->tick(dt); + } + for(const auto &s: systems) - s->tick(dt); + s->deferred_tick(); } } // namespace Msp::Game