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;
};
}
}