diff options
Diffstat (limited to 'src/entity_manager.h')
-rw-r--r-- | src/entity_manager.h | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/src/entity_manager.h b/src/entity_manager.h index 65fa6ca..1e8d31c 100644 --- a/src/entity_manager.h +++ b/src/entity_manager.h | |||
@@ -26,6 +26,7 @@ private: | |||
26 | 26 | ||
27 | database_type entities; | 27 | database_type entities; |
28 | std::vector<bool> slotAvailable; | 28 | std::vector<bool> slotAvailable; |
29 | std::set<id_type> allEntities; | ||
29 | std::map<std::set<std::type_index>, std::set<id_type>> cachedComponents; | 30 | std::map<std::set<std::type_index>, std::set<id_type>> cachedComponents; |
30 | 31 | ||
31 | id_type nextEntityID = 0; | 32 | id_type nextEntityID = 0; |
@@ -59,12 +60,14 @@ public: | |||
59 | // If the database is saturated, add a new element for the new entity. | 60 | // If the database is saturated, add a new element for the new entity. |
60 | entities.emplace_back(); | 61 | entities.emplace_back(); |
61 | slotAvailable.push_back(false); | 62 | slotAvailable.push_back(false); |
63 | allEntities.insert(nextEntityID); | ||
62 | 64 | ||
63 | return nextEntityID++; | 65 | return nextEntityID++; |
64 | } else { | 66 | } else { |
65 | // If there is an available slot in the database, use it. | 67 | // If there is an available slot in the database, use it. |
66 | id_type id = nextEntityID++; | 68 | id_type id = nextEntityID++; |
67 | slotAvailable[id] = false; | 69 | slotAvailable[id] = false; |
70 | allEntities.insert(id); | ||
68 | 71 | ||
69 | // Fast forward the next available slot pointer to an available slot. | 72 | // Fast forward the next available slot pointer to an available slot. |
70 | while ((nextEntityID < entities.size()) && !slotAvailable[nextEntityID]) | 73 | while ((nextEntityID < entities.size()) && !slotAvailable[nextEntityID]) |
@@ -89,6 +92,8 @@ public: | |||
89 | cache.second.erase(entity); | 92 | cache.second.erase(entity); |
90 | } | 93 | } |
91 | 94 | ||
95 | allEntities.erase(entity); | ||
96 | |||
92 | // Destroy the data | 97 | // Destroy the data |
93 | entities[entity].components.clear(); | 98 | entities[entity].components.clear(); |
94 | 99 | ||
@@ -202,6 +207,11 @@ public: | |||
202 | 207 | ||
203 | return getEntitiesWithComponentsHelper<R...>(componentTypes); | 208 | return getEntitiesWithComponentsHelper<R...>(componentTypes); |
204 | } | 209 | } |
210 | |||
211 | const std::set<id_type>& getEntities() const | ||
212 | { | ||
213 | return allEntities; | ||
214 | } | ||
205 | }; | 215 | }; |
206 | 216 | ||
207 | template <> | 217 | template <> |