summaryrefslogtreecommitdiff
path: root/ecs/src/component
diff options
context:
space:
mode:
authorHampusM <hampus@hampusmat.com>2024-06-16 19:30:27 +0200
committerHampusM <hampus@hampusmat.com>2024-06-16 19:51:59 +0200
commit61ce6ce0a603384b07ede2d149f6ec0542a2d03e (patch)
tree4786c775787e7fa493b7918599056c8c566981f9 /ecs/src/component
parenta7c9b0a9dfe5051a60763e123df47f4c16052e32 (diff)
fix(ecs): update archetype lookups when entity is spawned with Actions
Diffstat (limited to 'ecs/src/component')
-rw-r--r--ecs/src/component/storage.rs12
1 files changed, 7 insertions, 5 deletions
diff --git a/ecs/src/component/storage.rs b/ecs/src/component/storage.rs
index 237dd73..86f28fc 100644
--- a/ecs/src/component/storage.rs
+++ b/ecs/src/component/storage.rs
@@ -131,9 +131,13 @@ impl ComponentStorage
pub fn make_archetype_lookup_entries(&mut self)
{
- for pending_entry in &self.pending_archetype_lookup_entries {
+ // TODO: Re-doing the whole archetype lookup table is dumb and slow. Only re-do
+ // the archetype lookup entries that need to be changed
+ self.archetype_lookup.clear();
+
+ for pending_entry in self.pending_archetype_lookup_entries.drain(..) {
let components_set: HashSet<_> = pending_entry
- .into_iter()
+ .iter()
.map(|component_id| *component_id)
.collect();
@@ -151,9 +155,7 @@ impl ComponentStorage
let archetype_indices = self
.archetype_lookup
- .entry(ArchetypeComponentsHash::new(
- pending_entry.into_iter().copied().clone(),
- ))
+ .entry(ArchetypeComponentsHash::new(pending_entry.into_iter()))
.or_default();
archetype_indices.extend(matching_archetype_indices);