aboutsummaryrefslogtreecommitdiff
path: root/src/crepe/api
diff options
context:
space:
mode:
Diffstat (limited to 'src/crepe/api')
-rw-r--r--src/crepe/api/BehaviorScript.cpp4
-rw-r--r--src/crepe/api/BehaviorScript.h1
-rw-r--r--src/crepe/api/GameObject.cpp10
-rw-r--r--src/crepe/api/GameObject.h8
-rw-r--r--src/crepe/api/GameObject.hpp2
-rw-r--r--src/crepe/api/LoopManager.cpp62
-rw-r--r--src/crepe/api/LoopManager.h32
-rw-r--r--src/crepe/api/LoopManager.hpp8
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))