diff options
Diffstat (limited to 'src/crepe/api')
| -rw-r--r-- | src/crepe/api/BehaviorScript.cpp | 4 | ||||
| -rw-r--r-- | src/crepe/api/BehaviorScript.h | 1 | ||||
| -rw-r--r-- | src/crepe/api/GameObject.cpp | 10 | ||||
| -rw-r--r-- | src/crepe/api/GameObject.h | 8 | ||||
| -rw-r--r-- | src/crepe/api/GameObject.hpp | 2 | ||||
| -rw-r--r-- | src/crepe/api/LoopManager.cpp | 62 | ||||
| -rw-r--r-- | src/crepe/api/LoopManager.h | 32 | ||||
| -rw-r--r-- | src/crepe/api/LoopManager.hpp | 8 | 
8 files changed, 43 insertions, 84 deletions
| diff --git a/src/crepe/api/BehaviorScript.cpp b/src/crepe/api/BehaviorScript.cpp index d22afdf..af7572c 100644 --- a/src/crepe/api/BehaviorScript.cpp +++ b/src/crepe/api/BehaviorScript.cpp @@ -10,6 +10,6 @@ BehaviorScript::BehaviorScript(game_object_id_t id, Mediator & mediator)  template <>  BehaviorScript & GameObject::add_component<BehaviorScript>() { -	ComponentManager & mgr = this->component_manager; -	return mgr.add_component<BehaviorScript>(this->id, mgr.mediator); +	ComponentManager & mgr = this->mediator.component_manager; +	return mgr.add_component<BehaviorScript>(this->id, this->mediator);  } diff --git a/src/crepe/api/BehaviorScript.h b/src/crepe/api/BehaviorScript.h index 3909b96..02d588a 100644 --- a/src/crepe/api/BehaviorScript.h +++ b/src/crepe/api/BehaviorScript.h @@ -9,6 +9,7 @@  namespace crepe {  class ScriptSystem; +class Mediator;  class ComponentManager;  class Script; diff --git a/src/crepe/api/GameObject.cpp b/src/crepe/api/GameObject.cpp index 9ef4682..ea9c425 100644 --- a/src/crepe/api/GameObject.cpp +++ b/src/crepe/api/GameObject.cpp @@ -7,20 +7,20 @@  using namespace crepe;  using namespace std; -GameObject::GameObject(ComponentManager & component_manager, game_object_id_t id, +GameObject::GameObject(Mediator & mediator, game_object_id_t id,  					   const std::string & name, const std::string & tag,  					   const vec2 & position, double rotation, double scale)  	: id(id), -	  component_manager(component_manager) { +	  mediator(mediator) {  	// Add Transform and Metadata components -	ComponentManager & mgr = this->component_manager; +	ComponentManager & mgr = this->mediator.component_manager;  	mgr.add_component<Transform>(this->id, position, rotation, scale);  	mgr.add_component<Metadata>(this->id, name, tag);  }  void GameObject::set_parent(const GameObject & parent) { -	ComponentManager & mgr = this->component_manager; +	ComponentManager & mgr = this->mediator.component_manager;  	// Set parent on own Metadata component  	RefVector<Metadata> this_metadata = mgr.get_components_by_id<Metadata>(this->id); @@ -32,7 +32,7 @@ void GameObject::set_parent(const GameObject & parent) {  }  void GameObject::set_persistent(bool persistent) { -	ComponentManager & mgr = this->component_manager; +	ComponentManager & mgr = this->mediator.component_manager;  	mgr.set_persistent(this->id, persistent);  } diff --git a/src/crepe/api/GameObject.h b/src/crepe/api/GameObject.h index ff80f49..a311c21 100644 --- a/src/crepe/api/GameObject.h +++ b/src/crepe/api/GameObject.h @@ -6,7 +6,7 @@  namespace crepe { -class ComponentManager; +class Mediator;  /**   * \brief Represents a GameObject @@ -20,7 +20,7 @@ private:  	 * This constructor creates a new GameObject. It creates a new Transform and Metadata  	 * component and adds them to the ComponentManager.  	 * -	 * \param component_manager Reference to component_manager +	 * \param mediator Reference to mediator  	 * \param id The id of the GameObject  	 * \param name The name of the GameObject  	 * \param tag The tag of the GameObject @@ -28,7 +28,7 @@ private:  	 * \param rotation The rotation of the GameObject  	 * \param scale The scale of the GameObject  	 */ -	GameObject(ComponentManager & component_manager, game_object_id_t id, +	GameObject(Mediator & mediator, game_object_id_t id,  			   const std::string & name, const std::string & tag, const vec2 & position,  			   double rotation, double scale);  	//! ComponentManager instances GameObject @@ -73,7 +73,7 @@ public:  	const game_object_id_t id;  protected: -	ComponentManager & component_manager; +	Mediator & mediator;  };  } // namespace crepe diff --git a/src/crepe/api/GameObject.hpp b/src/crepe/api/GameObject.hpp index a6b45b0..69f7d73 100644 --- a/src/crepe/api/GameObject.hpp +++ b/src/crepe/api/GameObject.hpp @@ -8,7 +8,7 @@ namespace crepe {  template <typename T, typename... Args>  T & GameObject::add_component(Args &&... args) { -	ComponentManager & mgr = this->component_manager; +	ComponentManager & mgr = this->mediator.component_manager;  	return mgr.add_component<T>(this->id, std::forward<Args>(args)...);  } diff --git a/src/crepe/api/LoopManager.cpp b/src/crepe/api/LoopManager.cpp index 1f0ba72..3511bca 100644 --- a/src/crepe/api/LoopManager.cpp +++ b/src/crepe/api/LoopManager.cpp @@ -7,7 +7,7 @@  #include "../system/PhysicsSystem.h"  #include "../system/RenderSystem.h"  #include "../system/ScriptSystem.h" -#include "manager/EventManager.h" +#include "../system/EventSystem.h"  #include "LoopManager.h" @@ -15,34 +15,43 @@ using namespace crepe;  using namespace std;  LoopManager::LoopManager() { -	this->load_system<AnimatorSystem>(); +	this->load_system<ScriptSystem>(); +	this->load_system<AISystem>(); +	this->load_system<PhysicsSystem>();  	this->load_system<CollisionSystem>(); +	this->load_system<AnimatorSystem>();  	this->load_system<ParticleSystem>(); -	this->load_system<PhysicsSystem>();  	this->load_system<RenderSystem>(); -	this->load_system<ScriptSystem>();  	this->load_system<InputSystem>(); +	this->load_system<EventSystem>();  	this->load_system<AudioSystem>(); -	this->load_system<AISystem>();  } -void LoopManager::process_input() { this->get_system<InputSystem>().update(); } -  void LoopManager::start() {  	this->setup();  	this->loop();  } -void LoopManager::set_running(bool running) { this->game_running = running; }  void LoopManager::fixed_update() { -	// TODO: retrieve EventManager from direct member after singleton refactor -	EventManager & ev = this->mediator.event_manager; -	ev.dispatch_events(); -	this->get_system<ScriptSystem>().update(); -	this->get_system<AISystem>().update(); -	this->get_system<PhysicsSystem>().update(); -	this->get_system<CollisionSystem>().update(); -	this->get_system<AudioSystem>().update(); +	for (auto & [type, system] : this->systems) { +		if (!system->active) continue; +		system->fixed_update(); +	} +} + +void LoopManager::frame_update() { +	for (auto & [type, system] : this->systems) { +		if (!system->active) continue; +		system->frame_update(); +	} +} + +void LoopManager::setup() { +	LoopTimer & timer = this->loop_timer; +	this->game_running = true; +	this->scene_manager.load_next_scene(); +	timer.start(); +	timer.set_fps(200);  }  void LoopManager::loop() { @@ -53,31 +62,12 @@ void LoopManager::loop() {  		timer.update();  		while (timer.get_lag() >= timer.get_fixed_delta_time()) { -			this->process_input();  			this->fixed_update();  			timer.advance_fixed_update();  		} -		this->update(); -		this->render(); - +		this->frame_update();  		timer.enforce_frame_rate();  	}  } -void LoopManager::setup() { -	LoopTimer & timer = this->loop_timer; -	this->game_running = true; -	this->scene_manager.load_next_scene(); -	timer.start(); -	timer.set_fps(200); -} - -void LoopManager::render() { -	if (!this->game_running) return; - -	this->get_system<AnimatorSystem>().update(); -	this->get_system<RenderSystem>().update(); -} - -void LoopManager::update() {} diff --git a/src/crepe/api/LoopManager.h b/src/crepe/api/LoopManager.h index 1bafa56..28aa423 100644 --- a/src/crepe/api/LoopManager.h +++ b/src/crepe/api/LoopManager.h @@ -1,7 +1,5 @@  #pragma once -#include <memory> -  #include "../facade/SDLContext.h"  #include "../manager/ComponentManager.h"  #include "../manager/ResourceManager.h" @@ -47,25 +45,11 @@ private:  	void loop();  	/** -	 * \brief Function for handling input-related system calls. -	 * -	 * Processes user inputs from keyboard and mouse. -	 */ -	void process_input(); - -	/**  	 * \brief Per-frame update.  	 *  	 * Updates the game state based on the elapsed time since the last frame.  	 */ -	void update(); - -	/** -	 * \brief Late update which is called after update(). -	 * -	 * This function can be used for final adjustments before rendering. -	 */ -	void late_update(); +	void frame_update();  	/**  	 * \brief Fixed update executed at a fixed rate. @@ -74,20 +58,6 @@ private:  	 */  	void fixed_update(); -	/** -	 * \brief Set game running variable -	 * -	 * \param running running (false = game shutdown, true = game running) -	 */ -	void set_running(bool running); - -	/** -	 * \brief Function for executing render-related systems. -	 * -	 * Renders the current state of the game to the screen. -	 */ -	void render(); -  	bool game_running = false;  private: diff --git a/src/crepe/api/LoopManager.hpp b/src/crepe/api/LoopManager.hpp index 266758a..627b281 100644 --- a/src/crepe/api/LoopManager.hpp +++ b/src/crepe/api/LoopManager.hpp @@ -1,11 +1,10 @@  #pragma once +#include <memory>  #include <cassert>  #include <format> -#include <memory>  #include "../system/System.h" -  #include "LoopManager.h"  namespace crepe { @@ -18,8 +17,7 @@ void LoopManager::add_scene() {  template <class T>  T & LoopManager::get_system() {  	using namespace std; -	static_assert(is_base_of<System, T>::value, -				  "get_system must recieve a derivative class of System"); +	static_assert(is_base_of<System, T>::value, "get_system must recieve a derivative class of System");  	const type_info & type = typeid(T);  	if (!this->systems.contains(type)) @@ -36,7 +34,7 @@ template <class T>  void LoopManager::load_system() {  	using namespace std;  	static_assert(is_base_of<System, T>::value, -				  "load_system must recieve a derivative class of System"); +			"load_system must recieve a derivative class of System");  	const type_info & type = typeid(T);  	if (this->systems.contains(type)) |