]> git.tdb.fi Git - libs/game.git/commitdiff
Adjust component ticking
authorMikko Rasa <tdb@tdb.fi>
Sat, 22 Oct 2022 15:44:01 +0000 (18:44 +0300)
committerMikko Rasa <tdb@tdb.fi>
Sat, 22 Oct 2022 15:44:01 +0000 (18:44 +0300)
Running pre_tick() for all systems before running tick() for any of
them is too inflexible.  Also remove the virtual tick() function from
Component and use a concept for BasicSystem instead.

source/game/basicsystem.h
source/game/component.h
source/game/stage.cpp
source/game/system.h

index 12c272585d47cabaa125ec47928254ff0f00b1ff..aa5d9426ea1053d2e4532a91b6b407d5c166c10b 100644 (file)
@@ -1,52 +1,28 @@
 #ifndef MSP_GAME_BASICSYSTEM_
 #define MSP_GAME_BASICSYSTEM_
 
-#include <msp/time/timedelta.h>
-#include "pool.h"
 #include "stage.h"
 #include "system.h"
 
 namespace Msp::Game {
 
-template<typename T>
-concept HasPreTick = requires(T x) { x.pre_tick(); };
-
 template<typename T>
 concept HasTick = requires(T x) { x.tick(Time::TimeDelta()); };
 
 template<typename T>
-concept HasPostTick = requires(T x) { x.post_tick(); };
-
-template<typename T>
+       requires std::is_base_of_v<Component, T> && HasTick<T>
 class BasicSystem: public System
 {
 public:
        BasicSystem(Stage &s): System(s) { }
 
-       void pre_tick() override;
        void tick(Time::TimeDelta) override;
-       void post_tick() override;
 };
 
-template<typename T>
-void BasicSystem<T>::pre_tick()
-{
-       if constexpr(HasPreTick<T>)
-               stage.iterate_objects<T>([](T &obj){ obj.pre_tick(); });
-}
-
 template<typename T>
 void BasicSystem<T>::tick(Time::TimeDelta dt)
 {
-       if constexpr(HasTick<T>)
-               stage.iterate_objects<T>([dt](T &obj){ obj.tick(dt); });
-}
-
-template<typename T>
-void BasicSystem<T>::post_tick()
-{
-       if constexpr(HasPostTick<T>)
-               stage.iterate_objects<T>([](T &obj){ obj.post_tick(); });
+       stage.iterate_objects<T>([dt](T &obj){ obj.tick(dt); });
 }
 
 } // namespace Msp::Game
index 6914c15282383a004b09117875e191dd56f6a6cd..6b49dd19e8c6e3f64da05ceb550616d1e2c31624 100644 (file)
@@ -18,10 +18,6 @@ public:
        virtual ~Component() = default;
 
        Handle<Entity> get_entity() const { return entity; }
-
-       virtual void pre_tick() { }
-       virtual void tick(Time::TimeDelta) { }
-       virtual void post_tick() { }
 };
 
 } // namespace Msp::Game
index 73eb9a55f7299542cb08cf8c95b44083d7ee8fc2..8d781f28961fc77da688b640c9c579a44c9b4a28 100644 (file)
@@ -15,12 +15,8 @@ Stage::~Stage()
 
 void Stage::tick(Time::TimeDelta dt)
 {
-       for(const auto &s: systems)
-               s->pre_tick();
        for(const auto &s: systems)
                s->tick(dt);
-       for(const auto &s: systems)
-               s->post_tick();
 }
 
 } // namespace Msp::Game
index 88ba291fb50bcb05e9881014f5e6096f34939daa..2d73928ee7c177c2ccccfec51823a3adc975a58d 100644 (file)
@@ -16,9 +16,7 @@ protected:
 public:
        virtual ~System() = default;
 
-       virtual void pre_tick() = 0;
        virtual void tick(Time::TimeDelta) = 0;
-       virtual void post_tick() = 0;
 };
 
 } // namespace Msp::Game