From 502fb8e8d1dcfe10f55fdef2cdfb71afec806204 Mon Sep 17 00:00:00 2001 From: Loek Le Blansch Date: Thu, 21 Nov 2024 09:43:13 +0100 Subject: pull script/event changes from `loek/collision-system` --- src/crepe/api/BehaviorScript.h | 7 +++-- src/crepe/api/BehaviorScript.hpp | 11 +++++--- src/crepe/api/Event.h | 12 ++++---- src/crepe/api/EventManager.h | 4 +-- src/crepe/api/Script.cpp | 6 ++++ src/crepe/api/Script.h | 60 +++++++++++++++++++++++++++++++++++----- src/crepe/api/Script.hpp | 20 ++++++++++++-- 7 files changed, 96 insertions(+), 24 deletions(-) (limited to 'src/crepe') diff --git a/src/crepe/api/BehaviorScript.h b/src/crepe/api/BehaviorScript.h index 9d85d4c..d556fe5 100644 --- a/src/crepe/api/BehaviorScript.h +++ b/src/crepe/api/BehaviorScript.h @@ -39,11 +39,14 @@ public: * \brief Set the concrete script of this component * * \tparam T Concrete script type (derived from \c crepe::Script) + * \tparam Args Arguments for concrete script constructor + * + * \param args Arguments for concrete script constructor (forwarded using perfect forwarding) * * \returns Reference to BehaviorScript component (`*this`) */ - template - BehaviorScript & set_script(); + template + BehaviorScript & set_script(Args &&... args); protected: //! Script instance diff --git a/src/crepe/api/BehaviorScript.hpp b/src/crepe/api/BehaviorScript.hpp index dd1efd5..5b5a418 100644 --- a/src/crepe/api/BehaviorScript.hpp +++ b/src/crepe/api/BehaviorScript.hpp @@ -9,14 +9,17 @@ namespace crepe { -template -BehaviorScript & BehaviorScript::set_script() { +template +BehaviorScript & BehaviorScript::set_script(Args &&... args) { dbg_trace(); static_assert(std::is_base_of::value); - Script * s = new T(); - s->game_object_id = this->game_object_id; + Script * s = new T(std::forward(args)...); + + s->game_object_id_ref = &this->game_object_id; + s->active_ref = &this->active; s->component_manager_ref = &this->component_manager; s->event_manager_ref = &EventManager::get_instance(); + this->script = std::unique_ptr