better error message when component is not found on entity
							parent
							
								
									9b0bf34c73
								
							
						
					
					
						commit
						936b97c4ec
					
				|  | @ -22,6 +22,7 @@ namespace Encompass | |||
| 
 | ||||
|         public TComponent Get(int entityID) | ||||
|         { | ||||
|             if (!store.ContainsKey(entityID)) { throw new Exceptions.NoComponentOfTypeOnEntityException("No component of type {0} exists on Entity with ID {1}", typeof(TComponent), entityID); } | ||||
|             return store[entityID]; | ||||
|         } | ||||
| 
 | ||||
|  |  | |||
|  | @ -1,12 +0,0 @@ | |||
| using System; | ||||
| 
 | ||||
| namespace Encompass.Exceptions | ||||
| { | ||||
|     public class ComponentNotFoundException : Exception | ||||
|     { | ||||
|         public ComponentNotFoundException( | ||||
|             string format, | ||||
|             params object[] args | ||||
|         ) : base(string.Format(format, args)) { } | ||||
|     } | ||||
| } | ||||
|  | @ -1,12 +0,0 @@ | |||
| using System; | ||||
| 
 | ||||
| namespace Encompass.Exceptions | ||||
| { | ||||
|     public class ComponentTypeMismatchException : Exception | ||||
|     { | ||||
|         public ComponentTypeMismatchException( | ||||
|             string format, | ||||
|             params object[] args | ||||
|         ) : base(string.Format(format, args)) { } | ||||
|     } | ||||
| } | ||||
|  | @ -1,12 +0,0 @@ | |||
| using System; | ||||
| 
 | ||||
| namespace Encompass.Exceptions | ||||
| { | ||||
|     public class RepeatUpdateComponentException : Exception | ||||
|     { | ||||
|         public RepeatUpdateComponentException( | ||||
|             string format, | ||||
|             params object[] args | ||||
|         ) : base(string.Format(format, args)) { } | ||||
|     } | ||||
| } | ||||
|  | @ -833,7 +833,7 @@ namespace Tests | |||
|             worldBuilder.AddEngine(new ReadEntityByComponentTypeEngine()); | ||||
| 
 | ||||
|             var entity = worldBuilder.CreateEntity(); | ||||
|             worldBuilder.SetComponent(entity, new MockComponent { }); | ||||
|             worldBuilder.SetComponent(entity, new MockComponent()); | ||||
| 
 | ||||
|             var world = worldBuilder.Build(); | ||||
|             world.Update(0.01); | ||||
|  | @ -841,7 +841,69 @@ namespace Tests | |||
|             entity.Should().BeEquivalentTo(readEntity); | ||||
|         } | ||||
| 
 | ||||
|         struct MockComponentB : IComponent | ||||
|         { | ||||
|             public MockComponentB(int value) | ||||
|             { | ||||
|                 this.value = value; | ||||
|             } | ||||
| 
 | ||||
|             int value; | ||||
|         } | ||||
| 
 | ||||
|         static MockComponentB getComponentResult; | ||||
| 
 | ||||
|         [Reads(typeof(MockComponent), typeof(MockComponentB))] | ||||
|         class GetComponentEngine : Engine | ||||
|         { | ||||
|             public override void Update(double dt) | ||||
|             { | ||||
|                 getComponentResult = GetComponent<MockComponentB>(ReadEntity<MockComponent>()); | ||||
|             } | ||||
|         } | ||||
| 
 | ||||
|         [Test] | ||||
|         public void GetComponent() | ||||
|         { | ||||
|             var worldBuilder = new WorldBuilder(); | ||||
| 
 | ||||
|             var entity = worldBuilder.CreateEntity(); | ||||
| 
 | ||||
|             worldBuilder.SetComponent(entity, new MockComponent()); | ||||
|             worldBuilder.SetComponent(entity, new MockComponentB(3)); | ||||
|             worldBuilder.AddEngine(new GetComponentEngine()); | ||||
| 
 | ||||
|             var world = worldBuilder.Build(); | ||||
| 
 | ||||
|             world.Update(0.01); | ||||
| 
 | ||||
|             getComponentResult.Should().BeEquivalentTo(new MockComponentB(3)); | ||||
|         } | ||||
| 
 | ||||
|         [Reads(typeof(MockComponent), typeof(MockComponentB))] | ||||
|         class GetComponentExceptionEngine : Engine | ||||
|         { | ||||
|             public override void Update(double dt) | ||||
|             { | ||||
|                 foreach (var entity in ReadEntities<MockComponent>()) | ||||
|                 { | ||||
|                     GetComponent<MockComponentB>(entity); | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
| 
 | ||||
|         [Test] | ||||
|         public void GetComponentWhenComponentIsNotOnEntity() | ||||
|         { | ||||
|             var worldBuilder = new WorldBuilder(); | ||||
|             worldBuilder.AddEngine(new GetComponentExceptionEngine()); | ||||
| 
 | ||||
|             var entity = worldBuilder.CreateEntity(); | ||||
|             worldBuilder.SetComponent(entity, new MockComponent()); | ||||
| 
 | ||||
|             var world = worldBuilder.Build(); | ||||
|             Assert.Throws<Encompass.Exceptions.NoComponentOfTypeOnEntityException>(() => world.Update(0.01)); | ||||
|         } | ||||
| 
 | ||||
|         static Entity[] readEntities; | ||||
| 
 | ||||
|  | @ -1606,6 +1668,25 @@ namespace Tests | |||
|                 Assert.DoesNotThrow(() => world.Update(0.2)); | ||||
|                 Assert.DoesNotThrow(() => world.Update(0.25)); | ||||
|             } | ||||
| 
 | ||||
|             [Test] | ||||
|             public void DestroyedEntitiesAreRemovedFromTracking() | ||||
|             { | ||||
|                 var worldBuilder = new WorldBuilder(); | ||||
| 
 | ||||
|                 var entity = worldBuilder.CreateEntity(); | ||||
|                 worldBuilder.SetComponent(entity, new MockComponent()); | ||||
| 
 | ||||
|                 worldBuilder.AddEngine(new DestroyWithEngine()); | ||||
|                 worldBuilder.AddEngine(new ReadEntitiesWithComponentTypeEngine()); | ||||
| 
 | ||||
|                 var world = worldBuilder.Build(); | ||||
| 
 | ||||
|                 world.Update(0.01); | ||||
|                 world.Update(0.01); | ||||
| 
 | ||||
|                 readEntities.Should().BeEmpty(); | ||||
|             } | ||||
|         } | ||||
|     } | ||||
| } | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue