From e6059a2f0a762b46b448929da8613624e2bf7c54 Mon Sep 17 00:00:00 2001 From: cosmonaut Date: Fri, 3 Nov 2023 17:47:17 -0700 Subject: [PATCH] misc fixes --- src/Filter.cs | 17 +++++++++++++---- src/World.cs | 12 ++++++++++-- 2 files changed, 23 insertions(+), 6 deletions(-) diff --git a/src/Filter.cs b/src/Filter.cs index 3d51524..7d42bac 100644 --- a/src/Filter.cs +++ b/src/Filter.cs @@ -132,12 +132,21 @@ public class Filter // breadth-first search // ignore excluded component edges - foreach (var (componentId, edge) in current.AddEdges) + foreach (var (componentId, archetype) in current.AddEdges) { - if (!filter.Excluded.Contains(componentId)) + if (!Explored.Contains(archetype) && !filter.Excluded.Contains(componentId)) { - Explored.Add(edge); - ArchetypeSearchQueue.Enqueue(edge); + Explored.Add(archetype); + ArchetypeSearchQueue.Enqueue(archetype); + } + } + + foreach (var (componentId, archetype) in current.RemoveEdges) + { + if (!Explored.Contains(archetype)) + { + Explored.Add(archetype); + ArchetypeSearchQueue.Enqueue(archetype); } } } diff --git a/src/World.cs b/src/World.cs index b82ee8f..7948022 100644 --- a/src/World.cs +++ b/src/World.cs @@ -220,7 +220,11 @@ namespace MoonTools.ECS } archetype.AddEdges.Add(componentTypeId, nextArchetype); - nextArchetype.RemoveEdges.Add(componentTypeId, archetype); + + if (!nextArchetype.RemoveEdges.ContainsKey(componentTypeId)) + { + nextArchetype.RemoveEdges.Add(componentTypeId, archetype); + } return nextArchetype; } @@ -246,7 +250,11 @@ namespace MoonTools.ECS } archetype.RemoveEdges.Add(componentTypeId, nextArchetype); - nextArchetype.AddEdges.Add(componentTypeId, archetype); + + if (!nextArchetype.AddEdges.ContainsKey(componentTypeId)) + { + nextArchetype.AddEdges.Add(componentTypeId, archetype); + } return nextArchetype; }