]> git.tdb.fi Git - libs/game.git/blob - source/game/transformpropagator.h
Add a transform component and propagation system
[libs/game.git] / source / game / transformpropagator.h
1 #ifndef MSP_GAME_TRANSFORMPROPAGATOR_H_
2 #define MSP_GAME_TRANSFORMPROPAGATOR_H_
3
4 #include "eventobserver.h"
5 #include "handle.h"
6 #include "system.h"
7
8 namespace Msp::Game {
9
10 class Entity;
11 class Transform;
12
13 class TransformPropagator: public System
14 {
15 private:
16         struct ParentedTransform
17         {
18                 Handle<Transform> transform;
19                 Handle<Transform> parent;
20         };
21
22         EventObserver observer;
23         std::vector<ParentedTransform> transforms;
24         bool transforms_dirty = true;
25
26 public:
27         TransformPropagator(Stage &);
28
29         void tick(Time::TimeDelta) override;
30
31 private:
32         void rebuild_transform_order();
33         void rebuild_transform_order(Handle<Entity>, Handle<Transform>);
34 };
35
36 } // namespace Msp::Game
37
38 #endif