aboutsummaryrefslogtreecommitdiff
path: root/src/crepe/system
diff options
context:
space:
mode:
authorLoek Le Blansch <loek@pipeframe.xyz>2024-11-12 22:43:32 +0100
committerLoek Le Blansch <loek@pipeframe.xyz>2024-11-12 22:43:32 +0100
commit3e94ecb3dac5003a3d58210ed1a4d1f1cb2083d1 (patch)
tree67c3e1c122652ae09e58e7de49db668e252c4730 /src/crepe/system
parentf2509e89c02894ebd3ad992324eb300103621d26 (diff)
add script unit tests + major refactoring
Diffstat (limited to 'src/crepe/system')
-rw-r--r--src/crepe/system/CMakeLists.txt19
-rw-r--r--src/crepe/system/ScriptSystem.cpp23
-rw-r--r--src/crepe/system/ScriptSystem.h5
-rw-r--r--src/crepe/system/System.cpp6
-rw-r--r--src/crepe/system/System.h7
5 files changed, 41 insertions, 19 deletions
diff --git a/src/crepe/system/CMakeLists.txt b/src/crepe/system/CMakeLists.txt
index 4c18b87..9ee12f6 100644
--- a/src/crepe/system/CMakeLists.txt
+++ b/src/crepe/system/CMakeLists.txt
@@ -1,17 +1,18 @@
target_sources(crepe PUBLIC
- ParticleSystem.cpp
+ System.cpp
+ # ParticleSystem.cpp
ScriptSystem.cpp
- PhysicsSystem.cpp
- CollisionSystem.cpp
- RenderSystem.cpp
- AnimatorSystem.cpp
+ # PhysicsSystem.cpp
+ # CollisionSystem.cpp
+ # RenderSystem.cpp
+ # AnimatorSystem.cpp
)
target_sources(crepe PUBLIC FILE_SET HEADERS FILES
System.h
ScriptSystem.h
- PhysicsSystem.h
- CollisionSystem.h
- RenderSystem.h
- AnimatorSystem.h
+ # PhysicsSystem.h
+ # CollisionSystem.h
+ # RenderSystem.h
+ # AnimatorSystem.h
)
diff --git a/src/crepe/system/ScriptSystem.cpp b/src/crepe/system/ScriptSystem.cpp
index f2673e7..0a87fcc 100644
--- a/src/crepe/system/ScriptSystem.cpp
+++ b/src/crepe/system/ScriptSystem.cpp
@@ -13,16 +13,24 @@ using namespace std;
using namespace crepe;
void ScriptSystem::update() {
- using namespace std;
dbg_trace();
- forward_list<Script *> scripts = this->get_scripts();
- for (Script * script : scripts) script->update();
+ forward_list<reference_wrapper<Script>> scripts = this->get_scripts();
+
+ for (auto & script_ref : scripts) {
+ Script & script = script_ref.get();
+ BehaviorScript & component = *script.parent_ref;
+ if (!component.initialized) {
+ script.init();
+ component.initialized = true;
+ }
+ script.update();
+ }
}
-forward_list<Script *> ScriptSystem::get_scripts() {
- forward_list<Script *> scripts = {};
- ComponentManager & mgr = ComponentManager::get_instance();
+forward_list<reference_wrapper<Script>> ScriptSystem::get_scripts() {
+ forward_list<reference_wrapper<Script>> scripts = {};
+ ComponentManager & mgr = this->component_manager;
vector<reference_wrapper<BehaviorScript>> behavior_scripts
= mgr.get_components_by_type<BehaviorScript>();
@@ -31,8 +39,9 @@ forward_list<Script *> ScriptSystem::get_scripts() {
if (!behavior_script.active) continue;
Script * script = behavior_script.script.get();
if (script == nullptr) continue;
- scripts.push_front(script);
+ scripts.push_front(*script);
}
return scripts;
}
+
diff --git a/src/crepe/system/ScriptSystem.h b/src/crepe/system/ScriptSystem.h
index 4fa6141..b52e825 100644
--- a/src/crepe/system/ScriptSystem.h
+++ b/src/crepe/system/ScriptSystem.h
@@ -7,14 +7,15 @@
namespace crepe {
class Script;
+class BehaviorScript;
class ScriptSystem : public System {
public:
+ using System::System;
void update();
private:
- // TODO: to forward_list<reference_wrapper>
- std::forward_list<Script *> get_scripts();
+ std::forward_list<std::reference_wrapper<Script>> get_scripts();
};
} // namespace crepe
diff --git a/src/crepe/system/System.cpp b/src/crepe/system/System.cpp
new file mode 100644
index 0000000..296f1ed
--- /dev/null
+++ b/src/crepe/system/System.cpp
@@ -0,0 +1,6 @@
+#include "System.h"
+
+using namespace crepe;
+
+System::System(ComponentManager & mgr) : component_manager(mgr) {}
+
diff --git a/src/crepe/system/System.h b/src/crepe/system/System.h
index 3b81bef..7970e72 100644
--- a/src/crepe/system/System.h
+++ b/src/crepe/system/System.h
@@ -2,13 +2,18 @@
namespace crepe {
+class ComponentManager;
+
class System {
public:
virtual void update() = 0;
public:
- System() = default;
+ System(ComponentManager &);
virtual ~System() = default;
+
+protected:
+ ComponentManager & component_manager;
};
} // namespace crepe