diff options
| author | max-001 <maxsmits21@kpnmail.nl> | 2024-12-20 12:24:59 +0100 | 
|---|---|---|
| committer | max-001 <maxsmits21@kpnmail.nl> | 2024-12-20 12:24:59 +0100 | 
| commit | b291d662f79af8de95ab40de29a09f87470d0095 (patch) | |
| tree | 0fc3318f985f888ca8dd70ac2005cb925dc6f58b /src | |
| parent | 2b64252d44aea2709f836eaed199bcc04e961179 (diff) | |
pull 3bda25f from demo
Diffstat (limited to 'src')
| -rw-r--r-- | src/crepe/manager/SystemManager.cpp | 15 | ||||
| -rw-r--r-- | src/crepe/manager/SystemManager.h | 8 | ||||
| -rw-r--r-- | src/crepe/manager/SystemManager.hpp | 1 | 
3 files changed, 17 insertions, 7 deletions
diff --git a/src/crepe/manager/SystemManager.cpp b/src/crepe/manager/SystemManager.cpp index 5ada30f..f029aa5 100644 --- a/src/crepe/manager/SystemManager.cpp +++ b/src/crepe/manager/SystemManager.cpp @@ -19,12 +19,12 @@ SystemManager::SystemManager(Mediator & mediator) : Manager(mediator) {  	this->load_system<InputSystem>();  	this->load_system<EventSystem>();  	this->load_system<ScriptSystem>(); +	this->load_system<ParticleSystem>();  	this->load_system<AISystem>();  	this->load_system<PhysicsSystem>();  	this->load_system<CollisionSystem>();  	this->load_system<AudioSystem>();  	this->load_system<AnimatorSystem>(); -	this->load_system<ParticleSystem>();  	this->load_system<RenderSystem>();  	this->load_system<ReplaySystem>(); @@ -32,16 +32,16 @@ SystemManager::SystemManager(Mediator & mediator) : Manager(mediator) {  }  void SystemManager::fixed_update() { -	for (auto & [type, system] : this->systems) { -		if (!system->active) continue; -		system->fixed_update(); +	for (System & system : this->system_order) { +		if (!system.active) continue; +		system.fixed_update();  	}  }  void SystemManager::frame_update() { -	for (auto & [type, system] : this->systems) { -		if (!system->active) continue; -		system->frame_update(); +	for (System & system : this->system_order) { +		if (!system.active) continue; +		system.frame_update();  	}  } @@ -64,3 +64,4 @@ void SystemManager::disable_all() {  		system->active = false;  	}  } + diff --git a/src/crepe/manager/SystemManager.h b/src/crepe/manager/SystemManager.h index 50acf77..b4a001c 100644 --- a/src/crepe/manager/SystemManager.h +++ b/src/crepe/manager/SystemManager.h @@ -1,6 +1,7 @@  #pragma once  #include <memory> +#include <vector>  #include <typeindex>  #include <unordered_map> @@ -43,6 +44,13 @@ private:  	 */  	std::unordered_map<std::type_index, std::unique_ptr<System>> systems;  	/** +	 * \brief Collection of System instances +	 * +	 * This map holds System instances indexed by the system's class typeid. It is filled in the +	 * constructor of \c SystemManager using SystemManager::load_system. +	 */ +	std::vector<std::reference_wrapper<System>> system_order; +	/**  	 * \brief Initialize a system  	 * \tparam T System type (must be derivative of \c System)  	 */ diff --git a/src/crepe/manager/SystemManager.hpp b/src/crepe/manager/SystemManager.hpp index 3d26e4c..8d06eb1 100644 --- a/src/crepe/manager/SystemManager.hpp +++ b/src/crepe/manager/SystemManager.hpp @@ -36,6 +36,7 @@ void SystemManager::load_system() {  		throw runtime_error(format("SystemManager: {} is already initialized", type.name()));  	System * system = new T(this->mediator);  	this->systems[type] = unique_ptr<System>(system); +	this->system_order.push_back(*this->systems[type]);  }  } // namespace crepe  |