From 971a663cf99e5c21141856ba143a3f12db0841a7 Mon Sep 17 00:00:00 2001 From: Evan Hemsley Date: Wed, 21 Aug 2019 15:13:48 -0700 Subject: [PATCH] write priority system and require read declaration for entity lookups by component --- encompass-cs/ComponentManager.cs | 79 ++++++++++-------------- encompass-cs/Engine.cs | 39 ++++++------ encompass-cs/Engines/ComponentUpdater.cs | 18 ------ encompass-cs/World.cs | 1 - encompass-cs/WorldBuilder.cs | 27 ++------ test/ComponentTest.cs | 62 ++++++++++++------- test/EngineTest.cs | 74 +++++++++++----------- test/GeneralRendererTest.cs | 6 +- test/OrderedRendererTest.cs | 10 +-- test/WorldTest.cs | 16 ++--- 10 files changed, 149 insertions(+), 183 deletions(-) delete mode 100644 encompass-cs/Engines/ComponentUpdater.cs diff --git a/encompass-cs/ComponentManager.cs b/encompass-cs/ComponentManager.cs index 5210381..3f9371f 100644 --- a/encompass-cs/ComponentManager.cs +++ b/encompass-cs/ComponentManager.cs @@ -19,11 +19,10 @@ namespace Encompass private readonly Dictionary> typeToComponentIDs = new Dictionary>(); - private readonly List<(Entity, Type, Guid, IComponent)> componentWriteData = new List<(Entity, Type, Guid, IComponent)>(); - private Dictionary<(Entity, Type), int> componentWritePriorities = new Dictionary<(Entity, Type), int>(); + private readonly Dictionary<(Entity, Type), (Guid, IComponent)> componentWriteData = new Dictionary<(Entity, Type), (Guid, IComponent)>(); + private readonly Dictionary<(Entity, Type), int> componentWritePriorities = new Dictionary<(Entity, Type), int>(); private readonly HashSet componentIDsMarkedForWrite = new HashSet(); private readonly HashSet componentsMarkedForRemoval = new HashSet(); - private readonly Dictionary pendingUpdates = new Dictionary(); public ComponentManager(DrawLayerManager drawLayerManager) { @@ -53,19 +52,19 @@ namespace Encompass id = NextID(); } - if (componentWritePriorities.ContainsKey((entity, typeof(TComponent)))) + if (componentWriteData.ContainsKey((entity, typeof(TComponent)))) { var currentPriority = componentWritePriorities[(entity, typeof(TComponent))]; if (priority < currentPriority) { - componentWriteData.Add((entity, typeof(TComponent), id, component)); + componentWriteData[(entity, typeof(TComponent))] = (id, component); componentWritePriorities[(entity, typeof(TComponent))] = priority; componentIDsMarkedForWrite.Add(id); } } else { - componentWriteData.Add((entity, typeof(TComponent), id, component)); + componentWriteData.Add((entity, typeof(TComponent)), (id, component)); componentWritePriorities[(entity, typeof(TComponent))] = priority; componentIDsMarkedForWrite.Add(id); } @@ -82,32 +81,40 @@ namespace Encompass internal void AddComponent(Entity entity, Type type, Guid componentID, IComponent component) { - if (!entityIDToComponentTypeToComponentID.ContainsKey(entity.ID)) { return; } + IDToComponent[componentID] = component; + componentIDToEntityID[componentID] = entity.ID; + componentIDToType[componentID] = type; + entityIDToComponentTypeToComponentID[entity.ID][type] = componentID; + if (!typeToComponentIDs.ContainsKey(type)) + { + typeToComponentIDs.Add(type, new HashSet()); + } + typeToComponentIDs[type].Add(componentID); + entityIDToComponentIDs[entity.ID].Add(componentID); + } - if (!entityIDToComponentTypeToComponentID[entity.ID].ContainsKey(type)) - { - IDToComponent[componentID] = component; - componentIDToEntityID[componentID] = entity.ID; - componentIDToType[componentID] = type; - entityIDToComponentTypeToComponentID[entity.ID][type] = componentID; - if (!typeToComponentIDs.ContainsKey(type)) - { - typeToComponentIDs.Add(type, new HashSet()); - } - typeToComponentIDs[type].Add(componentID); - entityIDToComponentIDs[entity.ID].Add(componentID); - } - else - { - throw new MultipleComponentOfSameTypeException("Entity {0} cannot have multiple components of type {1}", entity.ID, type.Name); - } + internal void UpdateComponent(Guid componentID, IComponent component) + { + IDToComponent[componentID] = component; } internal void WriteComponents() { - foreach (var (entity, type, componentID, component) in componentWriteData) + foreach (var keyValuePair in componentWriteData) { - AddComponent(entity, type, componentID, component); + var (entity, type) = keyValuePair.Key; + var (componentID, component) = keyValuePair.Value; + + if (!entityIDToComponentTypeToComponentID.ContainsKey(entity.ID)) { continue; } + + if (entityIDToComponentTypeToComponentID[entity.ID].ContainsKey(type)) + { + UpdateComponent(componentID, component); + } + else + { + AddComponent(entity, type, componentID, component); + } } componentWriteData.Clear(); @@ -173,26 +180,6 @@ namespace Encompass return componentIDToEntityID[componentID]; } - internal void AddUpdateComponentOperation(Guid componentID, TComponent newComponentValue) where TComponent : struct, IComponent - { - if (pendingUpdates.ContainsKey(componentID)) - { - throw new RepeatUpdateComponentException("Component {0} with ID {1} was updated multiple times this frame", typeof(TComponent).Name, componentID); - } - - pendingUpdates.Add(componentID, newComponentValue); - } - - internal void PerformComponentUpdates() - { - foreach (var idPair in pendingUpdates) - { - IDToComponent[idPair.Key] = idPair.Value; - } - - pendingUpdates.Clear(); - } - internal void MarkAllComponentsOnEntityForRemoval(Guid entityID) { foreach (var componentID in GetComponentIDsByEntityID(entityID)) diff --git a/encompass-cs/Engine.cs b/encompass-cs/Engine.cs index cfe6149..4579b29 100644 --- a/encompass-cs/Engine.cs +++ b/encompass-cs/Engine.cs @@ -94,18 +94,34 @@ namespace Encompass return entityManager.GetEntity(entityID); } - protected Guid GetEntityIDByComponentID(Guid componentID) + protected Guid GetEntityIDByComponentID(Guid componentID) where TComponent : struct, IComponent { + var pendingRead = receiveTypes.Contains(typeof(PendingComponentMessage)); + var existingRead = receiveTypes.Contains(typeof(ComponentMessage)); + + if (!pendingRead && !existingRead) + { + throw new IllegalReadException("Engine {0} tried to read undeclared Component {1}", GetType().Name, typeof(TComponent).Name); + } + return componentMessageManager.GetEntityIDByComponentID(componentID); } - protected Entity GetEntityByComponentID(Guid componentID) + protected Entity GetEntityByComponentID(Guid componentID) where TComponent : struct, IComponent { - return GetEntity(GetEntityIDByComponentID(componentID)); + return GetEntity(GetEntityIDByComponentID(componentID)); } protected TComponent GetComponentByID(Guid componentID) where TComponent : struct, IComponent { + var pendingRead = receiveTypes.Contains(typeof(PendingComponentMessage)); + var existingRead = receiveTypes.Contains(typeof(ComponentMessage)); + + if (!pendingRead && !existingRead) + { + throw new IllegalReadException("Engine {0} tried to read undeclared Component {1}", GetType().Name, typeof(TComponent).Name); + } + if (componentMessageManager.GetComponentTypeByID(componentID) != typeof(TComponent)) { throw new ComponentTypeMismatchException("Expected Component to be of type {0} but was actually of type {1}", typeof(TComponent).Name, componentMessageManager.GetComponentTypeByID(componentID).Name); @@ -248,11 +264,6 @@ namespace Encompass } } - internal void UpdateComponentInWorld(Guid componentID, TComponent newComponent) where TComponent : struct, IComponent - { - componentManager.AddUpdateComponentOperation(componentID, newComponent); - } - protected Guid SetComponent(Entity entity, TComponent component) where TComponent : struct, IComponent { var priority = writePriorities.ContainsKey(typeof(TComponent)) ? writePriorities[typeof(TComponent)] : 0; @@ -274,17 +285,12 @@ namespace Encompass SendPendingComponentMessage(newComponentMessage); } - ComponentWriteMessage componentUpdateMessage; - componentUpdateMessage.componentID = componentID; - componentUpdateMessage.component = component; - SendMessage(componentUpdateMessage); - return componentID; } protected Guid SetComponent(Guid componentID, TComponent component) where TComponent : struct, IComponent { - return SetComponent(GetEntityByComponentID(componentID), component); + return SetComponent(GetEntityByComponentID(componentID), component); } protected Guid SetDrawComponent(Entity entity, TComponent component, int layer = 0) where TComponent : struct, IComponent @@ -308,11 +314,6 @@ namespace Encompass SendPendingComponentMessage(newComponentMessage); } - ComponentWriteMessage componentUpdateMessage; - componentUpdateMessage.componentID = componentID; - componentUpdateMessage.component = component; - SendMessage(componentUpdateMessage); - return componentID; } diff --git a/encompass-cs/Engines/ComponentUpdater.cs b/encompass-cs/Engines/ComponentUpdater.cs deleted file mode 100644 index 3cf9b7e..0000000 --- a/encompass-cs/Engines/ComponentUpdater.cs +++ /dev/null @@ -1,18 +0,0 @@ -namespace Encompass.Engines -{ - internal class ComponentUpdater : Engine where TComponent : struct, IComponent - { - public ComponentUpdater() : base() - { - receiveTypes.Add(typeof(ComponentWriteMessage)); - } - - public override void Update(double dt) - { - foreach (var componentUpdateMessage in ReadMessages>()) - { - UpdateComponentInWorld(componentUpdateMessage.componentID, componentUpdateMessage.component); - } - } - } -} \ No newline at end of file diff --git a/encompass-cs/World.cs b/encompass-cs/World.cs index fe5104d..576c51e 100644 --- a/encompass-cs/World.cs +++ b/encompass-cs/World.cs @@ -41,7 +41,6 @@ namespace Encompass componentMessageManager.ClearMessages(); entityManager.DestroyMarkedEntities(); - componentManager.PerformComponentUpdates(); componentManager.RemoveMarkedComponents(); componentManager.WriteComponents(); } diff --git a/encompass-cs/WorldBuilder.cs b/encompass-cs/WorldBuilder.cs index 8a2100e..1e8de7e 100644 --- a/encompass-cs/WorldBuilder.cs +++ b/encompass-cs/WorldBuilder.cs @@ -50,14 +50,14 @@ namespace Encompass messageManager.AddMessageDelayed(message, time); } - public Guid AddComponent(Entity entity, TComponent component) where TComponent : struct, IComponent + public Guid SetComponent(Entity entity, TComponent component, int priority = 0) where TComponent : struct, IComponent { - return componentManager.MarkComponentForWrite(entity, component, 0); + return componentManager.MarkComponentForWrite(entity, component, priority); } - public Guid AddDrawComponent(Entity entity, TComponent component, int layer = 0) where TComponent : struct, IComponent + public Guid SetDrawComponent(Entity entity, TComponent component, int priority = 0, int layer = 0) where TComponent : struct, IComponent { - return componentManager.MarkDrawComponentForWrite(entity, component, layer); + return componentManager.MarkDrawComponentForWrite(entity, component, priority, layer); } internal void RegisterComponent(Type componentType) @@ -66,11 +66,6 @@ namespace Encompass AddEngine((Engine)Activator.CreateInstance(typeof(ComponentMessageEmitter<>).MakeGenericType(componentType))); } - internal void RegisterNewComponentUpdater(Type componentType) - { - AddEngine((Engine)Activator.CreateInstance(typeof(ComponentUpdater<>).MakeGenericType(componentType))); - } - public Engine AddEngine(TEngine engine) where TEngine : Engine { engine.AssignEntityManager(entityManager); @@ -128,19 +123,6 @@ namespace Encompass typeToReaders[receiveType].Add(engine); } - foreach (var sendType in engine.sendTypes) - { - if (sendType.IsGenericType) - { - var genericTypeDefinition = sendType.GetGenericTypeDefinition(); - if (genericTypeDefinition == typeof(ComponentWriteMessage<>)) - { - var componentType = sendType.GetGenericArguments().Single(); - RegisterNewComponentUpdater(componentType); - } - } - } - return engine; } @@ -268,7 +250,6 @@ namespace Encompass renderManager ); - componentManager.PerformComponentUpdates(); componentManager.RemoveMarkedComponents(); componentManager.WriteComponents(); diff --git a/test/ComponentTest.cs b/test/ComponentTest.cs index 08a8cf2..3cd553b 100644 --- a/test/ComponentTest.cs +++ b/test/ComponentTest.cs @@ -1,3 +1,4 @@ +using System.ComponentModel; using NUnit.Framework; using FluentAssertions; @@ -11,7 +12,7 @@ namespace Tests { public class ComponentTests { - struct MockComponent : IComponent + struct MockComponent : Encompass.IComponent { public string myString; public int myInt; @@ -22,7 +23,6 @@ namespace Tests public Entity entity; } - static IEnumerable<(Guid, MockComponent)> gottenMockComponentIDPairs = Enumerable.Empty<(Guid, MockComponent)>(); static (Guid, MockComponent) gottenMockComponentIDPair; [Receives(typeof(EntityMessage))] @@ -70,7 +70,7 @@ namespace Tests mockComponent.myInt = 3; mockComponent.myString = "hello"; - worldBuilder.AddComponent(entity, mockComponent); + worldBuilder.SetComponent(entity, mockComponent); AddComponentTestMessage addComponentTestMessage; addComponentTestMessage.entity = entity; @@ -83,48 +83,64 @@ namespace Tests } [Test] - public void AddMultipleComponentOfSameTypeToEntity() + public void SetMultipleComponentOfSameTypeOnEntity() { var worldBuilder = new WorldBuilder(); - - MockComponent mockComponent; - mockComponent.myInt = 3; - mockComponent.myString = "hello"; + worldBuilder.AddEngine(new ReadMockComponentEngine()); var entity = worldBuilder.CreateEntity(); - worldBuilder.AddComponent(entity, mockComponent); - worldBuilder.AddComponent(entity, mockComponent); + worldBuilder.SetComponent(entity, new MockComponent { myInt = 20, myString = "what" }, 2); + worldBuilder.SetComponent(entity, new MockComponent { myInt = 50, myString = "hi" }, 0); + worldBuilder.SetComponent(entity, new MockComponent { myInt = 40, myString = "wassup" }, 1); - Assert.Throws(() => worldBuilder.Build()); + var world = worldBuilder.Build(); + + world.Update(0.01); + + Assert.That(gottenMockComponentIDPair.Item2.myInt, Is.EqualTo(50)); + Assert.That(gottenMockComponentIDPair.Item2.myString, Is.EqualTo("hi")); } [Reads(typeof(MockComponent))] + [WritesPending(typeof(MockComponent))] [Writes(typeof(MockComponent))] - class MultipleAddEngine : Engine + class OverwriteEngine : Engine { public override void Update(double dt) { foreach (var (mockComponentID, mockComponent) in ReadComponents()) { - var entity = GetEntityByComponentID(mockComponentID); + var entity = GetEntityByComponentID(mockComponentID); - SetComponent(entity, new MockComponent()); + SetComponent(entity, new MockComponent { myInt = 420 }); } } } + [ReadsPending(typeof(MockComponent))] + [Reads(typeof(MockComponent))] + class ReadMockComponentEngine : Engine + { + public override void Update(double dt) + { + gottenMockComponentIDPair = ReadComponent(); + } + } + [Test] - public void EngineAddMultipleComponentOfSameTypeToEntity() + public void EngineOverwriteComponent() { var worldBuilder = new WorldBuilder(); - worldBuilder.AddEngine(new MultipleAddEngine()); + worldBuilder.AddEngine(new OverwriteEngine()); + worldBuilder.AddEngine(new ReadMockComponentEngine()); var entity = worldBuilder.CreateEntity(); - worldBuilder.AddComponent(entity, new MockComponent()); + worldBuilder.SetComponent(entity, new MockComponent {}); var world = worldBuilder.Build(); + world.Update(0.01); - Assert.Throws(() => world.Update(0.01)); + Assert.That(gottenMockComponentIDPair.Item2.myInt, Is.EqualTo(420)); } [Reads(typeof(MockComponent))] @@ -135,7 +151,7 @@ namespace Tests { foreach (var (mockComponentID, mockComponent) in ReadComponents()) { - var entity = GetEntityByComponentID(mockComponentID); + var entity = GetEntityByComponentID(mockComponentID); SetComponent(entity, mockComponent); RemoveComponent(mockComponentID); } @@ -149,7 +165,7 @@ namespace Tests worldBuilder.AddEngine(new AddAndRemoveComponentEngine()); var entity = worldBuilder.CreateEntity(); - worldBuilder.AddComponent(entity, new MockComponent()); + worldBuilder.SetComponent(entity, new MockComponent()); var world = worldBuilder.Build(); @@ -242,7 +258,7 @@ namespace Tests mockComponent.myInt = 3; mockComponent.myString = "hello"; - var componentID = worldBuilder.AddComponent(entity, mockComponent); + var componentID = worldBuilder.SetComponent(entity, mockComponent); EntityMessage entityMessage; entityMessage.entity = entity; @@ -285,7 +301,7 @@ namespace Tests mockComponent.myInt = 3; mockComponent.myString = "hello"; - worldBuilder.AddComponent(entity, mockComponent); + worldBuilder.SetComponent(entity, mockComponent); HasComponentTestMessage hasComponentTestMessage; hasComponentTestMessage.entity = entity; @@ -371,7 +387,7 @@ namespace Tests mockComponent.myInt = 3; mockComponent.myString = "hello"; - var componentID = worldBuilder.AddComponent(entity, mockComponent); + var componentID = worldBuilder.SetComponent(entity, mockComponent); RemoveComponentTestMessage removeComponentMessage; removeComponentMessage.entity = entity; diff --git a/test/EngineTest.cs b/test/EngineTest.cs index f947fcd..6fb829a 100644 --- a/test/EngineTest.cs +++ b/test/EngineTest.cs @@ -59,8 +59,8 @@ namespace Tests mockComponentB.myInt = 1; mockComponentB.myString = "howdy"; - var componentAID = worldBuilder.AddComponent(entity, mockComponent); - var componentBID = worldBuilder.AddComponent(entityB, mockComponentB); + var componentAID = worldBuilder.SetComponent(entity, mockComponent); + var componentBID = worldBuilder.SetComponent(entityB, mockComponentB); var world = worldBuilder.Build(); @@ -83,7 +83,7 @@ namespace Tests mockComponent.myInt = 0; mockComponent.myString = "hello"; - worldBuilder.AddComponent(entity, mockComponent); + worldBuilder.SetComponent(entity, mockComponent); var world = worldBuilder.Build(); @@ -109,8 +109,8 @@ namespace Tests mockComponentB.myInt = 1; mockComponentB.myString = "howdy"; - worldBuilder.AddComponent(entity, mockComponent); - worldBuilder.AddComponent(entityB, mockComponentB); + worldBuilder.SetComponent(entity, mockComponent); + worldBuilder.SetComponent(entityB, mockComponentB); var world = worldBuilder.Build(); @@ -129,7 +129,7 @@ namespace Tests component.myInt = 420; component.myString = "blaze it"; - SetComponent(componentID, component); + SetComponent(GetEntityByComponentID(componentID), component); } } @@ -149,7 +149,7 @@ namespace Tests mockComponent.myInt = 0; mockComponent.myString = "hello"; - worldBuilder.AddComponent(entity, mockComponent); + worldBuilder.SetComponent(entity, mockComponent); var world = worldBuilder.Build(); @@ -161,7 +161,6 @@ namespace Tests } [Reads(typeof(MockComponent))] - [Writes(typeof(MockComponent))] public class UndeclaredUpdateComponentTestEngine : Engine { public override void Update(double dt) @@ -188,7 +187,7 @@ namespace Tests mockComponent.myInt = 0; mockComponent.myString = "hello"; - worldBuilder.AddComponent(entity, mockComponent); + worldBuilder.SetComponent(entity, mockComponent); var world = worldBuilder.Build(); @@ -354,7 +353,7 @@ namespace Tests var worldBuilder = new WorldBuilder(); var entity = worldBuilder.CreateEntity(); - worldBuilder.AddComponent(entity, new MockComponent()); + worldBuilder.SetComponent(entity, new MockComponent()); var world = worldBuilder.Build(); @@ -392,10 +391,10 @@ namespace Tests componentB.myString = "hello"; var entity = worldBuilder.CreateEntity(); - worldBuilder.AddComponent(entity, componentA); + worldBuilder.SetComponent(entity, componentA); var entityB = worldBuilder.CreateEntity(); - worldBuilder.AddComponent(entityB, componentB); + worldBuilder.SetComponent(entityB, componentB); var world = worldBuilder.Build(); world.Update(0.01f); @@ -437,7 +436,7 @@ namespace Tests foreach (var componentPair in ReadComponents()) { var componentID = componentPair.Item1; - var entityID = GetEntityIDByComponentID(componentID); + var entityID = GetEntityIDByComponentID(componentID); Destroy(entityID); } } @@ -470,13 +469,13 @@ namespace Tests mockComponent.myInt = 2; mockComponent.myString = "blah"; - worldBuilder.AddComponent(entity, destroyerComponent); - var componentID = worldBuilder.AddComponent(entity, mockComponent); + worldBuilder.SetComponent(entity, destroyerComponent); + var componentID = worldBuilder.SetComponent(entity, mockComponent); - worldBuilder.AddComponent(entityB, destroyerComponent); - var componentBID = worldBuilder.AddComponent(entityB, mockComponent); + worldBuilder.SetComponent(entityB, destroyerComponent); + var componentBID = worldBuilder.SetComponent(entityB, mockComponent); - var componentCID = worldBuilder.AddComponent(entityC, mockComponent); + var componentCID = worldBuilder.SetComponent(entityC, mockComponent); var world = worldBuilder.Build(); @@ -496,7 +495,7 @@ namespace Tests foreach (var componentPair in ReadComponents()) { var componentID = componentPair.Item1; - var entity = GetEntityByComponentID(componentID); + var entity = GetEntityByComponentID(componentID); var (id, _) = GetComponent(entity); RemoveComponent(id); Destroy(entity.ID); @@ -513,8 +512,8 @@ namespace Tests var entity = worldBuilder.CreateEntity(); - worldBuilder.AddComponent(entity, new DestroyerComponent()); - worldBuilder.AddComponent(entity, new MockComponent()); + worldBuilder.SetComponent(entity, new DestroyerComponent()); + worldBuilder.SetComponent(entity, new MockComponent()); var world = worldBuilder.Build(); @@ -529,7 +528,7 @@ namespace Tests public override void Update(double dt) { var componentID = ReadComponent().Item1; - entityFromComponentIDResult = GetEntityByComponentID(componentID); + entityFromComponentIDResult = GetEntityByComponentID(componentID); } } @@ -544,7 +543,7 @@ namespace Tests component.myString = "howdy"; var entity = worldBuilder.CreateEntity(); - worldBuilder.AddComponent(entity, component); + worldBuilder.SetComponent(entity, component); var world = worldBuilder.Build(); world.Update(0.01); @@ -561,7 +560,7 @@ namespace Tests { foreach (var (mockComponentID, mockComponent) in ReadComponents()) { - var entity = GetEntityByComponentID(mockComponentID); + var entity = GetEntityByComponentID(mockComponentID); RemoveComponent(mockComponentID); SetComponent(entity, new MockComponent()); } @@ -575,7 +574,7 @@ namespace Tests { foreach (var (mockComponentID, mockComponent) in ReadComponents()) { - entityFromComponentIDResult = GetEntityByComponentID(mockComponentID); + entityFromComponentIDResult = GetEntityByComponentID(mockComponentID); } } } @@ -588,7 +587,7 @@ namespace Tests worldBuilder.AddEngine(new GetEntityFromPendingComponentIDEngine()); var entity = worldBuilder.CreateEntity(); - worldBuilder.AddComponent(entity, new MockComponent()); + worldBuilder.SetComponent(entity, new MockComponent()); var world = worldBuilder.Build(); @@ -615,7 +614,7 @@ namespace Tests worldBuilder.AddEngine(new GetPendingComponentFromIDEngine()); var entity = worldBuilder.CreateEntity(); - worldBuilder.AddComponent(entity, new MockComponent()); + worldBuilder.SetComponent(entity, new MockComponent()); var world = worldBuilder.Build(); @@ -644,7 +643,7 @@ namespace Tests component.myString = "howdy"; var entity = worldBuilder.CreateEntity(); - worldBuilder.AddComponent(entity, component); + worldBuilder.SetComponent(entity, component); var world = worldBuilder.Build(); world.Update(0.01f); @@ -654,7 +653,7 @@ namespace Tests struct OtherComponent : IComponent { } - [Reads(typeof(MockComponent))] + [Reads(typeof(MockComponent), typeof(OtherComponent))] class GetComponentByIDWithTypeMismatchEngine : Engine { public override void Update(double dt) @@ -675,7 +674,7 @@ namespace Tests component.myString = "howdy"; var entity = worldBuilder.CreateEntity(); - worldBuilder.AddComponent(entity, component); + worldBuilder.SetComponent(entity, component); var world = worldBuilder.Build(); @@ -710,7 +709,7 @@ namespace Tests EntityIDComponent entityIDComponent; entityIDComponent.entityID = entityTwo.ID; - worldBuilder.AddComponent(entity, entityIDComponent); + worldBuilder.SetComponent(entity, entityIDComponent); var world = worldBuilder.Build(); @@ -729,9 +728,10 @@ namespace Tests public MockComponent mockComponent; } + [Reads(typeof(MockComponent))] [Receives(typeof(MockComponentUpdateMessage))] [Writes(typeof(MockComponent))] - class RepeatUpdateEngine : Engine + class UpdateByComponentIDEngine : Engine { public override void Update(double dt) { @@ -744,10 +744,10 @@ namespace Tests } [Test] - public void EngineUpdatesComponentMultipleTimes() + public void EngineUpdateByComponentID() { var worldBuilder = new WorldBuilder(); - worldBuilder.AddEngine(new RepeatUpdateEngine()); + worldBuilder.AddEngine(new UpdateByComponentIDEngine()); var entity = worldBuilder.CreateEntity(); @@ -755,7 +755,7 @@ namespace Tests mockComponent.myInt = 1; mockComponent.myString = "5"; - var mockComponentID = worldBuilder.AddComponent(entity, mockComponent); + var mockComponentID = worldBuilder.SetComponent(entity, mockComponent); MockComponentUpdateMessage mockComponentUpdateMessage; mockComponentUpdateMessage.componentID = mockComponentID; @@ -763,7 +763,7 @@ namespace Tests worldBuilder.SendMessage(mockComponentUpdateMessage); var world = worldBuilder.Build(); - Assert.Throws(() => world.Update(0.01)); + Assert.DoesNotThrow(() => world.Update(0.01)); } [Reads(typeof(MockComponent))] @@ -789,7 +789,7 @@ namespace Tests worldBuilder.AddEngine(new MessageReadEngine()); var entity = worldBuilder.CreateEntity(); - worldBuilder.AddComponent(entity, new MockComponent {}); + worldBuilder.SetComponent(entity, new MockComponent {}); var world = worldBuilder.Build(); diff --git a/test/GeneralRendererTest.cs b/test/GeneralRendererTest.cs index bd4b4ca..a508bab 100644 --- a/test/GeneralRendererTest.cs +++ b/test/GeneralRendererTest.cs @@ -32,7 +32,7 @@ namespace Tests AComponent aComponent; var entity = worldBuilder.CreateEntity(); - var componentID = worldBuilder.AddComponent(entity, aComponent); + var componentID = worldBuilder.SetComponent(entity, aComponent); var world = worldBuilder.Build(); @@ -52,10 +52,10 @@ namespace Tests AComponent aComponentTwo; var entity = worldBuilder.CreateEntity(); - var componentID = worldBuilder.AddComponent(entity, aComponent); + var componentID = worldBuilder.SetComponent(entity, aComponent); var entityB = worldBuilder.CreateEntity(); - var componentTwoID = worldBuilder.AddComponent(entityB, aComponentTwo); + var componentTwoID = worldBuilder.SetComponent(entityB, aComponentTwo); var world = worldBuilder.Build(); world.Update(0.01f); diff --git a/test/OrderedRendererTest.cs b/test/OrderedRendererTest.cs index 84f3870..a6e7b19 100644 --- a/test/OrderedRendererTest.cs +++ b/test/OrderedRendererTest.cs @@ -52,9 +52,9 @@ namespace Tests TestDrawComponent testDrawComponent; var entity = worldBuilder.CreateEntity(); - worldBuilder.AddComponent(entity, aComponent); - worldBuilder.AddComponent(entity, cComponent); - var testDrawComponentID = worldBuilder.AddDrawComponent(entity, testDrawComponent, 2); + worldBuilder.SetComponent(entity, aComponent); + worldBuilder.SetComponent(entity, cComponent); + var testDrawComponentID = worldBuilder.SetDrawComponent(entity, testDrawComponent, 2); var world = worldBuilder.Build(); @@ -72,7 +72,7 @@ namespace Tests { foreach (var (componentID, component) in ReadComponents()) { - Destroy(GetEntityIDByComponentID(componentID)); + Destroy(GetEntityIDByComponentID(componentID)); } } } @@ -88,7 +88,7 @@ namespace Tests TestDrawComponent testDrawComponent; var entity = worldBuilder.CreateEntity(); - var testDrawComponentID = worldBuilder.AddDrawComponent(entity, testDrawComponent, 1); + var testDrawComponentID = worldBuilder.SetDrawComponent(entity, testDrawComponent, 1); var world = worldBuilder.Build(); diff --git a/test/WorldTest.cs b/test/WorldTest.cs index 9864f5a..e43dda0 100644 --- a/test/WorldTest.cs +++ b/test/WorldTest.cs @@ -43,26 +43,26 @@ namespace Tests TestDrawComponent testDrawComponent = default(TestDrawComponent); var entity = worldBuilder.CreateEntity(); - worldBuilder.AddComponent(entity, testComponent); - var testDrawComponentOneID = worldBuilder.AddDrawComponent(entity, testDrawComponent, 3); + worldBuilder.SetComponent(entity, testComponent); + var testDrawComponentOneID = worldBuilder.SetDrawComponent(entity, testDrawComponent, 3); TestDrawComponent testDrawComponentTwo = default(TestDrawComponent); var entityTwo = worldBuilder.CreateEntity(); - worldBuilder.AddComponent(entityTwo, testComponent); - var testDrawComponentTwoID = worldBuilder.AddDrawComponent(entityTwo, testDrawComponentTwo, 1); + worldBuilder.SetComponent(entityTwo, testComponent); + var testDrawComponentTwoID = worldBuilder.SetDrawComponent(entityTwo, testDrawComponentTwo, 1); TestDrawComponent testDrawComponentThree = default(TestDrawComponent); var entityThree = worldBuilder.CreateEntity(); - worldBuilder.AddComponent(entityThree, testComponent); - var testDrawComponentThreeID = worldBuilder.AddDrawComponent(entityThree, testDrawComponentThree, 5); + worldBuilder.SetComponent(entityThree, testComponent); + var testDrawComponentThreeID = worldBuilder.SetDrawComponent(entityThree, testDrawComponentThree, 5); TestDrawComponent testDrawComponentFour = default(TestDrawComponent); var entityFour = worldBuilder.CreateEntity(); - worldBuilder.AddComponent(entityFour, testComponent); - var testDrawComponentFourID = worldBuilder.AddDrawComponent(entityFour, testDrawComponentFour, -5); + worldBuilder.SetComponent(entityFour, testComponent); + var testDrawComponentFourID = worldBuilder.SetDrawComponent(entityFour, testDrawComponentFour, -5); var world = worldBuilder.Build();