From bfb4dffccec0a902586927c41b2454c8ddacd9e3 Mon Sep 17 00:00:00 2001 From: Loek Le Blansch Date: Wed, 20 Nov 2024 19:57:24 +0100 Subject: add Log function to script --- src/crepe/api/Script.h | 33 ++++++++++++++++++++++++++++----- src/crepe/api/Script.hpp | 5 +++++ src/crepe/util/Log.h | 10 +++++----- 3 files changed, 38 insertions(+), 10 deletions(-) diff --git a/src/crepe/api/Script.h b/src/crepe/api/Script.h index 2b70379..ddb499c 100644 --- a/src/crepe/api/Script.h +++ b/src/crepe/api/Script.h @@ -22,7 +22,11 @@ class ComponentManager; class Script { protected: /** - * \brief Script initialization function + * \name Interface functions + * \{ + */ + /** + * \brief Script initialization function (empty by default) * * This function is called during the ScriptSystem::update() routine *before* * Script::update() if it (a) has not yet been called and (b) the \c BehaviorScript component @@ -30,24 +34,32 @@ protected: */ virtual void init() {} /** - * \brief Script update function + * \brief Script update function (empty by default) * * This function is called during the ScriptSystem::update() routine if the \c BehaviorScript * component holding this script instance is active. */ virtual void update() {} + //! \} + //! ScriptSystem calls \c init() and \c update() friend class crepe::ScriptSystem; protected: /** - * \brief Get single component of type \c T on this game object (utility) + * \name Utility functions + * \{ + */ + + /** + * \brief Get single component of type \c T on this game object * * \tparam T Type of component * * \returns Reference to component * - * \throws nullptr if this game object does not have a component matching type \c T + * \throws std::runtime_error if this game object does not have a component matching type \c + * T */ template T & get_component() const; @@ -55,7 +67,7 @@ protected: // cause compile-time errors /** - * \brief Get all components of type \c T on this game object (utility) + * \brief Get all components of type \c T on this game object * * \tparam T Type of component * @@ -64,6 +76,17 @@ protected: template std::vector> get_components() const; + /** + * \brief Log a message using Log::logf + * + * \tparam Args Log::logf parameters + * \param args Log::logf parameters + */ + template + void logf(Args &&... args); + + //! \} + protected: // NOTE: Script must have a constructor without arguments so the game programmer doesn't need // to manually add `using Script::Script` to their concrete script class. diff --git a/src/crepe/api/Script.hpp b/src/crepe/api/Script.hpp index a064a90..4593d69 100644 --- a/src/crepe/api/Script.hpp +++ b/src/crepe/api/Script.hpp @@ -25,4 +25,9 @@ std::vector> Script::get_components() const { return mgr.get_components_by_id(this->game_object_id); } +template +void Script::logf(Args &&... args) { + Log::logf(std::forward(args)...); +} + } // namespace crepe diff --git a/src/crepe/util/Log.h b/src/crepe/util/Log.h index d55b11e..fc0bb3a 100644 --- a/src/crepe/util/Log.h +++ b/src/crepe/util/Log.h @@ -34,11 +34,11 @@ class Log { public: //! Log message severity enum Level { - TRACE, //< Include (internal) function calls - DEBUG, //< Include dbg_logf output - INFO, //< General-purpose messages - WARNING, //< Non-fatal errors - ERROR, //< Fatal errors + TRACE, //!< Include (internal) function calls + DEBUG, //!< Include dbg_logf output + INFO, //!< General-purpose messages + WARNING, //!< Non-fatal errors + ERROR, //!< Fatal errors }; /** -- cgit v1.2.3 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/BehaviorScript.hpp | 1 + src/crepe/api/CMakeLists.txt | 1 + src/crepe/api/Script.cpp | 11 +++++++++++ src/crepe/api/Script.h | 36 +++++++++++++++++++++++++++++++++--- src/crepe/api/Script.hpp | 9 ++++++++- 5 files changed, 54 insertions(+), 4 deletions(-) create mode 100644 src/crepe/api/Script.cpp diff --git a/src/crepe/api/BehaviorScript.hpp b/src/crepe/api/BehaviorScript.hpp index d80321d..dd1efd5 100644 --- a/src/crepe/api/BehaviorScript.hpp +++ b/src/crepe/api/BehaviorScript.hpp @@ -16,6 +16,7 @@ BehaviorScript & BehaviorScript::set_script() { Script * s = new T(); s->game_object_id = this->game_object_id; s->component_manager_ref = &this->component_manager; + s->event_manager_ref = &EventManager::get_instance(); this->script = std::unique_ptr