1 #ifndef MSP_GAME_BASICSYSTEM_
2 #define MSP_GAME_BASICSYSTEM_
4 #include <msp/time/timedelta.h>
12 concept HasPreTick = requires(T x) { x.pre_tick(); };
15 concept HasTick = requires(T x) { x.tick(Time::TimeDelta()); };
18 concept HasPostTick = requires(T x) { x.post_tick(); };
21 class BasicSystem: public System
24 BasicSystem(Stage &s): System(s) { }
26 void pre_tick() override;
27 void tick(Time::TimeDelta) override;
28 void post_tick() override;
32 void BasicSystem<T>::pre_tick()
34 if constexpr(HasPreTick<T>)
35 stage.iterate_objects<T>([](T &obj){ obj.pre_tick(); });
39 void BasicSystem<T>::tick(Time::TimeDelta dt)
41 if constexpr(HasTick<T>)
42 stage.iterate_objects<T>([dt](T &obj){ obj.tick(dt); });
46 void BasicSystem<T>::post_tick()
48 if constexpr(HasPostTick<T>)
49 stage.iterate_objects<T>([](T &obj){ obj.post_tick(); });
52 } // namespace Msp::Game