From da379a58033c0ef3c9c854326a3fca25d6e54319 Mon Sep 17 00:00:00 2001 From: Loek Le Blansch Date: Wed, 20 Nov 2024 22:18:54 +0100 Subject: add Script::subscribe --- src/crepe/api/Script.cpp | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 src/crepe/api/Script.cpp (limited to 'src/crepe/api/Script.cpp') diff --git a/src/crepe/api/Script.cpp b/src/crepe/api/Script.cpp new file mode 100644 index 0000000..9ebb074 --- /dev/null +++ b/src/crepe/api/Script.cpp @@ -0,0 +1,11 @@ +#include "Script.h" + +using namespace crepe; + +Script::~Script() { + EventManager & evmgr = *this->event_manager_ref; + for (auto id : this->listeners) { + evmgr.unsubscribe(id); + } +} + -- cgit v1.2.3 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` --- Doxyfile | 6 ++-- 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 ++++++++++++-- src/doc/layout.xml | 2 +- src/test/ScriptTest.cpp | 60 ++++++++++++++++++++++++++++++++++++++-- 10 files changed, 159 insertions(+), 29 deletions(-) (limited to 'src/crepe/api/Script.cpp') diff --git a/Doxyfile b/Doxyfile index e0a31df..f2714cd 100644 --- a/Doxyfile +++ b/Doxyfile @@ -19,15 +19,17 @@ TAB_SIZE = 2 HTML_INDEX_NUM_ENTRIES = 2 HTML_EXTRA_STYLESHEET = src/doc/style.css +SHOW_HEADERFILE = NO USE_MDFILE_AS_MAINPAGE = ./readme.md REPEAT_BRIEF = NO -INTERNAL_DOCS = YES -EXTRACT_PRIVATE = YES EXTRACT_STATIC = YES HIDE_UNDOC_NAMESPACES = YES HIDE_UNDOC_CLASSES = YES QUIET = YES +# set these to NO for user-only docs +INTERNAL_DOCS = YES +EXTRACT_PRIVATE = YES 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