1 #include "transformpropagator.h"
11 TransformPropagator::TransformPropagator(Stage &s):
13 observer(s.get_event_bus())
15 declare_dependency<Transform>(CHAINED_UPDATE);
17 observer.observe<Events::EntityCreated>([this](auto &){ transforms_dirty = true; });
18 observer.observe<Events::EntityDestroyed>([this](auto &){ transforms_dirty = true; });
21 void TransformPropagator::tick(Time::TimeDelta)
24 rebuild_transform_order();
26 for(const ParentedTransform &t: transforms)
27 t.transform->update_world_matrix(t.parent.get());
30 void TransformPropagator::rebuild_transform_order()
33 for(Handle<Entity> c: stage.get_root()->get_children())
34 rebuild_transform_order(c, nullptr);
37 void TransformPropagator::rebuild_transform_order(Handle<Entity> entity, Handle<Transform> parent_trans)
39 if(Handle<Transform> trans = entity->get_transform())
41 transforms.emplace_back(trans, parent_trans);
45 for(Handle<Entity> c: entity->get_children())
46 rebuild_transform_order(c, parent_trans);
49 } // namespace Msp::Game