1 #include "transformpropagator.h"
11 TransformPropagator::TransformPropagator(Stage &s):
13 observer(s.get_event_bus())
15 observer.observe<Events::EntityCreated>([this](const Events::EntityCreated &){ transforms_dirty = true; });
16 observer.observe<Events::EntityDestroyed>([this](const Events::EntityDestroyed &){ transforms_dirty = true; });
19 void TransformPropagator::tick(Time::TimeDelta)
22 rebuild_transform_order();
24 for(const ParentedTransform &t: transforms)
25 t.transform->update_world_matrix(t.parent.get());
28 void TransformPropagator::rebuild_transform_order()
31 for(Handle<Entity> c: stage.get_root()->get_children())
32 rebuild_transform_order(c, nullptr);
35 void TransformPropagator::rebuild_transform_order(Handle<Entity> entity, Handle<Transform> parent_trans)
37 if(Handle<Transform> trans = entity->get_transform())
39 transforms.emplace_back(trans, parent_trans);
43 for(Handle<Entity> c: entity->get_children())
44 rebuild_transform_order(c, parent_trans);
47 } // namespace Msp::Game