From 05fa578652361790e954708390f7a2f15b49484a Mon Sep 17 00:00:00 2001 From: Evan Hemsley Date: Sat, 28 Dec 2019 16:16:21 -0800 Subject: [PATCH] untrack destroyed entities --- encompass-cs/Engine.cs | 5 +++++ encompass-cs/EntityManager.cs | 3 ++- encompass-cs/TrackingManager.cs | 2 -- encompass-cs/World.cs | 2 +- encompass-cs/WorldBuilder.cs | 4 ++-- 5 files changed, 10 insertions(+), 6 deletions(-) diff --git a/encompass-cs/Engine.cs b/encompass-cs/Engine.cs index c37a54a..58bf6bb 100644 --- a/encompass-cs/Engine.cs +++ b/encompass-cs/Engine.cs @@ -718,5 +718,10 @@ namespace Encompass withMask.Not() ); } + + internal void RegisterDestroyedEntity(Entity entity) + { + _trackedEntities.Remove(entity); + } } } diff --git a/encompass-cs/EntityManager.cs b/encompass-cs/EntityManager.cs index 77a85c0..f80e5cc 100644 --- a/encompass-cs/EntityManager.cs +++ b/encompass-cs/EntityManager.cs @@ -64,10 +64,11 @@ namespace Encompass entitiesMarkedForDestroy.Add(entity); } - public void DestroyMarkedEntities() + public void DestroyMarkedEntities(IEnumerable engines) { foreach (var entity in entitiesMarkedForDestroy) { + foreach (var engine in engines) { engine.RegisterDestroyedEntity(entity); } componentManager.MarkAllComponentsOnEntityForRemoval(entity); IDs.Remove(entity.ID); idManager.Free(entity.ID); diff --git a/encompass-cs/TrackingManager.cs b/encompass-cs/TrackingManager.cs index 1651719..61600e4 100644 --- a/encompass-cs/TrackingManager.cs +++ b/encompass-cs/TrackingManager.cs @@ -70,7 +70,6 @@ namespace Encompass foreach (var engine in _componentTypesToEngines[componentType]) { _pairsToCheck.Add((entity, engine)); - // engine.CheckTrackEntity(entity); } } } @@ -83,7 +82,6 @@ namespace Encompass foreach (var engine in _componentTypesToEngines[componentType]) { _pairsToCheck.Add((entity, engine)); - //engine.CheckUntrackEntity(entity); } } } diff --git a/encompass-cs/World.cs b/encompass-cs/World.cs index 0e3707b..a97ffe4 100644 --- a/encompass-cs/World.cs +++ b/encompass-cs/World.cs @@ -60,7 +60,7 @@ namespace Encompass } messageManager.ClearMessages(); - entityManager.DestroyMarkedEntities(); + entityManager.DestroyMarkedEntities(enginesInOrder); componentManager.WriteComponents(); componentManager.RemoveMarkedComponents(); diff --git a/encompass-cs/WorldBuilder.cs b/encompass-cs/WorldBuilder.cs index ec31c39..d85ed87 100644 --- a/encompass-cs/WorldBuilder.cs +++ b/encompass-cs/WorldBuilder.cs @@ -48,12 +48,12 @@ namespace Encompass this.entityCapacity = entityCapacity; drawLayerManager = new DrawLayerManager(typeToIndex); timeManager = new TimeManager(); + trackingManager = new TrackingManager(); componentUpdateManager = new ComponentUpdateManager(typeToIndex); componentManager = new ComponentManager(drawLayerManager, componentUpdateManager, typeToIndex); messageManager = new MessageManager(timeManager); entityManager = new EntityManager(componentManager, entityCapacity); renderManager = new RenderManager(entityManager, drawLayerManager); - trackingManager = new TrackingManager(); startingComponentStoreForComponentManager = new ComponentStore(typeToIndex); startingComponentStoreForComponentUpdateManager = new ComponentStore(typeToIndex); @@ -419,9 +419,9 @@ namespace Encompass var dummyTimeManager = new TimeManager(); var dummyMessageManager = new MessageManager(dummyTimeManager); var dummyDrawLayerManager = new DrawLayerManager(typeToIndex); + var dummyTrackingManager = new TrackingManager(); var dummyComponentUpdateManager = new ComponentUpdateManager(typeToIndex); var dummyComponentManager = new ComponentManager(dummyDrawLayerManager, dummyComponentUpdateManager, typeToIndex); - var dummyTrackingManager = new TrackingManager(); var dummyEntityManager = new EntityManager(dummyComponentManager, entityCapacity); var dummyRenderManager = new RenderManager(dummyEntityManager, dummyDrawLayerManager);