X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fgame%2Fsystem.h;h=4d39e301762d2981ce629c8ce51676a1370fe810;hb=12c863fc1bc5456a4b3aceacc88904d76bd1d8bb;hp=8c9c8b1316428258c2c4e3f84858386a75f73a20;hpb=423b49f2857f8e1597b652bfd41dbf3ae45f7ec5;p=libs%2Fgame.git diff --git a/source/game/system.h b/source/game/system.h index 8c9c8b1..4d39e30 100644 --- a/source/game/system.h +++ b/source/game/system.h @@ -5,12 +5,13 @@ #include #include "accessguard.h" #include "component.h" +#include "mspgame_api.h" #include "reflection.h" #include "stage.h" namespace Msp::Game { -class System +class MSPGAME_API System { public: enum DependencyFlags @@ -27,8 +28,11 @@ public: ORDER_MASK = 24 }; - struct Dependency + class Dependency { + friend class System; + + private: DependencyFlags flags = NO_DEPENDENCY; const Reflection::ClassBase &type; void (*prepare)(Stage &) = nullptr; @@ -36,7 +40,11 @@ public: void (*unblock)(DependencyFlags) = nullptr; void (*block)(DependencyFlags) = nullptr; + public: Dependency(const Reflection::ClassBase &t): type(t) { } + + DependencyFlags get_flags() const { return flags; } + const Reflection::ClassBase &get_type() const { return type; } }; class Activator: public NonCopyable @@ -67,6 +75,8 @@ protected: void declare_dependency(DependencyFlags); public: + const std::vector &get_dependencies() const { return dependencies; } + void begin_tick(); virtual void tick(Time::TimeDelta) = 0; void end_tick();