aboutsummaryrefslogtreecommitdiff
path: root/src/crepe
diff options
context:
space:
mode:
authorLoek Le Blansch <loek@pipeframe.xyz>2024-12-14 11:32:59 +0100
committerLoek Le Blansch <loek@pipeframe.xyz>2024-12-14 11:32:59 +0100
commita61e3d522c29cfea966a06bb9f9e5e42eae2b7ab (patch)
tree7c0e7d5a0d61f8fa70442eb0584dd012225b5f44 /src/crepe
parent6ddb8c0e7003a66a7b350f7a11ef80803c180307 (diff)
parentb6e835c5f9da24b78a005c6c8896ad35ac965234 (diff)
merge `loek/scripts`
Diffstat (limited to 'src/crepe')
-rw-r--r--src/crepe/api/Script.cpp3
-rw-r--r--src/crepe/api/Script.h13
-rw-r--r--src/crepe/system/ScriptSystem.cpp5
3 files changed, 19 insertions, 2 deletions
diff --git a/src/crepe/api/Script.cpp b/src/crepe/api/Script.cpp
index 34e7908..cafc636 100644
--- a/src/crepe/api/Script.cpp
+++ b/src/crepe/api/Script.cpp
@@ -45,3 +45,6 @@ void Script::replay::release(recording_t recording) {
ReplayManager & mgr = this->mediator->replay_manager;
return mgr.release(recording);
}
+
+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 6536fa4..b052f8b 100644
--- a/src/crepe/api/Script.h
+++ b/src/crepe/api/Script.h
@@ -3,6 +3,7 @@
#include <vector>
#include "../manager/EventManager.h"
+#include "../manager/LoopTimerManager.h"
#include "../manager/Mediator.h"
#include "../manager/ReplayManager.h"
#include "../system/CollisionSystem.h"
@@ -48,9 +49,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() {}
//! \}
@@ -157,7 +166,9 @@ protected:
replay(OptionalRef<Mediator> & mediator) : mediator(mediator) {}
friend class Script;
} replay{mediator};
- //! \}
+
+ //! Retrieve LoopTimerManager reference
+ LoopTimerManager & get_loop_timer() const;
private:
/**
diff --git a/src/crepe/system/ScriptSystem.cpp b/src/crepe/system/ScriptSystem.cpp
index 0d10011..58055d6 100644
--- a/src/crepe/system/ScriptSystem.cpp
+++ b/src/crepe/system/ScriptSystem.cpp
@@ -12,6 +12,7 @@ void ScriptSystem::fixed_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) {
@@ -24,6 +25,8 @@ void ScriptSystem::fixed_update() {
script->init();
script->initialized = true;
}
- script->update();
+
+ duration_t delta_time = timer.get_delta_time();
+ script->update(delta_time);
}
}