read existing or pending components automagically based on attribute declarations
							parent
							
								
									911f766cfa
								
							
						
					
					
						commit
						fd8a0b1b00
					
				|  | @ -1,4 +1,4 @@ | |||
| { | ||||
|     "dotnet-test-explorer.testProjectPath": "test", | ||||
|     "omnisharp.path": "latest" | ||||
|     // "dotnet-test-explorer.testProjectPath": "test" | ||||
|     // "omnisharp.path": "latest" | ||||
| } | ||||
|  |  | |||
|  | @ -171,29 +171,61 @@ namespace Encompass | |||
|             componentManager.MarkForDeactivation(componentID); | ||||
|         } | ||||
| 
 | ||||
|         private IEnumerable<ValueTuple<Guid, TComponent>> ExistingComponentsOnEntity<TComponent>(Entity entity) where TComponent : struct, IComponent | ||||
|         private IEnumerable<ValueTuple<Entity, Guid, TComponent>> ExistingComponents<TComponent>() where TComponent : struct, IComponent | ||||
|         { | ||||
|             if (!receiveTypes.Contains(typeof(ComponentMessage<TComponent>))) | ||||
|             return ReadMessages<ComponentMessage<TComponent>>().Select((message) => (message.entity, message.componentID, message.component)); | ||||
|         } | ||||
| 
 | ||||
|         private IEnumerable<ValueTuple<Entity, Guid, TComponent>> PendingComponents<TComponent>() where TComponent : struct, IComponent | ||||
|         { | ||||
|             return ReadMessages<PendingComponentMessage<TComponent>>().Select((message) => (message.entity, message.componentID, message.component)); | ||||
|         } | ||||
| 
 | ||||
|         private IEnumerable<ValueTuple<Entity, Guid, TComponent>> ReadComponentMessages<TComponent>() where TComponent : struct, IComponent | ||||
|         { | ||||
|             var pendingRead = receiveTypes.Contains(typeof(PendingComponentMessage<TComponent>)); | ||||
|             var existingRead = receiveTypes.Contains(typeof(ComponentMessage<TComponent>)); | ||||
|             if (existingRead && pendingRead) | ||||
|             { | ||||
|                 return ExistingComponents<TComponent>().Union(PendingComponents<TComponent>()); | ||||
|             } | ||||
|             else if (existingRead) | ||||
|             { | ||||
|                 return ExistingComponents<TComponent>(); | ||||
|             } | ||||
|             else if (pendingRead) | ||||
|             { | ||||
|                 return PendingComponents<TComponent>(); | ||||
|             } | ||||
|             else | ||||
|             { | ||||
|                 throw new IllegalReadException("Engine {0} tried to read undeclared Component {1}", GetType().Name, typeof(TComponent).Name); | ||||
|             } | ||||
|         } | ||||
| 
 | ||||
|             return ReadMessages<ComponentMessage<TComponent>>().Where((message) => message.entity == entity).Select((message) => (message.componentID, message.component)); | ||||
|         private IEnumerable<ValueTuple<Guid, TComponent>> ExistingComponentsOnEntity<TComponent>(Entity entity) where TComponent : struct, IComponent | ||||
|         { | ||||
|             return ReadComponentMessages<TComponent>().Where((triple) => triple.Item1 == entity).Select((triple) => (triple.Item2, triple.Item3)); | ||||
|         } | ||||
| 
 | ||||
|         private IEnumerable<ValueTuple<Guid, TComponent>> PendingComponentsOnEntity<TComponent>(Entity entity) where TComponent : struct, IComponent | ||||
|         { | ||||
|             if (!receiveTypes.Contains(typeof(PendingComponentMessage<TComponent>))) | ||||
|             { | ||||
|                 throw new IllegalReadException("Engine {0} tried to read undeclared pending Component {1}", GetType().Name, typeof(TComponent).Name); | ||||
|             } | ||||
| 
 | ||||
|             return ReadMessages<PendingComponentMessage<TComponent>>().Where((message) => message.entity == entity).Select((message) => (message.componentID, message.component)); | ||||
|             return ReadComponentMessages<TComponent>().Where((triple) => triple.Item1 == entity).Select((triple) => (triple.Item2, triple.Item3)); | ||||
|         } | ||||
| 
 | ||||
|         protected IEnumerable<ValueTuple<Guid, TComponent>> GetPendingComponents<TComponent>(Entity entity) where TComponent : struct, IComponent | ||||
|         protected IEnumerable<ValueTuple<Guid, TComponent>> ReadComponents<TComponent>() where TComponent : struct, IComponent | ||||
|         { | ||||
|             return PendingComponentsOnEntity<TComponent>(entity); | ||||
|             return ReadComponentMessages<TComponent>().Select((triple) => (triple.Item2, triple.Item3)); | ||||
|         } | ||||
| 
 | ||||
|         protected ValueTuple<Guid, TComponent> ReadComponent<TComponent>() where TComponent : struct, IComponent | ||||
|         { | ||||
|             return ReadComponents<TComponent>().Single(); | ||||
|         } | ||||
| 
 | ||||
|         protected bool SomeComponent<TComponent>() where TComponent : struct, IComponent | ||||
|         { | ||||
|             return ReadComponentMessages<TComponent>().Any(); | ||||
|         } | ||||
| 
 | ||||
|         protected IEnumerable<ValueTuple<Guid, TComponent>> GetComponents<TComponent>(Entity entity) where TComponent : struct, IComponent | ||||
|  | @ -211,11 +243,6 @@ namespace Encompass | |||
|             return GetComponents<TComponent>(entity).First(); | ||||
|         } | ||||
| 
 | ||||
|         protected bool HasPendingComponent<TComponent>(Entity entity) where TComponent : struct, IComponent | ||||
|         { | ||||
|             return GetPendingComponents<TComponent>(entity).Any(); | ||||
|         } | ||||
| 
 | ||||
|         protected bool HasComponent<TComponent>(Entity entity) where TComponent : struct, IComponent | ||||
|         { | ||||
|             return GetComponents<TComponent>(entity).Any(); | ||||
|  | @ -264,36 +291,6 @@ namespace Encompass | |||
|             return ReadMessages<TMessage>().Single(); | ||||
|         } | ||||
| 
 | ||||
|         protected IEnumerable<ValueTuple<Guid, TComponent>> ReadPendingComponents<TComponent>() where TComponent : struct, IComponent | ||||
|         { | ||||
|             if (!receiveTypes.Contains(typeof(PendingComponentMessage<TComponent>))) | ||||
|             { | ||||
|                 throw new IllegalReadException("Engine {0} tried to read undeclared pending Component {1}", GetType().Name, typeof(TComponent).Name); | ||||
|             } | ||||
| 
 | ||||
|             return ReadMessages<PendingComponentMessage<TComponent>>().Select((message) => (message.componentID, message.component)); | ||||
|         } | ||||
| 
 | ||||
|         protected IEnumerable<ValueTuple<Guid, TComponent>> ReadComponents<TComponent>() where TComponent : struct, IComponent | ||||
|         { | ||||
|             if (!receiveTypes.Contains(typeof(ComponentMessage<TComponent>))) | ||||
|             { | ||||
|                 throw new IllegalReadException("Engine {0} tried to read undeclared Component {1}", this.GetType().Name, typeof(TComponent).Name); | ||||
|             } | ||||
| 
 | ||||
|             return ReadMessages<ComponentMessage<TComponent>>().Select((message) => (message.componentID, message.component)); | ||||
|         } | ||||
| 
 | ||||
|         protected ValueTuple<Guid, TComponent> ReadPendingComponent<TComponent>() where TComponent : struct, IComponent | ||||
|         { | ||||
|             return ReadPendingComponents<TComponent>().Single(); | ||||
|         } | ||||
| 
 | ||||
|         protected ValueTuple<Guid, TComponent> ReadComponent<TComponent>() where TComponent : struct, IComponent | ||||
|         { | ||||
|             return ReadComponents<TComponent>().Single(); | ||||
|         } | ||||
| 
 | ||||
|         protected bool SomeMessage<TMessage>() where TMessage : struct, IMessage | ||||
|         { | ||||
|             if (!receiveTypes.Contains(typeof(TMessage))) | ||||
|  | @ -304,26 +301,6 @@ namespace Encompass | |||
|             return ReadMessages<TMessage>().Any(); | ||||
|         } | ||||
| 
 | ||||
|         protected bool SomePendingComponent<TComponent>() where TComponent : struct, IComponent | ||||
|         { | ||||
|             if (!receiveTypes.Contains(typeof(PendingComponentMessage<TComponent>))) | ||||
|             { | ||||
|                 throw new IllegalReadException("Engine {0} tried to read undeclared pending Component {1}", GetType().Name, typeof(TComponent).Name); | ||||
|             } | ||||
| 
 | ||||
|             return ReadMessages<PendingComponentMessage<TComponent>>().Any(); | ||||
|         } | ||||
| 
 | ||||
|         protected bool SomeComponent<TComponent>() where TComponent : struct, IComponent | ||||
|         { | ||||
|             if (!receiveTypes.Contains(typeof(ComponentMessage<TComponent>))) | ||||
|             { | ||||
|                 throw new IllegalReadException("Engine {0} tried to read undeclared Component {1}", GetType().Name, typeof(TComponent).Name); | ||||
|             } | ||||
| 
 | ||||
|             return ReadMessages<ComponentMessage<TComponent>>().Any(); | ||||
|         } | ||||
| 
 | ||||
|         protected void Destroy(Guid entityID) | ||||
|         { | ||||
|             entityManager.MarkForDestroy(entityID); | ||||
|  |  | |||
|  | @ -136,7 +136,7 @@ namespace Tests | |||
| 
 | ||||
|             public override void Update(double dt) | ||||
|             { | ||||
|                 Assert.IsTrue(HasPendingComponent<MockComponent>(entity)); | ||||
|                 Assert.IsTrue(HasComponent<MockComponent>(entity)); | ||||
|             } | ||||
|         } | ||||
| 
 | ||||
|  | @ -489,7 +489,7 @@ namespace Tests | |||
|             { | ||||
|                 foreach (var checkHasMockComponentMessage in ReadMessages<CheckHasMockComponentMessage>()) | ||||
|                 { | ||||
|                     Assert.IsTrue(HasPendingComponent<MockComponent>(checkHasMockComponentMessage.entity)); | ||||
|                     Assert.IsTrue(HasComponent<MockComponent>(checkHasMockComponentMessage.entity)); | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue