From 57474f1c6397972dfd1b1b89019a82b8df606dd9 Mon Sep 17 00:00:00 2001 From: cosmonaut Date: Sun, 6 Mar 2022 22:43:53 -0800 Subject: [PATCH] correctly update filters on entity destroy --- src/ComponentDepot.cs | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/src/ComponentDepot.cs b/src/ComponentDepot.cs index 9ab499c..cfe0e65 100644 --- a/src/ComponentDepot.cs +++ b/src/ComponentDepot.cs @@ -80,6 +80,25 @@ internal class ComponentDepot return Lookup().AllComponents(); } + private void Remove(Type type, int entityID) + { + Lookup(type).Remove(entityID); + + var found = entityComponentMap[entityID].Remove(type); + + // update filters + if (found) + { + if (typeToFilterSignatures.TryGetValue(type, out var filterSignatures)) + { + foreach (var filterSignature in filterSignatures) + { + CheckFilter(filterSignature, entityID); + } + } + } + } + public void Remove(int entityID) where TComponent : struct { Lookup().Remove(entityID); @@ -105,7 +124,7 @@ internal class ComponentDepot { foreach (var type in entityComponentMap[entityID]) { - storages[type].Remove(entityID); + Remove(type, entityID); } entityComponentMap.Remove(entityID);