diff --git a/encompass-cs/Collections/ComponentStore.cs b/encompass-cs/Collections/ComponentStore.cs index 9097c52..0645510 100644 --- a/encompass-cs/Collections/ComponentStore.cs +++ b/encompass-cs/Collections/ComponentStore.cs @@ -124,6 +124,14 @@ namespace Encompass Lookup().Clear(); } + public virtual void ClearAllPriorities() + { + foreach (var store in Stores.Values) + { + store.ClearPriorities(); + } + } + public virtual void ClearAll() { ComponentBitSet.Clear(); diff --git a/encompass-cs/Collections/TypedComponentStore.cs b/encompass-cs/Collections/TypedComponentStore.cs index 89dfd8f..78a8f20 100644 --- a/encompass-cs/Collections/TypedComponentStore.cs +++ b/encompass-cs/Collections/TypedComponentStore.cs @@ -11,6 +11,7 @@ namespace Encompass public abstract bool Remove(int entity, int priority); public abstract void ForceRemove(int entity); public abstract void Clear(); + public abstract void ClearPriorities(); } internal class TypedComponentStore : TypedComponentStore where TComponent : struct, IComponent @@ -73,6 +74,11 @@ namespace Encompass priorities.Clear(); } + public override void ClearPriorities() + { + priorities.Clear(); + } + public IEnumerable<(TComponent, int)> All() { foreach (var kvp in store) diff --git a/encompass-cs/ComponentManager.cs b/encompass-cs/ComponentManager.cs index 93bd754..ded956e 100644 --- a/encompass-cs/ComponentManager.cs +++ b/encompass-cs/ComponentManager.cs @@ -55,6 +55,8 @@ namespace Encompass internal void WriteComponents() { existingComponentStore.UpdateUsing(replayStore); + existingComponentStore.ClearAllPriorities(); + upToDateComponentStore.ClearAllPriorities(); immediateComponentStore.ClearAll(); replayStore.ClearAll(); } diff --git a/test/ComponentTest.cs b/test/ComponentTest.cs index 327869e..1b94e51 100644 --- a/test/ComponentTest.cs +++ b/test/ComponentTest.cs @@ -98,7 +98,6 @@ namespace Tests } [Reads(typeof(MockComponent))] - [WritesImmediate(typeof(MockComponent))] [Writes(typeof(MockComponent))] class OverwriteEngine : Engine { @@ -106,12 +105,11 @@ namespace Tests { foreach (var (mockComponent, entity) in ReadComponentsIncludingEntity()) { - SetComponent(entity, new MockComponent { myInt = 420 }); + SetComponent(entity, new MockComponent { myInt = mockComponent.myInt + 1 }); } } } - [ReadsImmediate(typeof(MockComponent))] [Reads(typeof(MockComponent))] class ReadMockComponentEngine : Engine { @@ -129,12 +127,20 @@ namespace Tests worldBuilder.AddEngine(new ReadMockComponentEngine()); var entity = worldBuilder.CreateEntity(); - worldBuilder.SetComponent(entity, new MockComponent { }); + worldBuilder.SetComponent(entity, new MockComponent { myInt = 420 }); var world = worldBuilder.Build(); world.Update(0.01); Assert.That(gottenMockComponent.myInt, Is.EqualTo(420)); + + world.Update(0.01); + + Assert.That(gottenMockComponent.myInt, Is.EqualTo(421)); + + world.Update(0.01); + + Assert.That(gottenMockComponent.myInt, Is.EqualTo(422)); } [Reads(typeof(MockComponent))]