diff --git a/encompass-cs/WorldBuilder.cs b/encompass-cs/WorldBuilder.cs index d8e678e..09ed567 100644 --- a/encompass-cs/WorldBuilder.cs +++ b/encompass-cs/WorldBuilder.cs @@ -91,7 +91,6 @@ namespace Encompass internal void RegisterComponent(Type componentType) { registeredComponentTypes.Add(componentType); - AddEngine((Engine)Activator.CreateInstance(typeof(ComponentEmitter<>).MakeGenericType(componentType))); } /// @@ -134,13 +133,10 @@ namespace Encompass foreach (var componentType in engine.readTypes.Union(engine.writeTypes)) { - if (!registeredComponentTypes.Contains(componentType)) - { - RegisterComponent(componentType); - } + RegisterComponent(componentType); } - foreach (var receiveType in engine.receiveTypes.Union(engine.readPendingTypes).Union(engine.readTypes)) + foreach (var receiveType in engine.receiveTypes.Union(engine.readPendingTypes)) { if (!typeToReaders.ContainsKey(receiveType)) { @@ -327,6 +323,14 @@ namespace Encompass } var engineOrder = new List(); + + foreach (var registeredComponentType in registeredComponentTypes) + { + var emitterEngine = (Engine)Activator.CreateInstance(typeof(ComponentEmitter<>).MakeGenericType(registeredComponentType)); + AddEngine(emitterEngine); + engineOrder.Add(emitterEngine); + } + foreach (var engine in engineGraph.TopologicalSort()) { engineOrder.Add(engine);