diff options
Diffstat (limited to 'src/crepe/system/ScriptSystem.cpp')
| -rw-r--r-- | src/crepe/system/ScriptSystem.cpp | 46 | 
1 files changed, 46 insertions, 0 deletions
diff --git a/src/crepe/system/ScriptSystem.cpp b/src/crepe/system/ScriptSystem.cpp new file mode 100644 index 0000000..f1fae4d --- /dev/null +++ b/src/crepe/system/ScriptSystem.cpp @@ -0,0 +1,46 @@ +#include <forward_list> +#include <functional> +#include <vector> + +#include "../ComponentManager.h" +#include "../api/BehaviorScript.h" +#include "../api/Script.h" +#include "../util/log.h" + +#include "ScriptSystem.h" + +using namespace std; +using namespace crepe; + +ScriptSystem::ScriptSystem() { dbg_trace(); } +ScriptSystem::~ScriptSystem() { dbg_trace(); } + +ScriptSystem & ScriptSystem::get_instance() { +	static ScriptSystem instance; +	return instance; +} + +void ScriptSystem::update() { +	using namespace std; +	dbg_trace(); + +	forward_list<Script *> scripts = this->get_scripts(); +	for (Script * script : scripts) script->update(); +} + +forward_list<Script *> ScriptSystem::get_scripts() { +	forward_list<Script *> scripts = {}; +	ComponentManager & mgr = ComponentManager::get_instance(); +	vector<reference_wrapper<BehaviorScript>> behavior_scripts +		= mgr.get_components_by_type<BehaviorScript>(); + +	for (auto behavior_script_ref : behavior_scripts) { +		BehaviorScript & behavior_script = behavior_script_ref.get(); +		if (!behavior_script.active) continue; +		Script * script = behavior_script.script.get(); +		if (script == nullptr) continue; +		scripts.push_front(script); +	} + +	return scripts; +}  |