diff options
Diffstat (limited to 'src/crepe/system')
-rw-r--r-- | src/crepe/system/CMakeLists.txt | 19 | ||||
-rw-r--r-- | src/crepe/system/ScriptSystem.cpp | 23 | ||||
-rw-r--r-- | src/crepe/system/ScriptSystem.h | 5 | ||||
-rw-r--r-- | src/crepe/system/System.cpp | 6 | ||||
-rw-r--r-- | src/crepe/system/System.h | 7 |
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 |