From 47758f20d1d5c6653e9fe37f3c2e085f39c6a8e2 Mon Sep 17 00:00:00 2001 From: cosmonaut Date: Mon, 16 May 2022 18:12:42 -0700 Subject: [PATCH] iterate indexable set backwards in case of destruction --- src/IndexableSet.cs | 4 ++-- src/System.cs | 1 + 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/IndexableSet.cs b/src/IndexableSet.cs index 275044a..ea54652 100644 --- a/src/IndexableSet.cs +++ b/src/IndexableSet.cs @@ -66,7 +66,7 @@ namespace MoonTools.ECS public IEnumerator GetEnumerator() { - for (var i = 0; i < Count; i += 1) + for (var i = Count - 1; i >= 0; i -= 1) { yield return array[i]; } @@ -74,7 +74,7 @@ namespace MoonTools.ECS IEnumerator IEnumerable.GetEnumerator() { - for (var i = 0; i < Count; i += 1) + for (var i = Count - 1; i >= 0; i -= 1) { yield return array[i]; } diff --git a/src/System.cs b/src/System.cs index a2749a8..1fd33d4 100644 --- a/src/System.cs +++ b/src/System.cs @@ -78,6 +78,7 @@ namespace MoonTools.ECS RelationDepot.Remove(new Relation(entityA, entityB)); } + // FIXME: this is insanely inefficient protected void Destroy(in Entity entity) { ComponentDepot.OnEntityDestroy(entity.ID);