fix engine ordering issue with Spawner
							parent
							
								
									dc99f58334
								
							
						
					
					
						commit
						8d39c27b7f
					
				|  | @ -55,46 +55,38 @@ namespace Encompass | |||
|                 entityManager.RegisterEntityTracker(engine as IEntityTracker); | ||||
|             } | ||||
| 
 | ||||
|             var emitMessageAttribute = engine.GetType().GetCustomAttribute<Emits>(false); | ||||
|             if (emitMessageAttribute != null) | ||||
|             foreach (var emitMessageType in engine.emitMessageTypes) | ||||
|             { | ||||
|                 foreach (var emitMessageType in engine.GetType().GetCustomAttribute<Emits>(false).emitMessageTypes) | ||||
|                 if (!messageTypeToEmitters.ContainsKey(emitMessageType)) | ||||
|                 { | ||||
|                     if (!messageTypeToEmitters.ContainsKey(emitMessageType)) | ||||
|                     { | ||||
|                         messageTypeToEmitters.Add(emitMessageType, new HashSet<Engine>()); | ||||
|                     } | ||||
|                     messageTypeToEmitters.Add(emitMessageType, new HashSet<Engine>()); | ||||
|                 } | ||||
| 
 | ||||
|                     messageTypeToEmitters[emitMessageType].Add(engine); | ||||
|                 messageTypeToEmitters[emitMessageType].Add(engine); | ||||
| 
 | ||||
|                     if (messageTypeToReaders.ContainsKey(emitMessageType)) | ||||
|                 if (messageTypeToReaders.ContainsKey(emitMessageType)) | ||||
|                 { | ||||
|                     foreach (var reader in messageTypeToReaders[emitMessageType]) | ||||
|                     { | ||||
|                         foreach (var reader in messageTypeToReaders[emitMessageType]) | ||||
|                         { | ||||
|                             engineGraph.AddEdge(engine, reader); | ||||
|                         } | ||||
|                         engineGraph.AddEdge(engine, reader); | ||||
|                     } | ||||
|                 } | ||||
|             } | ||||
| 
 | ||||
|             var readMessageAttribute = engine.GetType().GetCustomAttribute<Reads>(false); | ||||
|             if (readMessageAttribute != null) | ||||
|             foreach (var readMessageType in engine.readMessageTypes) | ||||
|             { | ||||
|                 foreach (var readMessageType in engine.GetType().GetCustomAttribute<Reads>(false).readMessageTypes) | ||||
|                 if (!messageTypeToReaders.ContainsKey(readMessageType)) | ||||
|                 { | ||||
|                     if (!messageTypeToReaders.ContainsKey(readMessageType)) | ||||
|                     { | ||||
|                         messageTypeToReaders.Add(readMessageType, new HashSet<Engine>()); | ||||
|                     } | ||||
|                     messageTypeToReaders.Add(readMessageType, new HashSet<Engine>()); | ||||
|                 } | ||||
| 
 | ||||
|                     messageTypeToReaders[readMessageType].Add(engine); | ||||
|                 messageTypeToReaders[readMessageType].Add(engine); | ||||
| 
 | ||||
|                     if (messageTypeToEmitters.ContainsKey(readMessageType)) | ||||
|                 if (messageTypeToEmitters.ContainsKey(readMessageType)) | ||||
|                 { | ||||
|                     foreach (var emitter in messageTypeToEmitters[readMessageType]) | ||||
|                     { | ||||
|                         foreach (var emitter in messageTypeToEmitters[readMessageType]) | ||||
|                         { | ||||
|                             engineGraph.AddEdge(emitter, engine); | ||||
|                         } | ||||
|                         engineGraph.AddEdge(emitter, engine); | ||||
|                     } | ||||
|                 } | ||||
|             } | ||||
|  |  | |||
|  | @ -14,6 +14,15 @@ namespace Tests | |||
| 
 | ||||
|         static Entity resultEntity; | ||||
| 
 | ||||
|         [Emits(typeof(SpawnMessageA))] | ||||
|         class MessageEmitter : Engine | ||||
|         { | ||||
|             public override void Update(double dt) | ||||
|             { | ||||
|                 EmitMessage(new SpawnMessageA()); | ||||
|             } | ||||
|         } | ||||
| 
 | ||||
|         class TestSpawner : Spawner<SpawnMessageA> | ||||
|         { | ||||
|             protected override void Spawn(SpawnMessageA message) | ||||
|  | @ -27,10 +36,9 @@ namespace Tests | |||
|         public void RunsSpawnMethodOnMessageRead() | ||||
|         { | ||||
|             var worldBuilder = new WorldBuilder(); | ||||
|             worldBuilder.AddEngine(new MessageEmitter()); | ||||
|             worldBuilder.AddEngine(new TestSpawner()); | ||||
| 
 | ||||
|             worldBuilder.EmitMessage(new SpawnMessageA()); | ||||
| 
 | ||||
|             var world = worldBuilder.Build(); | ||||
| 
 | ||||
|             world.Update(0.01); | ||||
|  | @ -41,7 +49,7 @@ namespace Tests | |||
| 
 | ||||
|             world.Update(0.01); | ||||
| 
 | ||||
|             Assert.That(resultEntity.id, Is.EqualTo(id)); | ||||
|             Assert.That(resultEntity.id, Is.Not.EqualTo(id)); | ||||
|         } | ||||
|     } | ||||
| } | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue