diff options
| author | Loek Le Blansch <loek@pipeframe.xyz> | 2024-12-18 14:07:39 +0100 | 
|---|---|---|
| committer | Loek Le Blansch <loek@pipeframe.xyz> | 2024-12-18 14:07:39 +0100 | 
| commit | 8dfdb5a588614db80fa8f41ccf883c1766fe56ff (patch) | |
| tree | 3f5a323bc6f23ed1072bded1ac2b527c2bb031a6 /src | |
| parent | efcb4e88c7b921684379adce2a3d09c8f9aaf3a3 (diff) | |
| parent | 8afdca56d61a6c66ad1ac1bbd092192eeb827173 (diff) | |
merge master
Diffstat (limited to 'src')
| -rw-r--r-- | src/crepe/api/Script.cpp | 4 | ||||
| -rw-r--r-- | src/crepe/api/Script.h | 16 | ||||
| -rw-r--r-- | src/crepe/system/ScriptSystem.cpp | 5 | ||||
| -rw-r--r-- | src/example/game.cpp | 2 | ||||
| -rw-r--r-- | src/test/CollisionTest.cpp | 1 | ||||
| -rw-r--r-- | src/test/ScriptTest.cpp | 22 | ||||
| -rw-r--r-- | src/test/ScriptTest.h | 7 | 
7 files changed, 46 insertions, 11 deletions
diff --git a/src/crepe/api/Script.cpp b/src/crepe/api/Script.cpp index ee76011..6de6830 100644 --- a/src/crepe/api/Script.cpp +++ b/src/crepe/api/Script.cpp @@ -2,6 +2,7 @@  #include "../facade/SDLContext.h"  #include "../manager/SceneManager.h" +  #include "Script.h"  using namespace crepe; @@ -26,6 +27,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; } +  void Script::replay::record_start() {  	ReplayManager & mgr = this->mediator->replay_manager;  	return mgr.record_start(); @@ -58,3 +61,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 2750df0..2422cdc 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 "../manager/ReplayManager.h"  #include "../system/CollisionSystem.h" @@ -49,10 +50,12 @@ 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() {} +	virtual void update(duration_t delta_time) {}  	//! \}  	//! ScriptSystem calls \c init() and \c update() @@ -142,6 +145,15 @@ protected:  	SaveManager & get_save_manager() const;  	//! \} +	/** +	 * \name Timing functions +	 * \see LoopTimerManager +	 * \{ +	 */ +	//! Retrieve LoopTimerManager reference +	LoopTimerManager & get_loop_timer() const; +	//! \} +  	//! Replay management functions  	struct replay { // NOLINT  		//! \copydoc ReplayManager::record_start @@ -164,7 +176,6 @@ protected:  	 * \see SDLContext::get_keyboard_state  	 *   	 * \return current keyboard state map with Keycode as key and bool as value(true = pressed, false = not pressed) -	 *   	 */  	const keyboard_state_t & get_keyboard_state() const;  	/** @@ -172,7 +183,6 @@ protected:  	 * \see SDLContext::get_keyboard_state  	 *   	 * \return Keycode state (true if pressed, false if not pressed). -	 *   	 */  	bool get_key_state(Keycode key) const noexcept; diff --git a/src/crepe/system/ScriptSystem.cpp b/src/crepe/system/ScriptSystem.cpp index 0d10011..746285f 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_scaled_fixed_delta_time(); +		script->update(delta_time);  	}  } 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<KeyPressEvent>(  			[this](const KeyPressEvent & ev) -> bool { return this->keypressed(ev); });  	} -	void update() { +	void update(duration_t) {  		Rigidbody & tf = this->get_component<Rigidbody>();  		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/CollisionTest.cpp b/src/test/CollisionTest.cpp index 65d592d..73a964a 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 ccf5060..66b8193 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.fixed_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.fixed_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.fixed_update();  	} @@ -68,8 +68,20 @@ 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.fixed_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..f3dbda4 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 { @@ -24,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<crepe::BehaviorScript> behaviorscript;  |