aboutsummaryrefslogtreecommitdiff
path: root/src/crepe/api
diff options
context:
space:
mode:
authorLoek Le Blansch <loek@pipeframe.xyz>2024-11-13 15:40:01 +0100
committerLoek Le Blansch <loek@pipeframe.xyz>2024-11-13 15:40:01 +0100
commit7ec392eda3345606f0de75a432954b221cee82ce (patch)
tree48689f986a3c4042ec6b7704dad053f25ef898bf /src/crepe/api
parent202725f481e64c4d95e370102ab93d4f8cf4af93 (diff)
add doxygen + check const correctness
Diffstat (limited to 'src/crepe/api')
-rw-r--r--src/crepe/api/BehaviorScript.h8
-rw-r--r--src/crepe/api/Config.h3
-rw-r--r--src/crepe/api/Script.h40
-rw-r--r--src/crepe/api/Script.hpp8
-rw-r--r--src/crepe/api/Texture.cpp2
5 files changed, 53 insertions, 8 deletions
diff --git a/src/crepe/api/BehaviorScript.h b/src/crepe/api/BehaviorScript.h
index c20842d..4160a72 100644
--- a/src/crepe/api/BehaviorScript.h
+++ b/src/crepe/api/BehaviorScript.h
@@ -10,6 +10,13 @@ class ScriptSystem;
class ComponentManager;
class Script;
+/**
+ * \brief Script component
+ *
+ * This class acts as a (component) wrapper around an instance of (a class
+ * derivatived from) \c Script. \c BehaviorScript is the only ECS component
+ * that stores member function implementations as data.
+ */
class BehaviorScript : public Component {
protected:
friend class crepe::ComponentManager;
@@ -24,6 +31,7 @@ public:
protected:
friend class crepe::ScriptSystem;
+ //! Script instance
std::unique_ptr<Script> script = nullptr;
};
diff --git a/src/crepe/api/Config.h b/src/crepe/api/Config.h
index 8fd381e..dad7e08 100644
--- a/src/crepe/api/Config.h
+++ b/src/crepe/api/Config.h
@@ -7,7 +7,6 @@ namespace crepe {
class Config {
private:
Config() = default;
-
public:
~Config() = default;
@@ -26,7 +25,7 @@ public:
/**
* \brief Log level
*
- * Only messages with equal or higher priority than this value will be
+ * Only messages with equal or higher severity than this value will be
* logged.
*/
Log::Level level = Log::Level::INFO;
diff --git a/src/crepe/api/Script.h b/src/crepe/api/Script.h
index ed247ad..e6fbb5c 100644
--- a/src/crepe/api/Script.h
+++ b/src/crepe/api/Script.h
@@ -7,11 +7,30 @@ namespace crepe {
class ScriptSystem;
class BehaviorScript;
+/**
+ * \brief Script interface
+ *
+ * This class is used as a base class for user-defined scripts that can be
+ * added to game objects using the \c BehaviorScript component.
+ */
class Script {
friend class crepe::ScriptSystem;
protected:
+ /**
+ * \brief Script initialization function
+ *
+ * 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 holding this script instance is active.
+ */
virtual void init() {}
+ /**
+ * \brief Script update function
+ *
+ * This function is called during the ScriptSystem::update() routine if the
+ * \c BehaviorScript component holding this script instance is active.
+ */
virtual void update() {}
// NOTE: additional *events* (like unity's OnDisable and OnEnable) should be
// implemented as member methods in derivative user script classes and
@@ -19,11 +38,28 @@ protected:
// added event.
protected:
+ /**
+ * \brief Get single component of type \c T on this game object (utility)
+ *
+ * \tparam T Type of component
+ *
+ * \returns Reference to component
+ *
+ * \throws nullptr if this game object does not have a component matching
+ * type \c T
+ */
template <typename T>
- T & get_component();
+ T & get_component() const;
+ /**
+ * \brief Get all components of type \c T on this game object (utility)
+ *
+ * \tparam T Type of component
+ *
+ * \returns List of component references
+ */
template <typename T>
- std::vector<std::reference_wrapper<T>> get_components();
+ std::vector<std::reference_wrapper<T>> get_components() const;
private:
friend class crepe::BehaviorScript;
diff --git a/src/crepe/api/Script.hpp b/src/crepe/api/Script.hpp
index d96c0e8..afe653f 100644
--- a/src/crepe/api/Script.hpp
+++ b/src/crepe/api/Script.hpp
@@ -1,6 +1,7 @@
#pragma once
#include "../ComponentManager.h"
+#include "../Exception.h"
#include "BehaviorScript.h"
#include "Script.h"
@@ -8,16 +9,17 @@
namespace crepe {
template <typename T>
-T & Script::get_component() {
+T & Script::get_component() const {
std::vector<std::reference_wrapper<T>> all_components
= this->get_components<T>();
- if (all_components.size() < 1) throw nullptr; // TODO
+ if (all_components.size() < 1)
+ throw Exception("Script: no component found with type = %s", typeid(T).name());
return all_components.back().get();
}
template <typename T>
-std::vector<std::reference_wrapper<T>> Script::get_components() {
+std::vector<std::reference_wrapper<T>> Script::get_components() const {
ComponentManager & mgr = ComponentManager::get_instance();
return mgr.get_components_by_id<T>(this->parent->game_object_id);
}
diff --git a/src/crepe/api/Texture.cpp b/src/crepe/api/Texture.cpp
index 8ddeac5..de0d0ea 100644
--- a/src/crepe/api/Texture.cpp
+++ b/src/crepe/api/Texture.cpp
@@ -26,7 +26,7 @@ Texture::~Texture() {
void Texture::load(unique_ptr<Asset> res) {
SDLContext & ctx = SDLContext::get_instance();
- this->texture = std::move(ctx.texture_from_path(res->canonical()));
+ this->texture = std::move(ctx.texture_from_path(res->get_canonical()));
}
int Texture::get_width() const {