]> git.tdb.fi Git - libs/game.git/blob - source/game/transformpropagator.h
Decorate things which constitute the public API of the library
[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 "mspgame_api.h"
7 #include "system.h"
8
9 namespace Msp::Game {
10
11 class Entity;
12 class Transform;
13
14 class MSPGAME_API TransformPropagator: public System
15 {
16 private:
17         struct ParentedTransform
18         {
19                 Handle<Transform> transform;
20                 Handle<Transform> parent;
21         };
22
23         EventObserver observer;
24         std::vector<ParentedTransform> transforms;
25         bool transforms_dirty = true;
26
27 public:
28         TransformPropagator(Stage &);
29
30         void tick(Time::TimeDelta) override;
31
32 private:
33         void rebuild_transform_order();
34         void rebuild_transform_order(Handle<Entity>, Handle<Transform>);
35 };
36
37 } // namespace Msp::Game
38
39 #endif