]> git.tdb.fi Git - libs/game.git/blobdiff - source/game/system.h
Decorate things which constitute the public API of the library
[libs/game.git] / source / game / system.h
index 8c9c8b1316428258c2c4e3f84858386a75f73a20..4d39e301762d2981ce629c8ce51676a1370fe810 100644 (file)
@@ -5,12 +5,13 @@
 #include <msp/time/timedelta.h>
 #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<Dependency> &get_dependencies() const { return dependencies; }
+
        void begin_tick();
        virtual void tick(Time::TimeDelta) = 0;
        void end_tick();