aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/crepe/Component.cpp1
-rw-r--r--src/crepe/Component.h6
-rw-r--r--src/crepe/ComponentManager.cpp12
-rw-r--r--src/crepe/ComponentManager.h3
-rw-r--r--src/crepe/ComponentManager.hpp86
-rw-r--r--src/crepe/api/BehaviorScript.h7
-rw-r--r--src/crepe/util/log.h2
7 files changed, 61 insertions, 56 deletions
diff --git a/src/crepe/Component.cpp b/src/crepe/Component.cpp
index d14159c..737f30a 100644
--- a/src/crepe/Component.cpp
+++ b/src/crepe/Component.cpp
@@ -2,4 +2,3 @@
using namespace crepe;
-Component::Component() : active(true) {}
diff --git a/src/crepe/Component.h b/src/crepe/Component.h
index 16a4ce5..00b2164 100644
--- a/src/crepe/Component.h
+++ b/src/crepe/Component.h
@@ -3,12 +3,14 @@
namespace crepe {
class Component {
+protected:
+ Component() = default;
public:
- Component();
+ virtual ~Component() = default;
// TODO: shouldn't this constructor be deleted because this class will never
// directly be instantiated?
- bool active;
+ bool active = true;
};
} // namespace crepe
diff --git a/src/crepe/ComponentManager.cpp b/src/crepe/ComponentManager.cpp
index 9a3fec7..8aa9d4e 100644
--- a/src/crepe/ComponentManager.cpp
+++ b/src/crepe/ComponentManager.cpp
@@ -1,3 +1,4 @@
+#include "util/log.h"
#include "ComponentManager.h"
using namespace crepe;
@@ -20,5 +21,14 @@ void ComponentManager::delete_all_components_of_id(uint32_t id) {
void ComponentManager::delete_all_components() {
// Clear the whole unordered_map<>
- components.clear();
+ this->components.clear();
}
+
+ComponentManager::ComponentManager() {
+ dbg_trace();
+}
+
+ComponentManager::~ComponentManager() {
+ dbg_trace();
+}
+
diff --git a/src/crepe/ComponentManager.h b/src/crepe/ComponentManager.h
index 2ab9dc8..eab9b45 100644
--- a/src/crepe/ComponentManager.h
+++ b/src/crepe/ComponentManager.h
@@ -44,7 +44,8 @@ public:
std::vector<std::reference_wrapper<T>> get_components_by_type() const;
private:
- ComponentManager() = default;
+ ComponentManager();
+ virtual ~ComponentManager();
/*
* The std::unordered_map<std::type_index, std::vector<std::vector<std::unique_ptr<Component>>>> below might seem a bit strange, let me explain this structure:
diff --git a/src/crepe/ComponentManager.hpp b/src/crepe/ComponentManager.hpp
index 084cd33..8fc1cba 100644
--- a/src/crepe/ComponentManager.hpp
+++ b/src/crepe/ComponentManager.hpp
@@ -60,11 +60,9 @@ void ComponentManager::delete_components() {
// Determine the type of T (this is used as the key of the unordered_map<>)
std::type_index type = typeid(T);
- // Find the type (in the unordered_map<>)
- if (components.find(type) != components.end()) {
- // Clear the whole vector<> of this specific type
- components[type].clear();
- }
+ if (components.find(type) == components.end()) return;
+
+ components[type].clear();
}
template <typename T>
@@ -78,30 +76,25 @@ ComponentManager::get_components_by_id(uint32_t id) const {
// Create an empty vector<>
vector<reference_wrapper<T>> component_vector;
- // Find the type (in the unordered_map<>)
- if (components.find(type) != components.end()) {
- // Get the correct vector<>
- const vector<vector<unique_ptr<Component>>> & component_array
- = components.at(type);
+ if (components.find(type) == components.end()) return component_vector;
- // Make sure that the id (that we are looking for) is within the boundaries of the vector<>
- if (id < component_array.size()) {
- // Loop trough the whole vector<>
- for (const unique_ptr<Component> & component_ptr :
- component_array[id]) {
- // Cast the unique_ptr to a raw pointer
- T * casted_component = static_cast<T *>(component_ptr.get());
-
- // Ensure that the cast was successful
- if (casted_component) {
- // Add the dereferenced raw pointer to the vector<>
- component_vector.push_back(*casted_component);
- }
- }
- }
+ // Get the correct vector<>
+ const vector<vector<unique_ptr<Component>>> & component_array = components.at(type);
+
+ // Make sure that the id (that we are looking for) is within the boundaries of the vector<>
+ if (id >= component_array.size()) return component_vector;
+
+ // Loop trough the whole vector<>
+ for (const unique_ptr<Component> & component_ptr : component_array[id]) {
+ // Cast the unique_ptr to a raw pointer
+ T * casted_component = static_cast<T *>(component_ptr.get());
+
+ if (casted_component == nullptr) continue;
+
+ // Add the dereferenced raw pointer to the vector<>
+ component_vector.push_back(*casted_component);
}
- // Return the vector<>
return component_vector;
}
@@ -119,30 +112,27 @@ ComponentManager::get_components_by_type() const {
// uint32_t id = 0;
// Find the type (in the unordered_map<>)
- if (components.find(type) != components.end()) {
+ if (components.find(type) == components.end()) return component_vector;
- // Get the correct vector<>
- const vector<vector<unique_ptr<Component>>> & component_array
- = components.at(type);
-
- // Loop through the whole vector<>
- for (const vector<unique_ptr<Component>> & component :
- component_array) {
- // Loop trough the whole vector<>
- for (const unique_ptr<Component> & component_ptr : component) {
- // Cast the unique_ptr to a raw pointer
- T * casted_component = static_cast<T *>(component_ptr.get());
-
- // Ensure that the cast was successful
- if (casted_component) {
- // Pair the dereferenced raw pointer and the id and add it to the vector<>
- component_vector.emplace_back(ref(*casted_component));
- }
- }
-
- // Increase the id (the id will also be stored in the returned vector<>)
- //++id;
+ // Get the correct vector<>
+ const vector<vector<unique_ptr<Component>>> & component_array = components.at(type);
+
+ // Loop through the whole vector<>
+ for (const vector<unique_ptr<Component>> & component : component_array) {
+ // Loop trough the whole vector<>
+ for (const unique_ptr<Component> & component_ptr : component) {
+ // Cast the unique_ptr to a raw pointer
+ T * casted_component = static_cast<T *>(component_ptr.get());
+
+ // Ensure that the cast was successful
+ if (casted_component == nullptr) continue;
+
+ // Pair the dereferenced raw pointer and the id and add it to the vector<>
+ component_vector.emplace_back(ref(*casted_component));
}
+
+ // Increase the id (the id will also be stored in the returned vector<>)
+ //++id;
}
// Return the vector<>
diff --git a/src/crepe/api/BehaviorScript.h b/src/crepe/api/BehaviorScript.h
index e9542c1..ba60a8c 100644
--- a/src/crepe/api/BehaviorScript.h
+++ b/src/crepe/api/BehaviorScript.h
@@ -6,11 +6,14 @@
namespace crepe::api {
class BehaviorScript : public Script, public Component {
+protected:
// only allow ComponentManager to instantiate scripts
friend class ComponentManager;
-
-protected:
BehaviorScript();
+public:
+ // but allow uniqe_ptr to call the destructor (THIS IS VERY IMPORTANT)
+ virtual ~BehaviorScript() = default;
+
};
}
diff --git a/src/crepe/util/log.h b/src/crepe/util/log.h
index 2b0fbe1..fa5f633 100644
--- a/src/crepe/util/log.h
+++ b/src/crepe/util/log.h
@@ -15,7 +15,7 @@
// very illegal global function-style macros
// NOLINTBEGIN
#define dbg_logf(fmt, ...) _crepe_logf_here(": " fmt, __VA_ARGS__)
-#define dbg_log(str) _crepe_logf_here(": %s", str)
+#define dbg_log(str) _crepe_logf_here("%s: " str, "")
#define dbg_trace() _crepe_logf_here("%s", "")
// NOLINTEND