aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/crepe/api/Script.cpp3
-rw-r--r--src/crepe/api/Script.h14
-rw-r--r--src/crepe/system/ScriptSystem.cpp5
-rw-r--r--src/test/CollisionTest.cpp1
-rw-r--r--src/test/ScriptTest.cpp12
-rw-r--r--src/test/ScriptTest.h5
6 files changed, 38 insertions, 2 deletions
diff --git a/src/crepe/api/Script.cpp b/src/crepe/api/Script.cpp
index 583c04f..85016f5 100644
--- a/src/crepe/api/Script.cpp
+++ b/src/crepe/api/Script.cpp
@@ -26,6 +26,8 @@ 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; }
+
const keyboard_state_t & Script::get_keyboard_state() const {
SDLContext & sdl_context = this->mediator->sdl_context;
return sdl_context.get_keyboard_state();
@@ -38,3 +40,4 @@ bool Script::get_key_state(Keycode key) const noexcept {
return false;
}
}
+
diff --git a/src/crepe/api/Script.h b/src/crepe/api/Script.h
index 65306cd..0ec3476 100644
--- a/src/crepe/api/Script.h
+++ b/src/crepe/api/Script.h
@@ -4,6 +4,7 @@
#include "../api/KeyCodes.h"
#include "../manager/EventManager.h"
+#include "../manager/LoopTimerManager.h"
#include "../manager/Mediator.h"
#include "../system/CollisionSystem.h"
#include "../types.h"
@@ -47,9 +48,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,10 @@ protected:
//! Retrieve SaveManager reference
SaveManager & get_save_manager() const;
+
+ //! Retrieve LoopTimerManager reference
+ LoopTimerManager & get_loop_timer() const;
+
/**
* \brief Utility function to retrieve the keyboard state
* \see SDLContext::get_keyboard_state
@@ -151,7 +164,6 @@ protected:
*
*/
bool get_key_state(Keycode key) const noexcept;
- //! \}
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 ff9e7cc..baa95c1 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.cpp b/src/test/ScriptTest.cpp
index acdae70..499be5a 100644
--- a/src/test/ScriptTest.cpp
+++ b/src/test/ScriptTest.cpp
@@ -73,3 +73,15 @@ TEST_F(ScriptTest, UpdateInactive) {
system.update();
}
}
+
+TEST_F(ScriptTest, SaveManager) {
+ MyScript & script = this->script;
+
+ EXPECT_EQ(&script.get_save_manager(), &this->save_manager);
+}
+
+TEST_F(ScriptTest, LoopTimerManager) {
+ MyScript & script = this->script;
+
+ EXPECT_EQ(&script.get_loop_timer(), &this->loop_timer);
+}
diff --git a/src/test/ScriptTest.h b/src/test/ScriptTest.h
index 31fa7c9..537169d 100644
--- a/src/test/ScriptTest.h
+++ b/src/test/ScriptTest.h
@@ -7,7 +7,10 @@
#include <crepe/api/Script.h>
#include <crepe/manager/ComponentManager.h>
#include <crepe/manager/EventManager.h>
+#include <crepe/manager/LoopTimerManager.h>
+#include <crepe/manager/SaveManager.h>
#include <crepe/system/ScriptSystem.h>
+
class ScriptTest : public testing::Test {
protected:
crepe::Mediator mediator;
@@ -17,6 +20,8 @@ public:
crepe::ComponentManager component_manager{mediator};
crepe::ScriptSystem system{mediator};
crepe::EventManager event_mgr{mediator};
+ crepe::LoopTimerManager loop_timer{mediator};
+ crepe::SaveManager save_manager{mediator};
crepe::GameObject entity = component_manager.new_object(OBJ_NAME);
class MyScript : public crepe::Script {