Program Listing for File systemManager.h

Return to documentation for file (PrismEngine/src/systemManager.h)

#pragma once
#include <vector>
#include <memory>
#include "system.h"


namespace prism {
    namespace scene {
        class SystemManager
        {
        public:
            SystemManager() = default;

            template<typename T, typename... Args>
            SystemId registerSystem(Args&&... args) {
                static_assert(std::is_base_of_v<ISystem, T>, "T must derive from ISystem");
                systems.push_back(std::make_unique<T>(std::forward<Args>(args)...));
                auto* sys = systems.back().get();
                if (sys->isEnabled()) activeSystems.push_back(sys);
                return systems.size() - 1;
            };

            void enableSystem(SystemId systemId);

            void disableSystem(SystemId systemId);

            void update();

        private:
            std::vector<std::unique_ptr<ISystem>> systems;

            std::vector<ISystem*> activeSystems;
        };
    }
}