From db5a3668aa4b3919ee8dce7ed0872aa5707f80ff Mon Sep 17 00:00:00 2001 From: max-001 Date: Wed, 6 Nov 2024 14:03:34 +0100 Subject: Added Doxygen comments --- src/crepe/ComponentManager.h | 93 +++++++++++++++++++++++++++++++++++++------- 1 file changed, 78 insertions(+), 15 deletions(-) (limited to 'src/crepe/ComponentManager.h') diff --git a/src/crepe/ComponentManager.h b/src/crepe/ComponentManager.h index 2b5e1df..850aadc 100644 --- a/src/crepe/ComponentManager.h +++ b/src/crepe/ComponentManager.h @@ -10,35 +10,92 @@ namespace crepe { +/** + * \brief Manages all components + * + * This class manages all components. It provides methods to add, delete and get + * components. + */ class ComponentManager { public: - // Singleton + /** + * \brief Get the instance of the ComponentManager + * + * \return The instance of the ComponentManager + */ static ComponentManager & get_instance(); ComponentManager(const ComponentManager &) = delete; ComponentManager(ComponentManager &&) = delete; ComponentManager & operator=(const ComponentManager &) = delete; ComponentManager & operator=(ComponentManager &&) = delete; -public: - //! Add a component of a specific type + /** + * \brief Add a component to the ComponentManager + * + * This method adds a component to the ComponentManager. The component is + * created with the given arguments and added to the ComponentManager. + * + * \tparam T The type of the component + * \tparam Args The types of the arguments + * \param id The id of the GameObject this component belongs to + * \param args The arguments to create the component + * \return The created component + */ template T & add_component(uint32_t id, Args &&... args); - //! Deletes all components of a specific type and id + /** + * \brief Delete all components of a specific type and id + * + * This method deletes all components of a specific type and id. + * + * \tparam T The type of the component + * \param id The id of the GameObject this component belongs to + */ template void delete_components_by_id(uint32_t id); - //! Deletes all components of a specific type + /** + * \brief Delete all components of a specific type + * + * This method deletes all components of a specific type. + * + * \tparam T The type of the component + */ template void delete_components(); - //! Deletes all components of a specific id + /** + * \brief Delete all components of a specific id + * + * This method deletes all components of a specific id. + * + * \param id The id of the GameObject this component belongs to + */ void delete_all_components_of_id(uint32_t id); - //! Deletes all components + /** + * \brief Delete all components + * + * This method deletes all components. + */ void delete_all_components(); - - //! Get a vector<> of all components at specific type and id + /** + * \brief Get all components of a specific type and id + * + * This method gets all components of a specific type and id. + * + * \tparam T The type of the component + * \param id The id of the GameObject this component belongs to + * \return A vector of all components of the specific type and id + */ template std::vector> get_components_by_id(uint32_t id) const; - //! Get a vector<> of all components of a specific type + /** + * \brief Get all components of a specific type + * + * This method gets all components of a specific type. + * + * \tparam T The type of the component + * \return A vector of all components of the specific type + */ template std::vector> get_components_by_type() const; @@ -46,11 +103,17 @@ private: ComponentManager(); virtual ~ComponentManager(); - /* - * The std::unordered_map>>> below might seem a bit strange, let me explain this structure: - * The std::unordered_map<> has a key and value. The key is a std::type_index and the value is a std::vector. So, a new std::vector will be created for each new std::type_index. - * The first std::vector<> stores another vector<>. This first vector<> is to bind the entity's id to a component. - * The second std::vector<> stores unique_ptrs. Each component can be gathered via an unique_ptr. This second vector<> allows multiple components of the same std::type_index for one entity (id). +private: + /** + * \brief The components + * + * This unordered_map stores all components. The key is the type of the + * component and the value is a vector of vectors of unique pointers to the + * components. + * Every component type has its own vector of vectors of unique pointers to + * the components. The first vector is for the ids of the GameObjects and the + * second vector is for the components (because a GameObject might have multiple + * components). */ std::unordered_map>>> -- cgit v1.2.3 From 5af0b90f11929ca99a48389ef29d8a56f39b0efd Mon Sep 17 00:00:00 2001 From: max-001 Date: Wed, 6 Nov 2024 14:49:18 +0100 Subject: Made the destructor public and non-virtual (because virtual is not necesary) --- src/crepe/ComponentManager.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/crepe/ComponentManager.h') diff --git a/src/crepe/ComponentManager.h b/src/crepe/ComponentManager.h index 850aadc..f3b0ace 100644 --- a/src/crepe/ComponentManager.h +++ b/src/crepe/ComponentManager.h @@ -28,6 +28,7 @@ public: ComponentManager(ComponentManager &&) = delete; ComponentManager & operator=(const ComponentManager &) = delete; ComponentManager & operator=(ComponentManager &&) = delete; + ~ComponentManager(); /** * \brief Add a component to the ComponentManager @@ -101,7 +102,6 @@ public: private: ComponentManager(); - virtual ~ComponentManager(); private: /** -- cgit v1.2.3 From be58cc9342a775c21ec2ee28923414a5c612fe6e Mon Sep 17 00:00:00 2001 From: Loek Le Blansch Date: Thu, 7 Nov 2024 15:27:28 +0100 Subject: add game_object_id_t type --- src/crepe/Collider.cpp | 2 +- src/crepe/Collider.h | 2 +- src/crepe/Component.cpp | 3 ++- src/crepe/Component.h | 6 ++++-- src/crepe/ComponentManager.cpp | 2 +- src/crepe/ComponentManager.h | 8 ++++---- src/crepe/ComponentManager.hpp | 7 ++++--- src/crepe/api/CircleCollider.h | 2 +- src/crepe/api/Force.cpp | 3 +-- src/crepe/api/Force.h | 2 +- src/crepe/api/GameObject.cpp | 2 +- src/crepe/api/GameObject.h | 6 ++++-- src/crepe/api/Metadata.cpp | 5 ++--- src/crepe/api/Metadata.h | 6 +++--- src/crepe/api/ParticleEmitter.cpp | 4 ++-- src/crepe/api/ParticleEmitter.h | 2 +- src/crepe/api/Rigidbody.cpp | 4 ++-- src/crepe/api/Rigidbody.h | 3 +-- src/crepe/api/Sprite.cpp | 2 +- src/crepe/api/Sprite.h | 3 +-- src/crepe/api/Transform.cpp | 4 ++-- src/crepe/api/Transform.h | 4 +--- src/crepe/types.h | 10 ++++++++++ 23 files changed, 51 insertions(+), 41 deletions(-) create mode 100644 src/crepe/types.h (limited to 'src/crepe/ComponentManager.h') diff --git a/src/crepe/Collider.cpp b/src/crepe/Collider.cpp index 13a3f33..bbec488 100644 --- a/src/crepe/Collider.cpp +++ b/src/crepe/Collider.cpp @@ -2,4 +2,4 @@ using namespace crepe; -Collider::Collider(uint32_t gameObjectId) : Component(gameObjectId) {} +Collider::Collider(game_object_id_t id) : Component(id) {} diff --git a/src/crepe/Collider.h b/src/crepe/Collider.h index 68a7d1d..827f83d 100644 --- a/src/crepe/Collider.h +++ b/src/crepe/Collider.h @@ -6,7 +6,7 @@ namespace crepe { class Collider : public Component { public: - Collider(uint32_t game_object_id); + Collider(game_object_id_t id); int size; }; diff --git a/src/crepe/Component.cpp b/src/crepe/Component.cpp index cdbda67..af439ed 100644 --- a/src/crepe/Component.cpp +++ b/src/crepe/Component.cpp @@ -1,5 +1,6 @@ #include "Component.h" +#include "types.h" using namespace crepe; -Component::Component(uint32_t id) : GAME_OBJECT_ID(id) {} +Component::Component(game_object_id_t id) : GAME_OBJECT_ID(id) {} diff --git a/src/crepe/Component.h b/src/crepe/Component.h index 41badc3..ee795f4 100644 --- a/src/crepe/Component.h +++ b/src/crepe/Component.h @@ -1,5 +1,7 @@ #pragma once +#include "types.h" + #include namespace crepe { @@ -19,7 +21,7 @@ protected: /** * \param id The id of the GameObject this component belongs to */ - Component(uint32_t id); + Component(game_object_id_t id); public: virtual ~Component() = default; @@ -36,7 +38,7 @@ public: public: //! The id of the GameObject this component belongs to - const uint32_t GAME_OBJECT_ID; + const game_object_id_t GAME_OBJECT_ID; //! Whether the component is active bool active = true; }; diff --git a/src/crepe/ComponentManager.cpp b/src/crepe/ComponentManager.cpp index 01bc8d7..85149c8 100644 --- a/src/crepe/ComponentManager.cpp +++ b/src/crepe/ComponentManager.cpp @@ -9,7 +9,7 @@ ComponentManager & ComponentManager::get_instance() { return instance; } -void ComponentManager::delete_all_components_of_id(uint32_t id) { +void ComponentManager::delete_all_components_of_id(game_object_id_t id) { // Loop through all the types (in the unordered_map<>) for (auto & [type, componentArray] : this->components) { // Make sure that the id (that we are looking for) is within the boundaries of the vector<> diff --git a/src/crepe/ComponentManager.h b/src/crepe/ComponentManager.h index f3b0ace..c8c196c 100644 --- a/src/crepe/ComponentManager.h +++ b/src/crepe/ComponentManager.h @@ -43,7 +43,7 @@ public: * \return The created component */ template - T & add_component(uint32_t id, Args &&... args); + T & add_component(game_object_id_t id, Args &&... args); /** * \brief Delete all components of a specific type and id * @@ -53,7 +53,7 @@ public: * \param id The id of the GameObject this component belongs to */ template - void delete_components_by_id(uint32_t id); + void delete_components_by_id(game_object_id_t id); /** * \brief Delete all components of a specific type * @@ -70,7 +70,7 @@ public: * * \param id The id of the GameObject this component belongs to */ - void delete_all_components_of_id(uint32_t id); + void delete_all_components_of_id(game_object_id_t id); /** * \brief Delete all components * @@ -88,7 +88,7 @@ public: */ template std::vector> - get_components_by_id(uint32_t id) const; + get_components_by_id(game_object_id_t id) const; /** * \brief Get all components of a specific type * diff --git a/src/crepe/ComponentManager.hpp b/src/crepe/ComponentManager.hpp index cf9f65a..98efb49 100644 --- a/src/crepe/ComponentManager.hpp +++ b/src/crepe/ComponentManager.hpp @@ -3,11 +3,12 @@ #include #include "ComponentManager.h" +#include "types.h" namespace crepe { template -T & ComponentManager::add_component(uint32_t id, Args &&... args) { +T & ComponentManager::add_component(game_object_id_t id, Args &&... args) { using namespace std; static_assert(is_base_of::value, @@ -51,7 +52,7 @@ T & ComponentManager::add_component(uint32_t id, Args &&... args) { } template -void ComponentManager::delete_components_by_id(uint32_t id) { +void ComponentManager::delete_components_by_id(game_object_id_t id) { using namespace std; // Determine the type of T (this is used as the key of the unordered_map<>) @@ -83,7 +84,7 @@ void ComponentManager::delete_components() { template std::vector> -ComponentManager::get_components_by_id(uint32_t id) const { +ComponentManager::get_components_by_id(game_object_id_t id) const { using namespace std; // Determine the type of T (this is used as the key of the unordered_map<>) diff --git a/src/crepe/api/CircleCollider.h b/src/crepe/api/CircleCollider.h index 931b012..caa7e43 100644 --- a/src/crepe/api/CircleCollider.h +++ b/src/crepe/api/CircleCollider.h @@ -5,7 +5,7 @@ namespace crepe { class CircleCollider : public Collider { public: - CircleCollider(uint32_t game_object_id, int radius) + CircleCollider(game_object_id_t game_object_id, int radius) : Collider(game_object_id), radius(radius) {} int radius; }; diff --git a/src/crepe/api/Force.cpp b/src/crepe/api/Force.cpp index 3c33ad3..63131ac 100644 --- a/src/crepe/api/Force.cpp +++ b/src/crepe/api/Force.cpp @@ -4,8 +4,7 @@ namespace crepe { -Force::Force(uint32_t game_object_id, uint32_t magnitude, uint32_t direction) - : Component(game_object_id) { +Force::Force(game_object_id_t id, uint32_t magnitude, uint32_t direction) : Component(id) { // TODO: A standard angle unit should be established for the entire engine // and assumed to be the default everywhere. Only conversion functions should // explicitly contain the unit (i.e. `deg_to_rad()` & `rad_to_deg()`) diff --git a/src/crepe/api/Force.h b/src/crepe/api/Force.h index c08a8b9..4a4b5de 100644 --- a/src/crepe/api/Force.h +++ b/src/crepe/api/Force.h @@ -8,7 +8,7 @@ namespace crepe { class Force : public Component { public: - Force(uint32_t game_object_id, uint32_t magnitude, uint32_t direction); + Force(game_object_id_t id, uint32_t magnitude, uint32_t direction); int32_t force_x; int32_t force_y; diff --git a/src/crepe/api/GameObject.cpp b/src/crepe/api/GameObject.cpp index b1b8f85..e009288 100644 --- a/src/crepe/api/GameObject.cpp +++ b/src/crepe/api/GameObject.cpp @@ -6,7 +6,7 @@ using namespace crepe; using namespace std; -GameObject::GameObject(uint32_t id, const std::string & name, +GameObject::GameObject(game_object_id_t id, const std::string & name, const std::string & tag, const Point & position, double rotation, double scale) : ID(id) { diff --git a/src/crepe/api/GameObject.h b/src/crepe/api/GameObject.h index 2992787..223d72e 100644 --- a/src/crepe/api/GameObject.h +++ b/src/crepe/api/GameObject.h @@ -3,6 +3,8 @@ #include #include +#include "types.h" + namespace crepe { class Point; @@ -27,7 +29,7 @@ public: * \param rotation The rotation of the GameObject * \param scale The scale of the GameObject */ - GameObject(uint32_t id, const std::string & name, const std::string & tag, + GameObject(game_object_id_t id, const std::string & name, const std::string & tag, const Point & position, double rotation, double scale); /** * \brief Set the parent of this GameObject @@ -55,7 +57,7 @@ public: public: //! The id of the GameObject - const uint32_t ID; + const game_object_id_t ID; }; } // namespace crepe diff --git a/src/crepe/api/Metadata.cpp b/src/crepe/api/Metadata.cpp index 55d9ae2..ab9612b 100644 --- a/src/crepe/api/Metadata.cpp +++ b/src/crepe/api/Metadata.cpp @@ -3,6 +3,5 @@ using namespace crepe; using namespace std; -Metadata::Metadata(uint32_t game_object_id, const string & name, - const string & tag) - : Component(game_object_id), NAME(name), TAG(tag) {} +Metadata::Metadata(game_object_id_t id, const string & name, const string & tag) + : Component(id), NAME(name), TAG(tag) {} diff --git a/src/crepe/api/Metadata.h b/src/crepe/api/Metadata.h index fdbed41..f5e5c55 100644 --- a/src/crepe/api/Metadata.h +++ b/src/crepe/api/Metadata.h @@ -20,7 +20,7 @@ public: * \param name The name of the GameObject * \param tag The tag of the GameObject */ - Metadata(uint32_t game_object_id, const std::string & name, + Metadata(game_object_id_t id, const std::string & name, const std::string & tag); /** * \brief Get the maximum number of instances for this component @@ -35,9 +35,9 @@ public: //! The tag of the GameObject const std::string TAG; //! The id of the parent GameObject (-1 if no parent) - uint32_t parent = -1; + game_object_id_t parent = -1; //! The ids of the children GameObjects - std::vector children; + std::vector children; }; } // namespace crepe diff --git a/src/crepe/api/ParticleEmitter.cpp b/src/crepe/api/ParticleEmitter.cpp index 0b3a9ee..6094732 100644 --- a/src/crepe/api/ParticleEmitter.cpp +++ b/src/crepe/api/ParticleEmitter.cpp @@ -6,12 +6,12 @@ using namespace crepe; -ParticleEmitter::ParticleEmitter(uint32_t game_object_id, +ParticleEmitter::ParticleEmitter(game_object_id_t id, uint32_t max_particles, uint32_t emission_rate, uint32_t speed, uint32_t speed_offset, uint32_t angle, uint32_t angleOffset, float begin_lifespan, float end_lifespan) - : Component(game_object_id), max_particles(max_particles), + : Component(id), max_particles(max_particles), emission_rate(emission_rate), speed(speed), speed_offset(speed_offset), position{0, 0}, begin_lifespan(begin_lifespan), end_lifespan(end_lifespan) { diff --git a/src/crepe/api/ParticleEmitter.h b/src/crepe/api/ParticleEmitter.h index 2e2e95b..5939723 100644 --- a/src/crepe/api/ParticleEmitter.h +++ b/src/crepe/api/ParticleEmitter.h @@ -10,7 +10,7 @@ namespace crepe { class ParticleEmitter : public Component { public: - ParticleEmitter(uint32_t game_object_id, uint32_t max_particles, + ParticleEmitter(game_object_id_t id, uint32_t max_particles, uint32_t emission_rate, uint32_t speed, uint32_t speed_offset, uint32_t angle, uint32_t angleOffset, float begin_lifespan, float end_lifespan); diff --git a/src/crepe/api/Rigidbody.cpp b/src/crepe/api/Rigidbody.cpp index 0a6262a..1e76346 100644 --- a/src/crepe/api/Rigidbody.cpp +++ b/src/crepe/api/Rigidbody.cpp @@ -2,7 +2,7 @@ using namespace crepe; -Rigidbody::Rigidbody(uint32_t game_object_id, int mass, int gravity_scale, +Rigidbody::Rigidbody(game_object_id_t id, int mass, int gravity_scale, BodyType bodyType) - : Component(game_object_id), mass(mass), gravity_scale(gravity_scale), + : Component(id), mass(mass), gravity_scale(gravity_scale), body_type(bodyType) {} diff --git a/src/crepe/api/Rigidbody.h b/src/crepe/api/Rigidbody.h index 518ed94..02ced2e 100644 --- a/src/crepe/api/Rigidbody.h +++ b/src/crepe/api/Rigidbody.h @@ -18,8 +18,7 @@ enum class BodyType { class Rigidbody : public Component { public: - Rigidbody(uint32_t game_object_id, int mass, int gravity_scale, - BodyType body_type); + Rigidbody(game_object_id_t id, int mass, int gravity_scale, BodyType body_type); int32_t velocity_x; int32_t velocity_y; int mass; diff --git a/src/crepe/api/Sprite.cpp b/src/crepe/api/Sprite.cpp index 3dd44f2..7e810b5 100644 --- a/src/crepe/api/Sprite.cpp +++ b/src/crepe/api/Sprite.cpp @@ -10,7 +10,7 @@ using namespace std; using namespace crepe; -Sprite::Sprite(uint32_t id, shared_ptr image, const Color & color, +Sprite::Sprite(game_object_id_t id, shared_ptr image, const Color & color, const FlipSettings & flip) : Component(id), color(color), flip(flip), sprite_image(image) { dbg_trace(); diff --git a/src/crepe/api/Sprite.h b/src/crepe/api/Sprite.h index bdb4da9..28078cd 100644 --- a/src/crepe/api/Sprite.h +++ b/src/crepe/api/Sprite.h @@ -19,8 +19,7 @@ struct FlipSettings { class Sprite : public Component { public: - Sprite(uint32_t game_id, std::shared_ptr image, - const Color & color, const FlipSettings & flip); + Sprite(game_object_id_t id, std::shared_ptr image, const Color & color, const FlipSettings & flip); ~Sprite(); std::shared_ptr sprite_image; Color color; diff --git a/src/crepe/api/Transform.cpp b/src/crepe/api/Transform.cpp index be1769e..5fb66b3 100644 --- a/src/crepe/api/Transform.cpp +++ b/src/crepe/api/Transform.cpp @@ -6,8 +6,8 @@ using namespace crepe; -Transform::Transform(uint32_t game_id, const Point & point, double rot, +Transform::Transform(game_object_id_t id, const Point & point, double rot, double scale) - : Component(game_id), position(point), rotation(rot), scale(scale) { + : Component(id), position(point), rotation(rot), scale(scale) { dbg_trace(); } diff --git a/src/crepe/api/Transform.h b/src/crepe/api/Transform.h index 69ea48f..1104e99 100644 --- a/src/crepe/api/Transform.h +++ b/src/crepe/api/Transform.h @@ -1,7 +1,5 @@ #pragma once -#include - #include "api/Point.h" #include "Component.h" @@ -22,7 +20,7 @@ public: * \param rot The rotation of the GameObject * \param scale The scale of the GameObject */ - Transform(uint32_t id, const Point & point, double rot, double scale); + Transform(game_object_id_t id, const Point & point, double rot, double scale); /** * \brief Get the maximum number of instances for this component * diff --git a/src/crepe/types.h b/src/crepe/types.h new file mode 100644 index 0000000..5ae2c81 --- /dev/null +++ b/src/crepe/types.h @@ -0,0 +1,10 @@ +#pragma once + +#include + +namespace crepe { + +typedef uint32_t game_object_id_t; + +} + -- cgit v1.2.3