From f7095ffdfb9b3297c9ba8b2631d6f8a582b9b431 Mon Sep 17 00:00:00 2001 From: Evan Hemsley <2342303+ehemsley@users.noreply.github.com> Date: Sun, 29 Dec 2019 13:24:51 -0800 Subject: [PATCH] refactor to remove ComponentUpdateManager --- encompass-cs/ComponentManager.cs | 180 +++++++++++++++++++---- encompass-cs/ComponentUpdateManager.cs | 189 ------------------------- encompass-cs/Engine.cs | 68 ++++----- encompass-cs/Renderer.cs | 2 +- encompass-cs/World.cs | 7 +- encompass-cs/WorldBuilder.cs | 20 +-- 6 files changed, 189 insertions(+), 277 deletions(-) delete mode 100644 encompass-cs/ComponentUpdateManager.cs diff --git a/encompass-cs/ComponentManager.cs b/encompass-cs/ComponentManager.cs index 47935bc..e407408 100644 --- a/encompass-cs/ComponentManager.cs +++ b/encompass-cs/ComponentManager.cs @@ -6,28 +6,37 @@ namespace Encompass internal class ComponentManager { private readonly DrawLayerManager drawLayerManager; - private readonly ComponentUpdateManager componentUpdateManager; - private readonly ComponentStore componentStore; + private readonly ComponentStore existingComponentStore; + private readonly ComponentStore immediateComponentStore; + private ComponentStore upToDateComponentStore; + + public Dictionary TypeToIndex { get; } + private readonly HashSet entitiesMarkedForRemoval = new HashSet(); - internal ComponentBitSet ComponentBitSet { get { return componentStore.ComponentBitSet; } } + internal ComponentBitSet ImmediateBits { get { return immediateComponentStore.ComponentBitSet; } } + internal ComponentBitSet ExistingBits { get { return existingComponentStore.ComponentBitSet; } } - public ComponentManager(DrawLayerManager drawLayerManager, ComponentUpdateManager componentUpdateManager, Dictionary typeToIndex) + public ComponentManager(DrawLayerManager drawLayerManager, Dictionary typeToIndex) { this.drawLayerManager = drawLayerManager; - this.componentUpdateManager = componentUpdateManager; - componentStore = new ComponentStore(typeToIndex); + existingComponentStore = new ComponentStore(typeToIndex); + immediateComponentStore = new ComponentStore(typeToIndex); + upToDateComponentStore = new ComponentStore(typeToIndex); + TypeToIndex = typeToIndex; } public void RegisterComponentType() where TComponent : struct, IComponent { - componentStore.RegisterComponentType(); + existingComponentStore.RegisterComponentType(); + immediateComponentStore.RegisterComponentType(); + upToDateComponentStore.RegisterComponentType(); } internal void SetComponentStore(ComponentStore componentStore) { - this.componentStore.SwapWith(componentStore); + existingComponentStore.SwapWith(componentStore); } internal void RegisterDrawableComponent(Entity entity, TComponent component, int layer) where TComponent : struct, IComponent @@ -35,24 +44,146 @@ namespace Encompass drawLayerManager.RegisterComponentWithLayer(entity.ID, component, layer); } - internal void AddComponent(Entity entity, TComponent component) where TComponent : struct, IComponent - { - componentStore.Set(entity.ID, component); - } - internal void WriteComponents() { - componentStore.SwapWith(componentUpdateManager.UpToDateComponentStore); + SetComponentStore(upToDateComponentStore); + upToDateComponentStore.ClearAll(); + immediateComponentStore.ClearAll(); + } + + internal void AddExistingComponent(Entity entity, TComponent component) where TComponent : struct, IComponent + { + upToDateComponentStore.Set(entity.ID, component); + } + + internal bool AddImmediateComponent(Entity entity, TComponent component, int priority) where TComponent : struct, IComponent + { + if (immediateComponentStore.Set(entity.ID, component, priority)) + { + upToDateComponentStore.Set(entity.ID, component); + return true; + } + + return false; + } + + public bool UpdateComponent(Entity entity, TComponent component, int priority) where TComponent : struct, IComponent + { + return upToDateComponentStore.Set(entity.ID, component, priority); + } + + // existing or immediate reads + + internal IEnumerable<(TComponent, int)> ReadExistingAndImmediateComponentsByType() where TComponent : struct, IComponent + { + return upToDateComponentStore.All(); + } + + internal (TComponent, int) ReadFirstExistingOrImmediateComponentByType() where TComponent : struct, IComponent + { + if (!SomeExistingOrImmediateComponent()) { throw new Exceptions.NoComponentOfTypeException($"No Component with type {typeof(TComponent)} exists"); } + var enumerator = ReadExistingAndImmediateComponentsByType().GetEnumerator(); + enumerator.MoveNext(); + return enumerator.Current; + } + + internal bool SomeExistingOrImmediateComponent() where TComponent : struct, IComponent + { + return upToDateComponentStore.Any(); + } + + // existing reads + + internal (TComponent, int) ReadFirstExistingComponentByType() where TComponent : struct, IComponent + { + if (!SomeExistingComponent()) { throw new Exceptions.NoComponentOfTypeException($"No Component with type {typeof(TComponent)} exists"); } + var enumerator = GetComponentsIncludingEntity().GetEnumerator(); + enumerator.MoveNext(); + return enumerator.Current; + } + + internal bool SomeExistingComponent() where TComponent : struct, IComponent + { + return existingComponentStore.Any(); + } + + // immediate reads + + internal IEnumerable<(TComponent, int)> ReadImmediateComponentsByType() where TComponent : struct, IComponent + { + return immediateComponentStore.All(); + } + + internal (TComponent, int) ReadFirstImmediateComponentByType() where TComponent : struct, IComponent + { + if (!SomeImmediateComponent()) { throw new Exceptions.NoComponentOfTypeException($"No Component with type {typeof(TComponent)} exists"); } + var enumerator = ReadImmediateComponentsByType().GetEnumerator(); + enumerator.MoveNext(); + return enumerator.Current; + } + + internal bool SomeImmediateComponent() where TComponent : struct, IComponent + { + return immediateComponentStore.Any(); + } + + // component getters + + internal TComponent ReadImmediateOrExistingComponentByEntityAndType(Entity entity) where TComponent : struct, IComponent + { + return upToDateComponentStore.Get(entity.ID); + } + + internal TComponent ReadExistingComponentByEntityAndType(Entity entity) where TComponent : struct, IComponent + { + return existingComponentStore.Get(entity.ID); + } + + internal TComponent ReadImmediateComponentByEntityAndType(Entity entity) where TComponent : struct, IComponent + { + return immediateComponentStore.Get(entity.ID); + } + + // has checkers + + internal bool HasExistingOrImmediateComponent(Entity entity) where TComponent : struct, IComponent + { + return upToDateComponentStore.Has(entity.ID); + } + + internal bool HasExistingOrImmediateComponent(Entity entity, Type type) + { + return upToDateComponentStore.Has(type, entity.ID); + } + + internal bool HasExistingComponent(Entity entity) where TComponent : struct, IComponent + { + return existingComponentStore.Has(entity.ID); + } + + internal bool HasExistingComponent(Entity entity, Type type) + { + return existingComponentStore.Has(type, entity.ID); + } + + internal bool HasImmediateComponent(Entity entity) where TComponent : struct, IComponent + { + return immediateComponentStore.Has(entity.ID); + } + + internal bool HasImmediateComponent(Entity entity, Type type) + { + return immediateComponentStore.Has(type, entity.ID); } internal IEnumerable<(TComponent, int)> GetComponentsIncludingEntity() where TComponent : struct, IComponent { - return componentStore.All(); + return existingComponentStore.All(); } internal IEnumerable GetComponentsByType() where TComponent : struct, IComponent { - foreach (var pair in componentStore.All()) + foreach (var pair in existingComponentStore.All()) { yield return pair.Item1; } @@ -60,17 +191,12 @@ namespace Encompass internal TComponent GetComponentByEntityAndType(Entity entity) where TComponent : struct, IComponent { - return componentStore.Get(entity.ID); + return existingComponentStore.Get(entity.ID); } internal bool EntityHasComponentOfType(Entity entity) where TComponent : struct, IComponent { - return componentStore.Has(entity.ID); - } - - internal bool ComponentOfTypeExists() where TComponent : struct, IComponent - { - return componentStore.Any(); + return existingComponentStore.Has(entity.ID); } internal void MarkAllComponentsOnEntityForRemoval(Entity entity) @@ -82,7 +208,8 @@ namespace Encompass { foreach (var entityID in entitiesMarkedForRemoval) { - componentStore.Remove(entityID); + existingComponentStore.Remove(entityID); + upToDateComponentStore.Remove(entityID); drawLayerManager.UnRegisterEntityWithLayer(entityID); } @@ -91,8 +218,9 @@ namespace Encompass public bool RemoveImmediate(Entity entity, int priority) where TComponent : struct, IComponent { - if (componentUpdateManager.RemoveImmediate(entity, priority)) + if (immediateComponentStore.Remove(entity.ID, priority)) { + upToDateComponentStore.Remove(entity.ID, priority); drawLayerManager.UnRegisterComponentWithLayer(entity.ID); return true; } @@ -101,7 +229,7 @@ namespace Encompass public void Remove(Entity entity, int priority) where TComponent : struct, IComponent { - if (componentUpdateManager.Remove(entity, priority)) + if (upToDateComponentStore.Remove(entity.ID, priority)) { drawLayerManager.UnRegisterComponentWithLayer(entity.ID); } diff --git a/encompass-cs/ComponentUpdateManager.cs b/encompass-cs/ComponentUpdateManager.cs deleted file mode 100644 index dc6c30d..0000000 --- a/encompass-cs/ComponentUpdateManager.cs +++ /dev/null @@ -1,189 +0,0 @@ -using System; -using System.Collections.Generic; - -namespace Encompass -{ - internal class ComponentUpdateManager - { - private ComponentStore existingComponentStore; - private readonly ComponentStore immediateComponentStore; - public ComponentStore UpToDateComponentStore { get; private set; } - - public Dictionary TypeToIndex { get; } - - public ComponentUpdateManager(Dictionary typeToIndex) - { - existingComponentStore = new ComponentStore(typeToIndex); - immediateComponentStore = new ComponentStore(typeToIndex); - UpToDateComponentStore = new ComponentStore(typeToIndex); - TypeToIndex = typeToIndex; - } - - public void RegisterComponentType() where TComponent : struct, IComponent - { - existingComponentStore.RegisterComponentType(); - immediateComponentStore.RegisterComponentType(); - UpToDateComponentStore.RegisterComponentType(); - } - - internal void Clear() - { - existingComponentStore.ClearAll(); - immediateComponentStore.ClearAll(); - } - - internal void SetStartingComponentStore(ComponentStore componentStore) - { - UpToDateComponentStore = componentStore; - } - - internal void AddExistingComponent(Entity entity, TComponent component) where TComponent : struct, IComponent - { - existingComponentStore.Set(entity.ID, component); - } - - internal bool AddImmediateComponent(Entity entity, TComponent component, int priority) where TComponent : struct, IComponent - { - if (immediateComponentStore.Set(entity.ID, component, priority)) - { - UpToDateComponentStore.Set(entity.ID, component); - return true; - } - - return false; - } - - internal bool RemoveImmediate(Entity entity, int priority) where TComponent : struct, IComponent - { - if (immediateComponentStore.Remove(entity.ID, priority)) - { - UpToDateComponentStore.Remove(entity.ID, priority); - return true; - } - - return false; - } - - internal bool Remove(Entity entity, int priority) where TComponent : struct, IComponent - { - return UpToDateComponentStore.Remove(entity.ID, priority); - } - - public bool UpdateComponent(Entity entity, TComponent component, int priority) where TComponent : struct, IComponent - { - return UpToDateComponentStore.Set(entity.ID, component, priority); - } - - // general component reads by type - - internal IEnumerable<(TComponent, int)> ReadExistingAndImmediateComponentsByType() where TComponent : struct, IComponent - { - return UpToDateComponentStore.All(); - } - - internal IEnumerable<(TComponent, int)> ReadExistingComponentsByType() where TComponent : struct, IComponent - { - return existingComponentStore.All(); - } - - internal IEnumerable<(TComponent, int)> ReadImmediateComponentsByType() where TComponent : struct, IComponent - { - return immediateComponentStore.All(); - } - - // singular component reads by type - - internal (TComponent, int) ReadFirstExistingOrImmediateComponentByType() where TComponent : struct, IComponent - { - if (!SomeExistingOrImmediateComponent()) { throw new Exceptions.NoComponentOfTypeException($"No Component with type {typeof(TComponent)} exists"); } - var enumerator = ReadExistingAndImmediateComponentsByType().GetEnumerator(); - enumerator.MoveNext(); - return enumerator.Current; - } - - internal (TComponent, int) ReadFirstExistingComponentByType() where TComponent : struct, IComponent - { - if (!SomeExistingComponent()) { throw new Exceptions.NoComponentOfTypeException($"No Component with type {typeof(TComponent)} exists"); } - var enumerator = ReadExistingComponentsByType().GetEnumerator(); - enumerator.MoveNext(); - return enumerator.Current; - } - - internal (TComponent, int) ReadFirstImmediateComponentByType() where TComponent : struct, IComponent - { - if (!SomeImmediateComponent()) { throw new Exceptions.NoComponentOfTypeException($"No Component with type {typeof(TComponent)} exists"); } - var enumerator = ReadImmediateComponentsByType().GetEnumerator(); - enumerator.MoveNext(); - return enumerator.Current; - } - - // check if some component of type exists in the world - - internal bool SomeExistingOrImmediateComponent() where TComponent : struct, IComponent - { - return UpToDateComponentStore.Any(); - } - - internal bool SomeExistingComponent() where TComponent : struct, IComponent - { - return existingComponentStore.Any(); - } - - internal bool SomeImmediateComponent() where TComponent : struct, IComponent - { - return immediateComponentStore.Any(); - } - - // read components by entity and type - - internal TComponent ReadImmediateOrExistingComponentByEntityAndType(Entity entity) where TComponent : struct, IComponent - { - return UpToDateComponentStore.Get(entity.ID); - } - - internal TComponent ReadExistingComponentByEntityAndType(Entity entity) where TComponent : struct, IComponent - { - return existingComponentStore.Get(entity.ID); - } - - internal TComponent ReadImmediateComponentByEntityAndType(Entity entity) where TComponent : struct, IComponent - { - return immediateComponentStore.Get(entity.ID); - } - - // check if entity has component of type - - internal bool HasExistingOrImmediateComponent(Entity entity) where TComponent : struct, IComponent - { - return UpToDateComponentStore.Has(entity.ID); - } - - internal bool HasExistingOrImmediateComponent(Entity entity, Type type) - { - return UpToDateComponentStore.Has(type, entity.ID); - } - - internal bool HasExistingComponent(Entity entity) where TComponent : struct, IComponent - { - return existingComponentStore.Has(entity.ID); - } - - internal bool HasExistingComponent(Entity entity, Type type) - { - return existingComponentStore.Has(type, entity.ID); - } - - internal bool HasImmediateComponent(Entity entity) where TComponent : struct, IComponent - { - return immediateComponentStore.Has(entity.ID); - } - - internal bool HasImmediateComponent(Entity entity, Type type) - { - return immediateComponentStore.Has(type, entity.ID); - } - - internal ComponentBitSet ImmediateBits { get { return immediateComponentStore.ComponentBitSet; } } - internal ComponentBitSet ExistingBits { get { return existingComponentStore.ComponentBitSet; } } - } -} diff --git a/encompass-cs/Engine.cs b/encompass-cs/Engine.cs index c748cea..356394c 100644 --- a/encompass-cs/Engine.cs +++ b/encompass-cs/Engine.cs @@ -36,7 +36,6 @@ namespace Encompass private EntityManager entityManager; private MessageManager messageManager; private ComponentManager componentManager; - private ComponentUpdateManager componentUpdateManager; private TimeManager timeManager; private TrackingManager trackingManager; @@ -140,11 +139,6 @@ namespace Encompass this.messageManager = messageManager; } - internal void AssignComponentUpdateManager(ComponentUpdateManager componentUpdateManager) - { - this.componentUpdateManager = componentUpdateManager; - } - internal void AssignTimeManager(TimeManager timeManager) { this.timeManager = timeManager; @@ -209,15 +203,15 @@ namespace Encompass var existingRead = readTypes.Contains(typeof(TComponent)); if (existingRead && immediateRead) { - return componentUpdateManager.ReadExistingAndImmediateComponentsByType(); + return componentManager.ReadExistingAndImmediateComponentsByType(); } else if (existingRead) { - return componentUpdateManager.ReadExistingComponentsByType(); + return componentManager.GetComponentsIncludingEntity(); } else if (immediateRead) { - return componentUpdateManager.ReadImmediateComponentsByType(); + return componentManager.ReadImmediateComponentsByType(); } else { @@ -261,15 +255,15 @@ namespace Encompass var existingRead = readTypes.Contains(typeof(TComponent)); if (existingRead && immediateRead) { - return componentUpdateManager.ReadFirstExistingOrImmediateComponentByType(); + return componentManager.ReadFirstExistingOrImmediateComponentByType(); } else if (existingRead) { - return componentUpdateManager.ReadFirstExistingComponentByType(); + return componentManager.ReadFirstExistingComponentByType(); } else if (immediateRead) { - return componentUpdateManager.ReadFirstImmediateComponentByType(); + return componentManager.ReadFirstImmediateComponentByType(); } else { @@ -303,15 +297,15 @@ namespace Encompass var existingRead = readTypes.Contains(typeof(TComponent)); if (existingRead && immediateRead) { - return componentUpdateManager.SomeExistingOrImmediateComponent(); + return componentManager.SomeExistingOrImmediateComponent(); } else if (existingRead) { - return componentUpdateManager.SomeExistingComponent(); + return componentManager.SomeExistingComponent(); } else if (immediateRead) { - return componentUpdateManager.SomeImmediateComponent(); + return componentManager.SomeImmediateComponent(); } else { @@ -325,15 +319,15 @@ namespace Encompass var existingRead = readTypes.Contains(typeof(TComponent)); if (existingRead && immediateRead) { - return componentUpdateManager.ReadImmediateOrExistingComponentByEntityAndType(entity); + return componentManager.ReadImmediateOrExistingComponentByEntityAndType(entity); } else if (existingRead) { - return componentUpdateManager.ReadExistingComponentByEntityAndType(entity); + return componentManager.ReadExistingComponentByEntityAndType(entity); } else if (immediateRead) { - return componentUpdateManager.ReadImmediateComponentByEntityAndType(entity); + return componentManager.ReadImmediateComponentByEntityAndType(entity); } else { @@ -368,15 +362,15 @@ namespace Encompass if (immediateRead && existingRead) { - return componentUpdateManager.HasExistingOrImmediateComponent(entity); + return componentManager.HasExistingOrImmediateComponent(entity); } else if (existingRead) { - return componentUpdateManager.HasExistingComponent(entity); + return componentManager.HasExistingComponent(entity); } else if (immediateRead) { - return componentUpdateManager.HasImmediateComponent(entity); + return componentManager.HasImmediateComponent(entity); } else { @@ -397,15 +391,15 @@ namespace Encompass if (immediateRead && existingRead) { - return componentUpdateManager.HasExistingOrImmediateComponent(entity, type); + return componentManager.HasExistingOrImmediateComponent(entity, type); } else if (existingRead) { - return componentUpdateManager.HasExistingComponent(entity, type); + return componentManager.HasExistingComponent(entity, type); } else if (immediateRead) { - return componentUpdateManager.HasImmediateComponent(entity, type); + return componentManager.HasImmediateComponent(entity, type); } else { @@ -431,7 +425,7 @@ namespace Encompass bool written; if (writeImmediateTypes.Contains(typeof(TComponent))) { - written = componentUpdateManager.AddImmediateComponent(entity, component, priority); + written = componentManager.AddImmediateComponent(entity, component, priority); if (written) { trackingManager.ImmediateUpdateTracking(entity, typeof(TComponent)); @@ -439,10 +433,10 @@ namespace Encompass } else { - written = componentUpdateManager.UpdateComponent(entity, component, priority); + written = componentManager.UpdateComponent(entity, component, priority); } - if (!componentUpdateManager.HasExistingComponent(entity)) + if (!componentManager.HasExistingComponent(entity)) { trackingManager.RegisterAddition(entity, typeof(TComponent)); } @@ -489,7 +483,7 @@ namespace Encompass internal void AddExistingComponent(Entity entity, TComponent component) where TComponent : struct, IComponent { - componentUpdateManager.AddExistingComponent(entity, component); + componentManager.AddExistingComponent(entity, component); } /// @@ -591,7 +585,7 @@ namespace Encompass componentManager.Remove(entity, priority); } - if (componentUpdateManager.HasExistingComponent(entity)) + if (componentManager.HasExistingComponent(entity)) { trackingManager.RegisterRemoval(entity, typeof(TComponent)); } @@ -659,11 +653,11 @@ namespace Encompass internal void CheckAndUpdateTracking(Entity entity) { - if (_trackedEntities.Contains(entity) && !entityQuery.CheckEntity(entity, componentManager.ComponentBitSet)) + if (_trackedEntities.Contains(entity) && !entityQuery.CheckEntity(entity, componentManager.ExistingBits)) { _trackedEntities.Remove(entity); } - else if (!_trackedEntities.Contains(entity) && entityQuery.CheckEntity(entity, componentManager.ComponentBitSet)) + else if (!_trackedEntities.Contains(entity) && entityQuery.CheckEntity(entity, componentManager.ExistingBits)) { _trackedEntities.Add(entity); } @@ -671,11 +665,11 @@ namespace Encompass internal void ImmediateCheckAndUpdateTracking(Entity entity) { - if (_trackedEntities.Contains(entity) && !entityQuery.ImmediateCheckEntity(entity, componentUpdateManager.ImmediateBits, componentUpdateManager.ExistingBits)) + if (_trackedEntities.Contains(entity) && !entityQuery.ImmediateCheckEntity(entity, componentManager.ImmediateBits, componentManager.ExistingBits)) { _trackedEntities.Remove(entity); } - else if (!_trackedEntities.Contains(entity) && entityQuery.ImmediateCheckEntity(entity, componentUpdateManager.ImmediateBits, componentUpdateManager.ExistingBits)) + else if (!_trackedEntities.Contains(entity) && entityQuery.ImmediateCheckEntity(entity, componentManager.ImmediateBits, componentManager.ExistingBits)) { _trackedEntities.Add(entity); } @@ -689,25 +683,25 @@ namespace Encompass var withMask = BitSet512.Zero; foreach (var type in queryWithTypes) { - withMask = withMask.Set(componentUpdateManager.TypeToIndex[type]); + withMask = withMask.Set(componentManager.TypeToIndex[type]); } var withoutMask = BitSet512.Zero; foreach (var type in queryWithoutTypes) { - withoutMask = withoutMask.Set(componentUpdateManager.TypeToIndex[type]); + withoutMask = withoutMask.Set(componentManager.TypeToIndex[type]); } var immediateMask = BitSet512.Zero; foreach (var type in readImmediateTypes) { - immediateMask = immediateMask.Set(componentUpdateManager.TypeToIndex[type]); + immediateMask = immediateMask.Set(componentManager.TypeToIndex[type]); } var existingMask = BitSet512.Zero; foreach (var type in readTypes) { - existingMask = existingMask.Set(componentUpdateManager.TypeToIndex[type]); + existingMask = existingMask.Set(componentManager.TypeToIndex[type]); } entityQuery = new EntitySetQuery( diff --git a/encompass-cs/Renderer.cs b/encompass-cs/Renderer.cs index 048d5d7..e0999af 100644 --- a/encompass-cs/Renderer.cs +++ b/encompass-cs/Renderer.cs @@ -69,7 +69,7 @@ namespace Encompass protected bool SomeComponent() where TComponent : struct, IComponent { - return componentManager.ComponentOfTypeExists(); + return componentManager.SomeExistingComponent(); } } } diff --git a/encompass-cs/World.cs b/encompass-cs/World.cs index a97ffe4..677bf8f 100644 --- a/encompass-cs/World.cs +++ b/encompass-cs/World.cs @@ -12,7 +12,6 @@ namespace Encompass private readonly ComponentManager componentManager; private readonly TrackingManager trackingManager; private readonly MessageManager messageManager; - private readonly ComponentUpdateManager componentUpdateManager; private readonly TimeManager timeManager; private readonly RenderManager renderManager; @@ -22,7 +21,6 @@ namespace Encompass ComponentManager componentManager, TrackingManager trackingManager, MessageManager messageManager, - ComponentUpdateManager componentUpdateManager, TimeManager timeManager, RenderManager renderManager ) @@ -32,7 +30,6 @@ namespace Encompass this.componentManager = componentManager; this.trackingManager = trackingManager; this.messageManager = messageManager; - this.componentUpdateManager = componentUpdateManager; this.timeManager = timeManager; this.renderManager = renderManager; } @@ -62,10 +59,8 @@ namespace Encompass messageManager.ClearMessages(); entityManager.DestroyMarkedEntities(enginesInOrder); - componentManager.WriteComponents(); componentManager.RemoveMarkedComponents(); - - componentUpdateManager.Clear(); + componentManager.WriteComponents(); } /// diff --git a/encompass-cs/WorldBuilder.cs b/encompass-cs/WorldBuilder.cs index d85ed87..35fdb5d 100644 --- a/encompass-cs/WorldBuilder.cs +++ b/encompass-cs/WorldBuilder.cs @@ -27,7 +27,6 @@ namespace Encompass private readonly ComponentManager componentManager; private readonly EntityManager entityManager; private readonly MessageManager messageManager; - private readonly ComponentUpdateManager componentUpdateManager; private readonly TimeManager timeManager; private readonly DrawLayerManager drawLayerManager; private readonly RenderManager renderManager; @@ -49,8 +48,7 @@ namespace Encompass drawLayerManager = new DrawLayerManager(typeToIndex); timeManager = new TimeManager(); trackingManager = new TrackingManager(); - componentUpdateManager = new ComponentUpdateManager(typeToIndex); - componentManager = new ComponentManager(drawLayerManager, componentUpdateManager, typeToIndex); + componentManager = new ComponentManager(drawLayerManager, typeToIndex); messageManager = new MessageManager(timeManager); entityManager = new EntityManager(componentManager, entityCapacity); renderManager = new RenderManager(entityManager, drawLayerManager); @@ -107,7 +105,6 @@ namespace Encompass { typeToIndex.Add(typeof(TComponent), typeToIndex.Count); componentManager.RegisterComponentType(); - componentUpdateManager.RegisterComponentType(); startingComponentStoreForComponentManager.RegisterComponentType(); startingComponentStoreForComponentUpdateManager.RegisterComponentType(); } @@ -132,7 +129,6 @@ namespace Encompass engine.AssignEntityManager(entityManager); engine.AssignComponentManager(componentManager); engine.AssignMessageManager(messageManager); - engine.AssignComponentUpdateManager(componentUpdateManager); engine.AssignTimeManager(timeManager); engine.AssignTrackingManager(trackingManager); @@ -395,12 +391,10 @@ namespace Encompass componentManager, trackingManager, messageManager, - componentUpdateManager, timeManager, renderManager ); - componentUpdateManager.SetStartingComponentStore(startingComponentStoreForComponentUpdateManager); componentManager.SetComponentStore(startingComponentStoreForComponentManager); trackingManager.InitializeTracking(entityManager.Entities); @@ -420,8 +414,7 @@ namespace Encompass 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 dummyComponentManager = new ComponentManager(dummyDrawLayerManager, typeToIndex); var dummyEntityManager = new EntityManager(dummyComponentManager, entityCapacity); var dummyRenderManager = new RenderManager(dummyEntityManager, dummyDrawLayerManager); @@ -432,7 +425,6 @@ namespace Encompass uberEngine.AssignEntityManager(dummyEntityManager); uberEngine.AssignComponentManager(dummyComponentManager); uberEngine.AssignMessageManager(dummyMessageManager); - uberEngine.AssignComponentUpdateManager(dummyComponentUpdateManager); uberEngine.AssignTimeManager(dummyTimeManager); uberEngine.AssignTrackingManager(dummyTrackingManager); @@ -446,10 +438,6 @@ namespace Encompass var componentManagerRegisterGenericMethod = componentManagerRegisterMethod.MakeGenericMethod(type); componentManagerRegisterGenericMethod.Invoke(dummyComponentManager, null); - var componentUpdateManagerRegisterMethod = typeof(ComponentUpdateManager).GetMethod("RegisterComponentType"); - var componentUpdateManagerRegisterGenericMethod = componentUpdateManagerRegisterMethod.MakeGenericMethod(type); - componentUpdateManagerRegisterGenericMethod.Invoke(dummyComponentUpdateManager, null); - if (type.GetInterface("IDrawableComponent") != null) { var drawLayerManagerRegisterMethod = typeof(DrawLayerManager).GetMethod("RegisterOrderedDrawable"); @@ -461,7 +449,6 @@ namespace Encompass emitterEngine.AssignEntityManager(dummyEntityManager); emitterEngine.AssignComponentManager(dummyComponentManager); emitterEngine.AssignMessageManager(dummyMessageManager); - emitterEngine.AssignComponentUpdateManager(dummyComponentUpdateManager); emitterEngine.AssignTimeManager(dummyTimeManager); emitterEngine.AssignTrackingManager(dummyTrackingManager); @@ -476,20 +463,17 @@ namespace Encompass dummyComponentManager, dummyTrackingManager, dummyMessageManager, - dummyComponentUpdateManager, dummyTimeManager, dummyRenderManager ); uberEngine.Write(); dummyComponentManager.WriteComponents(); - dummyComponentUpdateManager.Clear(); dummyWorld.Update(1); uberEngine.Write(); dummyComponentManager.WriteComponents(); - dummyComponentUpdateManager.Clear(); uberRenderer.SetEntity(uberEngine.Entity); uberRenderer.Render();