]> git.tdb.fi Git - libs/game.git/blobdiff - source/game/stage.cpp
Provide a way to request events for existing entities and components
[libs/game.git] / source / game / stage.cpp
index 83176104348538a148d667c9126fff11107e7a8b..81893e1e1ef8c27ca72db42e456c78462a999452 100644 (file)
@@ -35,6 +35,22 @@ void Stage::set_active_camera(Handle<Camera> c)
        event_source.emit<Events::CameraChanged>(active_camera);
 }
 
+void Stage::synthesize_initial_events(EventObserver &target_observer)
+{
+       synthesize_initial_events(Handle<Entity>::from_object(root.get()), target_observer);
+       if(active_camera)
+               event_source.emit_to<Events::CameraChanged>(target_observer, active_camera);
+}
+
+void Stage::synthesize_initial_events(Handle<Entity> entity, EventObserver &target_observer)
+{
+       for(Handle<Component> c: entity->get_components())
+               event_source.emit_to<Events::ComponentCreated>(target_observer, c);
+       for(Handle<Entity> e: entity->get_children())
+               synthesize_initial_events(e, target_observer);
+       event_source.emit_to<Events::EntityCreated>(target_observer, entity);
+}
+
 void Stage::tick(Time::TimeDelta dt)
 {
        for(const auto &s: systems)