From 3a23e41255af0de3c5c7f5d9df981c8b205e291f Mon Sep 17 00:00:00 2001 From: Loek Le Blansch Date: Fri, 13 Dec 2024 17:42:34 +0100 Subject: add timer functionality to script --- src/test/ScriptTest.h | 1 + 1 file changed, 1 insertion(+) (limited to 'src/test/ScriptTest.h') 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 { -- cgit v1.2.3 From 83131edf875c5997eb6a9f3441b5d42b22498bd8 Mon Sep 17 00:00:00 2001 From: Loek Le Blansch Date: Fri, 13 Dec 2024 18:04:49 +0100 Subject: update tests --- src/test/ScriptTest.cpp | 13 +++++++++++++ src/test/ScriptTest.h | 4 ++++ 2 files changed, 17 insertions(+) (limited to 'src/test/ScriptTest.h') diff --git a/src/test/ScriptTest.cpp b/src/test/ScriptTest.cpp index acdae70..2aee0fd 100644 --- a/src/test/ScriptTest.cpp +++ b/src/test/ScriptTest.cpp @@ -73,3 +73,16 @@ 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 7aa858d..537169d 100644 --- a/src/test/ScriptTest.h +++ b/src/test/ScriptTest.h @@ -7,7 +7,10 @@ #include #include #include +#include +#include #include + class ScriptTest : public testing::Test { protected: crepe::Mediator mediator; @@ -18,6 +21,7 @@ public: 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 { -- cgit v1.2.3 From 1d182abe4278b6bf4410cb25a9ae41f501833990 Mon Sep 17 00:00:00 2001 From: Loek Le Blansch Date: Wed, 18 Dec 2024 13:31:06 +0100 Subject: process feedback --- src/crepe/api/Script.h | 8 +------- src/example/game.cpp | 2 +- src/test/ScriptTest.cpp | 10 +++++----- src/test/ScriptTest.h | 2 +- 4 files changed, 8 insertions(+), 14 deletions(-) (limited to 'src/test/ScriptTest.h') diff --git a/src/crepe/api/Script.h b/src/crepe/api/Script.h index 0ec3476..a87af4e 100644 --- a/src/crepe/api/Script.h +++ b/src/crepe/api/Script.h @@ -53,13 +53,7 @@ protected: * 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() {} + virtual void update(duration_t delta_time) {} //! \} //! ScriptSystem calls \c init() and \c update() diff --git a/src/example/game.cpp b/src/example/game.cpp index 22effd2..3975650 100644 --- a/src/example/game.cpp +++ b/src/example/game.cpp @@ -86,7 +86,7 @@ class MyScript1 : public Script { subscribe( [this](const KeyPressEvent & ev) -> bool { return this->keypressed(ev); }); } - void update() { + void update(duration_t) { Rigidbody & tf = this->get_component(); Log::logf("linear_velocity.x {}", tf.data.linear_velocity.x); Log::logf("linear_velocity.y {}", tf.data.linear_velocity.y); diff --git a/src/test/ScriptTest.cpp b/src/test/ScriptTest.cpp index 499be5a..846e398 100644 --- a/src/test/ScriptTest.cpp +++ b/src/test/ScriptTest.cpp @@ -28,7 +28,7 @@ void ScriptTest::SetUp() { TEST_F(ScriptTest, Default) { MyScript & script = this->script; EXPECT_CALL(script, init()).Times(0); - EXPECT_CALL(script, update()).Times(0); + EXPECT_CALL(script, update(_)).Times(0); } TEST_F(ScriptTest, UpdateOnce) { @@ -38,7 +38,7 @@ TEST_F(ScriptTest, UpdateOnce) { InSequence seq; EXPECT_CALL(script, init()).Times(1); - EXPECT_CALL(script, update()).Times(1); + EXPECT_CALL(script, update(_)).Times(1); system.update(); } @@ -46,7 +46,7 @@ TEST_F(ScriptTest, UpdateOnce) { InSequence seq; EXPECT_CALL(script, init()).Times(0); - EXPECT_CALL(script, update()).Times(1); + EXPECT_CALL(script, update(_)).Times(1); system.update(); } } @@ -59,7 +59,7 @@ TEST_F(ScriptTest, UpdateInactive) { InSequence seq; EXPECT_CALL(script, init()).Times(0); - EXPECT_CALL(script, update()).Times(0); + EXPECT_CALL(script, update(_)).Times(0); behaviorscript.active = false; system.update(); } @@ -68,7 +68,7 @@ TEST_F(ScriptTest, UpdateInactive) { InSequence seq; EXPECT_CALL(script, init()).Times(1); - EXPECT_CALL(script, update()).Times(1); + EXPECT_CALL(script, update(_)).Times(1); behaviorscript.active = true; system.update(); } diff --git a/src/test/ScriptTest.h b/src/test/ScriptTest.h index 537169d..f3dbda4 100644 --- a/src/test/ScriptTest.h +++ b/src/test/ScriptTest.h @@ -29,7 +29,7 @@ public: public: MOCK_METHOD(void, init, (), (override)); - MOCK_METHOD(void, update, (), (override)); + MOCK_METHOD(void, update, (crepe::duration_t), (override)); }; crepe::OptionalRef behaviorscript; -- cgit v1.2.3 From cff284cedde9f0cc133ff2855557299ce1d8083c Mon Sep 17 00:00:00 2001 From: Loek Le Blansch Date: Wed, 18 Dec 2024 14:20:59 +0100 Subject: add fixed/frame update functions to script --- src/crepe/api/Script.h | 17 +++++++++++++---- src/crepe/system/ScriptSystem.cpp | 18 +++++++++++++----- src/crepe/system/ScriptSystem.h | 16 +++++++++++++++- src/test/ScriptTest.cpp | 18 +++++++++++++----- src/test/ScriptTest.h | 3 ++- 5 files changed, 56 insertions(+), 16 deletions(-) (limited to 'src/test/ScriptTest.h') diff --git a/src/crepe/api/Script.h b/src/crepe/api/Script.h index 2422cdc..5f68928 100644 --- a/src/crepe/api/Script.h +++ b/src/crepe/api/Script.h @@ -48,14 +48,23 @@ protected: */ virtual void init() {} /** - * \brief Script update function (empty by default) + * \brief Script fixed 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. + * \note 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) {} + virtual void fixed_update(duration_t delta_time) {} + /** + * \brief Script frame update function (empty by default) + * + * \param delta_time Time since last frame update + * + * \note This function is called during the ScriptSystem::update() routine if the \c + * BehaviorScript component holding this script instance is active. + */ + virtual void frame_update(duration_t delta_time) {} //! \} //! ScriptSystem calls \c init() and \c update() diff --git a/src/crepe/system/ScriptSystem.cpp b/src/crepe/system/ScriptSystem.cpp index 746285f..9977396 100644 --- a/src/crepe/system/ScriptSystem.cpp +++ b/src/crepe/system/ScriptSystem.cpp @@ -1,7 +1,6 @@ #include "../api/BehaviorScript.h" #include "../api/Script.h" #include "../manager/ComponentManager.h" -#include "../util/dbg.h" #include "ScriptSystem.h" @@ -9,10 +8,19 @@ using namespace std; using namespace crepe; void ScriptSystem::fixed_update() { - dbg_trace(); + LoopTimerManager & timer = this->mediator.loop_timer; + duration_t delta_time = timer.get_scaled_fixed_delta_time(); + this->update(&Script::fixed_update, delta_time); +} - ComponentManager & mgr = this->mediator.component_manager; +void ScriptSystem::frame_update() { LoopTimerManager & timer = this->mediator.loop_timer; + duration_t delta_time = timer.get_delta_time(); + this->update(&Script::frame_update, delta_time); +} + +void ScriptSystem::update(void (Script::* update_function)(duration_t), const duration_t & delta_time) { + ComponentManager & mgr = this->mediator.component_manager; RefVector behavior_scripts = mgr.get_components_by_type(); for (BehaviorScript & behavior_script : behavior_scripts) { @@ -26,7 +34,7 @@ void ScriptSystem::fixed_update() { script->initialized = true; } - duration_t delta_time = timer.get_scaled_fixed_delta_time(); - script->update(delta_time); + (*script.*update_function)(delta_time); } } + diff --git a/src/crepe/system/ScriptSystem.h b/src/crepe/system/ScriptSystem.h index 612c2ae..ca4534a 100644 --- a/src/crepe/system/ScriptSystem.h +++ b/src/crepe/system/ScriptSystem.h @@ -2,6 +2,8 @@ #include "System.h" +#include "../manager/LoopTimerManager.h" + namespace crepe { class Script; @@ -16,13 +18,25 @@ class ScriptSystem : public System { public: using System::System; /** - * \brief Call Script::update() on all active \c BehaviorScript instances + * \brief Call Script::fixed_update() on all active \c BehaviorScript instances * * This routine updates all scripts sequentially using the Script::update() * method. It also calls Script::init() if this has not been done before on * the \c BehaviorScript instance. */ void fixed_update() override; + + /** + * \brief Call Script::frame_update() on all active \c BehaviorScript instances + * + * This routine updates all scripts sequentially using the Script::update() + * method. It also calls Script::init() if this has not been done before on + * the \c BehaviorScript instance. + */ + void frame_update() override; + +private: + void update(void (Script::* update_function)(duration_t), const duration_t & delta_time); }; } // namespace crepe diff --git a/src/test/ScriptTest.cpp b/src/test/ScriptTest.cpp index 66b8193..40aa25c 100644 --- a/src/test/ScriptTest.cpp +++ b/src/test/ScriptTest.cpp @@ -28,7 +28,8 @@ void ScriptTest::SetUp() { TEST_F(ScriptTest, Default) { MyScript & script = this->script; EXPECT_CALL(script, init()).Times(0); - EXPECT_CALL(script, update(_)).Times(0); + EXPECT_CALL(script, fixed_update(_)).Times(0); + EXPECT_CALL(script, frame_update(_)).Times(0); } TEST_F(ScriptTest, UpdateOnce) { @@ -38,7 +39,7 @@ TEST_F(ScriptTest, UpdateOnce) { InSequence seq; EXPECT_CALL(script, init()).Times(1); - EXPECT_CALL(script, update(_)).Times(1); + EXPECT_CALL(script, fixed_update(_)).Times(1); system.fixed_update(); } @@ -46,9 +47,16 @@ TEST_F(ScriptTest, UpdateOnce) { InSequence seq; EXPECT_CALL(script, init()).Times(0); - EXPECT_CALL(script, update(_)).Times(1); + EXPECT_CALL(script, fixed_update(_)).Times(1); system.fixed_update(); } + + { + InSequence seq; + + EXPECT_CALL(script, frame_update(_)).Times(1); + system.frame_update(); + } } TEST_F(ScriptTest, UpdateInactive) { @@ -59,7 +67,7 @@ TEST_F(ScriptTest, UpdateInactive) { InSequence seq; EXPECT_CALL(script, init()).Times(0); - EXPECT_CALL(script, update(_)).Times(0); + EXPECT_CALL(script, fixed_update(_)).Times(0); behaviorscript.active = false; system.fixed_update(); } @@ -68,7 +76,7 @@ TEST_F(ScriptTest, UpdateInactive) { InSequence seq; EXPECT_CALL(script, init()).Times(1); - EXPECT_CALL(script, update(_)).Times(1); + EXPECT_CALL(script, fixed_update(_)).Times(1); behaviorscript.active = true; system.fixed_update(); } diff --git a/src/test/ScriptTest.h b/src/test/ScriptTest.h index f3dbda4..8637df0 100644 --- a/src/test/ScriptTest.h +++ b/src/test/ScriptTest.h @@ -29,7 +29,8 @@ public: public: MOCK_METHOD(void, init, (), (override)); - MOCK_METHOD(void, update, (crepe::duration_t), (override)); + MOCK_METHOD(void, fixed_update, (crepe::duration_t), (override)); + MOCK_METHOD(void, frame_update, (crepe::duration_t), (override)); }; crepe::OptionalRef behaviorscript; -- cgit v1.2.3