diff options
author | Loek Le Blansch <loek@pipeframe.xyz> | 2024-12-13 17:42:34 +0100 |
---|---|---|
committer | Loek Le Blansch <loek@pipeframe.xyz> | 2024-12-13 17:42:34 +0100 |
commit | 3a23e41255af0de3c5c7f5d9df981c8b205e291f (patch) | |
tree | 50593d45598dd60eecafef514ef4fe3e9957b845 | |
parent | c5667ee90d7d542aa9984eb31b48b59d6240119b (diff) |
add timer functionality to script
-rw-r--r-- | src/crepe/api/Script.cpp | 2 | ||||
-rw-r--r-- | src/crepe/api/Script.h | 12 | ||||
-rw-r--r-- | src/crepe/system/ScriptSystem.cpp | 5 | ||||
-rw-r--r-- | src/test/CollisionTest.cpp | 1 | ||||
-rw-r--r-- | src/test/ScriptTest.h | 1 |
5 files changed, 20 insertions, 1 deletions
diff --git a/src/crepe/api/Script.cpp b/src/crepe/api/Script.cpp index 753a9e3..50edea0 100644 --- a/src/crepe/api/Script.cpp +++ b/src/crepe/api/Script.cpp @@ -25,3 +25,5 @@ void Script::set_next_scene(const string & name) { } SaveManager & Script::get_save_manager() const { return this->mediator->save_manager; } + +LoopTimerManager & Script::get_loop_timer() const { return this->mediator->loop_timer; } diff --git a/src/crepe/api/Script.h b/src/crepe/api/Script.h index 668e5d1..3569b4a 100644 --- a/src/crepe/api/Script.h +++ b/src/crepe/api/Script.h @@ -2,6 +2,7 @@ #include <vector> +#include "../manager/LoopTimerManager.h" #include "../manager/EventManager.h" #include "../manager/Mediator.h" #include "../system/CollisionSystem.h" @@ -46,9 +47,17 @@ protected: /** * \brief Script update function (empty by default) * + * \param delta_time Time since last fixed update + * * This function is called during the ScriptSystem::update() routine if the \c BehaviorScript * component holding this script instance is active. */ + virtual void update(duration_t delta_time) { return this->update(); } + /** + * \brief Fallback script update function (empty by default) + * + * Allows the game programmer to ignore parameters passed to \c update() + */ virtual void update() {} //! \} @@ -135,6 +144,9 @@ protected: //! Retrieve SaveManager reference SaveManager & get_save_manager() const; + //! Retrieve LoopTimerManager reference + LoopTimerManager & get_loop_timer() const; + //! \} private: diff --git a/src/crepe/system/ScriptSystem.cpp b/src/crepe/system/ScriptSystem.cpp index d6b2ca1..4afd2ba 100644 --- a/src/crepe/system/ScriptSystem.cpp +++ b/src/crepe/system/ScriptSystem.cpp @@ -11,6 +11,7 @@ void ScriptSystem::update() { dbg_trace(); ComponentManager & mgr = this->mediator.component_manager; + LoopTimerManager & timer = this->mediator.loop_timer; RefVector<BehaviorScript> behavior_scripts = mgr.get_components_by_type<BehaviorScript>(); for (BehaviorScript & behavior_script : behavior_scripts) { @@ -23,6 +24,8 @@ void ScriptSystem::update() { script->init(); script->initialized = true; } - script->update(); + + duration_t delta_time = timer.get_delta_time(); + script->update(delta_time); } } diff --git a/src/test/CollisionTest.cpp b/src/test/CollisionTest.cpp index 5dbc670..a34189e 100644 --- a/src/test/CollisionTest.cpp +++ b/src/test/CollisionTest.cpp @@ -54,6 +54,7 @@ public: ComponentManager mgr{m}; CollisionSystem collision_sys{m}; ScriptSystem script_sys{m}; + LoopTimerManager loop_timer{m}; GameObject world = mgr.new_object("world", "", {50, 50}); GameObject game_object1 = mgr.new_object("object1", "", {50, 50}); diff --git a/src/test/ScriptTest.h b/src/test/ScriptTest.h index 31fa7c9..7aa858d 100644 --- a/src/test/ScriptTest.h +++ b/src/test/ScriptTest.h @@ -17,6 +17,7 @@ public: crepe::ComponentManager component_manager{mediator}; crepe::ScriptSystem system{mediator}; crepe::EventManager event_mgr{mediator}; + crepe::LoopTimerManager loop_timer{mediator}; crepe::GameObject entity = component_manager.new_object(OBJ_NAME); class MyScript : public crepe::Script { |