IMessage + formatting
							parent
							
								
									dadd2a2397
								
							
						
					
					
						commit
						e2ecd37556
					
				|  | @ -2,8 +2,10 @@ using System; | ||||||
| using System.Collections.Generic; | using System.Collections.Generic; | ||||||
| using System.Linq; | using System.Linq; | ||||||
| 
 | 
 | ||||||
| namespace Encompass { | namespace Encompass | ||||||
|     internal class ComponentManager { | { | ||||||
|  |     internal class ComponentManager | ||||||
|  |     { | ||||||
|         private Dictionary<uint, List<IComponent>> entityIDToComponents = new Dictionary<uint, List<IComponent>>(); |         private Dictionary<uint, List<IComponent>> entityIDToComponents = new Dictionary<uint, List<IComponent>>(); | ||||||
|         private Dictionary<IComponent, uint> componentToEntityID = new Dictionary<IComponent, uint>(); |         private Dictionary<IComponent, uint> componentToEntityID = new Dictionary<IComponent, uint>(); | ||||||
| 
 | 
 | ||||||
|  | @ -14,15 +16,18 @@ namespace Encompass { | ||||||
|         private List<IComponent> componentsToDeactivate = new List<IComponent>(); |         private List<IComponent> componentsToDeactivate = new List<IComponent>(); | ||||||
|         private List<IComponent> componentsToRemove = new List<IComponent>(); |         private List<IComponent> componentsToRemove = new List<IComponent>(); | ||||||
| 
 | 
 | ||||||
|         internal void AddComponent<TComponent>(uint entityID, TComponent component) where TComponent : struct, IComponent { |         internal void AddComponent<TComponent>(uint entityID, TComponent component) where TComponent : struct, IComponent | ||||||
|             if (!entityIDToComponents.ContainsKey(entityID)) { |         { | ||||||
|  |             if (!entityIDToComponents.ContainsKey(entityID)) | ||||||
|  |             { | ||||||
|                 entityIDToComponents.Add(entityID, new List<IComponent>()); |                 entityIDToComponents.Add(entityID, new List<IComponent>()); | ||||||
|             } |             } | ||||||
| 
 | 
 | ||||||
|             entityIDToComponents[entityID].Add(component); |             entityIDToComponents[entityID].Add(component); | ||||||
|             componentToEntityID[component] = entityID; |             componentToEntityID[component] = entityID; | ||||||
| 
 | 
 | ||||||
|             if (!activeComponents.ContainsKey(typeof(TComponent))) { |             if (!activeComponents.ContainsKey(typeof(TComponent))) | ||||||
|  |             { | ||||||
|                 activeComponents.Add(typeof(TComponent), new List<IComponent>()); |                 activeComponents.Add(typeof(TComponent), new List<IComponent>()); | ||||||
|                 inactiveComponents.Add(typeof(TComponent), new List<IComponent>()); |                 inactiveComponents.Add(typeof(TComponent), new List<IComponent>()); | ||||||
|             } |             } | ||||||
|  | @ -30,30 +35,36 @@ namespace Encompass { | ||||||
|             MarkForActivation(component); |             MarkForActivation(component); | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         internal IEnumerable<IComponent> GetComponentsByEntity(uint entityID) { |         internal IEnumerable<IComponent> GetComponentsByEntity(uint entityID) | ||||||
|  |         { | ||||||
|             return entityIDToComponents[entityID]; |             return entityIDToComponents[entityID]; | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         internal IEnumerable<TComponent> GetActiveComponentsByType<TComponent>() where TComponent : struct, IComponent { |         internal IEnumerable<TComponent> GetActiveComponentsByType<TComponent>() where TComponent : struct, IComponent | ||||||
|  |         { | ||||||
|             return activeComponents[typeof(TComponent)].Cast<TComponent>(); |             return activeComponents[typeof(TComponent)].Cast<TComponent>(); | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         internal TComponent GetActiveComponentByType<TComponent>() where TComponent : struct, IComponent { |         internal TComponent GetActiveComponentByType<TComponent>() where TComponent : struct, IComponent | ||||||
|  |         { | ||||||
|             return GetActiveComponentsByType<TComponent>().Single(); |             return GetActiveComponentsByType<TComponent>().Single(); | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         internal IEnumerable<TComponent> GetComponentsByEntityAndType<TComponent>(uint entityID) where TComponent : struct, IComponent { |         internal IEnumerable<TComponent> GetComponentsByEntityAndType<TComponent>(uint entityID) where TComponent : struct, IComponent | ||||||
|  |         { | ||||||
|             var entity_components = GetComponentsByEntity(entityID).Cast<TComponent>(); |             var entity_components = GetComponentsByEntity(entityID).Cast<TComponent>(); | ||||||
|             var active_components_by_type = GetActiveComponentsByType<TComponent>(); |             var active_components_by_type = GetActiveComponentsByType<TComponent>(); | ||||||
|             return entity_components.Intersect(active_components_by_type).Cast<TComponent>(); |             return entity_components.Intersect(active_components_by_type).Cast<TComponent>(); | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         internal bool EntityHasComponentOfType<TComponent>(uint entityID) where TComponent : struct, IComponent { |         internal bool EntityHasComponentOfType<TComponent>(uint entityID) where TComponent : struct, IComponent | ||||||
|  |         { | ||||||
|             return GetComponentsByEntityAndType<TComponent>(entityID).Any(); |             return GetComponentsByEntityAndType<TComponent>(entityID).Any(); | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         /** Replaces the component with another. */ |         /** Replaces the component with another. */ | ||||||
|         internal void UpdateComponent<TComponent>(TComponent originalComponent, TComponent newComponent) where TComponent : struct, IComponent { |         internal void UpdateComponent<TComponent>(TComponent originalComponent, TComponent newComponent) where TComponent : struct, IComponent | ||||||
|  |         { | ||||||
|             var entityID = componentToEntityID[originalComponent]; |             var entityID = componentToEntityID[originalComponent]; | ||||||
| 
 | 
 | ||||||
|             entityIDToComponents[entityID].Remove(originalComponent); |             entityIDToComponents[entityID].Remove(originalComponent); | ||||||
|  | @ -62,31 +73,38 @@ namespace Encompass { | ||||||
|             componentToEntityID.Remove(originalComponent); |             componentToEntityID.Remove(originalComponent); | ||||||
|             componentToEntityID.Add(newComponent, entityID); |             componentToEntityID.Add(newComponent, entityID); | ||||||
| 
 | 
 | ||||||
|             if (activeComponents[originalComponent.GetType()].Remove(originalComponent)) { |             if (activeComponents[originalComponent.GetType()].Remove(originalComponent)) | ||||||
|  |             { | ||||||
|                 activeComponents[originalComponent.GetType()].Add(newComponent); |                 activeComponents[originalComponent.GetType()].Add(newComponent); | ||||||
|             } |             } | ||||||
| 
 | 
 | ||||||
|             if (inactiveComponents[originalComponent.GetType()].Remove(originalComponent)) { |             if (inactiveComponents[originalComponent.GetType()].Remove(originalComponent)) | ||||||
|  |             { | ||||||
|                 inactiveComponents[originalComponent.GetType()].Add(newComponent); |                 inactiveComponents[originalComponent.GetType()].Add(newComponent); | ||||||
|             } |             } | ||||||
| 
 | 
 | ||||||
|             if (componentsToActivate.Remove(originalComponent)) { |             if (componentsToActivate.Remove(originalComponent)) | ||||||
|  |             { | ||||||
|                 componentsToActivate.Add(newComponent); |                 componentsToActivate.Add(newComponent); | ||||||
|             } |             } | ||||||
| 
 | 
 | ||||||
|             if (componentsToDeactivate.Remove(originalComponent)) { |             if (componentsToDeactivate.Remove(originalComponent)) | ||||||
|  |             { | ||||||
|                 componentsToDeactivate.Add(newComponent); |                 componentsToDeactivate.Add(newComponent); | ||||||
|             } |             } | ||||||
| 
 | 
 | ||||||
|             if (componentsToRemove.Remove(originalComponent)) { |             if (componentsToRemove.Remove(originalComponent)) | ||||||
|  |             { | ||||||
|                 componentsToRemove.Add(newComponent); |                 componentsToRemove.Add(newComponent); | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         internal void RemoveAllComponentsFromEntity(uint entityID) { |         internal void RemoveAllComponentsFromEntity(uint entityID) | ||||||
|  |         { | ||||||
|             var components = GetComponentsByEntity(entityID); |             var components = GetComponentsByEntity(entityID); | ||||||
| 
 | 
 | ||||||
|             foreach (var component in components) { |             foreach (var component in components) | ||||||
|  |             { | ||||||
|                 activeComponents[component.GetType()].Remove(component); |                 activeComponents[component.GetType()].Remove(component); | ||||||
|                 inactiveComponents[component.GetType()].Remove(component); |                 inactiveComponents[component.GetType()].Remove(component); | ||||||
|             } |             } | ||||||
|  | @ -94,20 +112,25 @@ namespace Encompass { | ||||||
|             entityIDToComponents.Remove(entityID); |             entityIDToComponents.Remove(entityID); | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         internal void MarkForActivation(IComponent component) { |         internal void MarkForActivation(IComponent component) | ||||||
|  |         { | ||||||
|             componentsToActivate.Add(component); |             componentsToActivate.Add(component); | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         internal void MarkForDeactivation(IComponent component) { |         internal void MarkForDeactivation(IComponent component) | ||||||
|  |         { | ||||||
|             componentsToDeactivate.Add(component); |             componentsToDeactivate.Add(component); | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         internal void MarkForRemoval(IComponent component) { |         internal void MarkForRemoval(IComponent component) | ||||||
|  |         { | ||||||
|             componentsToRemove.Add(component); |             componentsToRemove.Add(component); | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         internal void ActivateComponents() { |         internal void ActivateComponents() | ||||||
|             foreach (var component in componentsToActivate) { |         { | ||||||
|  |             foreach (var component in componentsToActivate) | ||||||
|  |             { | ||||||
|                 activeComponents[component.GetType()].Add(component); |                 activeComponents[component.GetType()].Add(component); | ||||||
|                 inactiveComponents[component.GetType()].Remove(component); |                 inactiveComponents[component.GetType()].Remove(component); | ||||||
|             } |             } | ||||||
|  | @ -115,15 +138,19 @@ namespace Encompass { | ||||||
|             componentsToActivate.Clear(); |             componentsToActivate.Clear(); | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         internal void DeactivateComponents() { |         internal void DeactivateComponents() | ||||||
|             foreach (var component in componentsToDeactivate) { |         { | ||||||
|  |             foreach (var component in componentsToDeactivate) | ||||||
|  |             { | ||||||
|                 activeComponents[component.GetType()].Remove(component); |                 activeComponents[component.GetType()].Remove(component); | ||||||
|                 inactiveComponents[component.GetType()].Add(component); |                 inactiveComponents[component.GetType()].Add(component); | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         internal void RemoveComponents() { |         internal void RemoveComponents() | ||||||
|             foreach (var component in componentsToRemove) { |         { | ||||||
|  |             foreach (var component in componentsToRemove) | ||||||
|  |             { | ||||||
|                 activeComponents[component.GetType()].Remove(component); |                 activeComponents[component.GetType()].Remove(component); | ||||||
|                 inactiveComponents[component.GetType()].Remove(component); |                 inactiveComponents[component.GetType()].Remove(component); | ||||||
|             } |             } | ||||||
|  |  | ||||||
|  | @ -2,57 +2,73 @@ using System; | ||||||
| using System.Reflection; | using System.Reflection; | ||||||
| using System.Collections.Generic; | using System.Collections.Generic; | ||||||
| 
 | 
 | ||||||
| namespace Encompass { | namespace Encompass | ||||||
|     public abstract class Engine { | { | ||||||
|  |     public abstract class Engine | ||||||
|  |     { | ||||||
|         public readonly List<Type> mutateComponentTypes = new List<Type>(); |         public readonly List<Type> mutateComponentTypes = new List<Type>(); | ||||||
| 
 | 
 | ||||||
|         private EntityManager entityManager; |         private EntityManager entityManager; | ||||||
|         private ComponentManager componentManager; |         private ComponentManager componentManager; | ||||||
| 
 | 
 | ||||||
|         public Engine() { |         public Engine() | ||||||
|  |         { | ||||||
|             var mutatesAttribute = this.GetType().GetCustomAttribute<Mutates>(false); |             var mutatesAttribute = this.GetType().GetCustomAttribute<Mutates>(false); | ||||||
|             if (mutatesAttribute != null) { |             if (mutatesAttribute != null) | ||||||
|  |             { | ||||||
|                 mutateComponentTypes = mutatesAttribute.mutateComponentTypes; |                 mutateComponentTypes = mutatesAttribute.mutateComponentTypes; | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         internal void AssignEntityManager(EntityManager entityManager) { |         internal void AssignEntityManager(EntityManager entityManager) | ||||||
|  |         { | ||||||
|             this.entityManager = entityManager; |             this.entityManager = entityManager; | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         internal void AssignComponentManager(ComponentManager componentManager) { |         internal void AssignComponentManager(ComponentManager componentManager) | ||||||
|  |         { | ||||||
|             this.componentManager = componentManager; |             this.componentManager = componentManager; | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         public abstract void Update(float dt); |         public abstract void Update(float dt); | ||||||
| 
 | 
 | ||||||
|         protected Entity CreateEntity() { |         protected Entity CreateEntity() | ||||||
|  |         { | ||||||
|             return this.entityManager.CreateEntity(); |             return this.entityManager.CreateEntity(); | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         protected IEnumerable<TComponent> ReadComponents<TComponent>() where TComponent : struct, IComponent { |         protected IEnumerable<TComponent> ReadComponents<TComponent>() where TComponent : struct, IComponent | ||||||
|  |         { | ||||||
|             return this.componentManager.GetActiveComponentsByType<TComponent>(); |             return this.componentManager.GetActiveComponentsByType<TComponent>(); | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         protected TComponent ReadComponent<TComponent>() where TComponent : struct, IComponent { |         protected TComponent ReadComponent<TComponent>() where TComponent : struct, IComponent | ||||||
|  |         { | ||||||
|             return this.componentManager.GetActiveComponentByType<TComponent>(); |             return this.componentManager.GetActiveComponentByType<TComponent>(); | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         internal void UpdateComponentInWorld<TComponent>(TComponent originalComponent, TComponent newComponent) where TComponent : struct, IComponent { |         internal void UpdateComponentInWorld<TComponent>(TComponent originalComponent, TComponent newComponent) where TComponent : struct, IComponent | ||||||
|             if (mutateComponentTypes.Contains(typeof(TComponent))) { |         { | ||||||
|  |             if (mutateComponentTypes.Contains(typeof(TComponent))) | ||||||
|  |             { | ||||||
|                 this.componentManager.UpdateComponent(originalComponent, newComponent); |                 this.componentManager.UpdateComponent(originalComponent, newComponent); | ||||||
|             } else { |             } | ||||||
|  |             else | ||||||
|  |             { | ||||||
|                 throw new IllegalComponentMutationException("Engine {0} tried to mutate undeclared Component {1}", this.GetType().Name, typeof(TComponent).Name); |                 throw new IllegalComponentMutationException("Engine {0} tried to mutate undeclared Component {1}", this.GetType().Name, typeof(TComponent).Name); | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         protected void UpdateComponent<TComponent>(TComponent component, Func<TComponent, TComponent> updateFunction) where TComponent : struct, IComponent { |         protected void UpdateComponent<TComponent>(TComponent component, Func<TComponent, TComponent> updateFunction) where TComponent : struct, IComponent | ||||||
|  |         { | ||||||
|             var updatedComponent = updateFunction(component); |             var updatedComponent = updateFunction(component); | ||||||
|             this.UpdateComponentInWorld(component, updatedComponent); |             this.UpdateComponentInWorld(component, updatedComponent); | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         protected void UpdateComponents<TComponent>(IEnumerable<TComponent> components, Func<TComponent, TComponent> updateFunction) where TComponent : struct, IComponent { |         protected void UpdateComponents<TComponent>(IEnumerable<TComponent> components, Func<TComponent, TComponent> updateFunction) where TComponent : struct, IComponent | ||||||
|             foreach (var component in components) { |         { | ||||||
|  |             foreach (var component in components) | ||||||
|  |             { | ||||||
|                 this.UpdateComponent(component, updateFunction); |                 this.UpdateComponent(component, updateFunction); | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
|  |  | ||||||
|  | @ -9,28 +9,34 @@ namespace Encompass | ||||||
| 
 | 
 | ||||||
|         private ComponentManager componentManager; |         private ComponentManager componentManager; | ||||||
| 
 | 
 | ||||||
|         internal Entity(uint id, ComponentManager componentManager) { |         internal Entity(uint id, ComponentManager componentManager) | ||||||
|  |         { | ||||||
|             this.id = id; |             this.id = id; | ||||||
|             this.componentManager = componentManager; |             this.componentManager = componentManager; | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         public void AddComponent<TComponent>(TComponent component) where TComponent : struct, IComponent { |         public void AddComponent<TComponent>(TComponent component) where TComponent : struct, IComponent | ||||||
|  |         { | ||||||
|             componentManager.AddComponent<TComponent>(id, component); |             componentManager.AddComponent<TComponent>(id, component); | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         public IEnumerable<TComponent> GetComponents<TComponent>() where TComponent : struct, IComponent { |         public IEnumerable<TComponent> GetComponents<TComponent>() where TComponent : struct, IComponent | ||||||
|  |         { | ||||||
|             return componentManager.GetComponentsByEntityAndType<TComponent>(id); |             return componentManager.GetComponentsByEntityAndType<TComponent>(id); | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         public TComponent GetComponent<TComponent>() where TComponent : struct, IComponent { |         public TComponent GetComponent<TComponent>() where TComponent : struct, IComponent | ||||||
|  |         { | ||||||
|             return GetComponents<TComponent>().First(); |             return GetComponents<TComponent>().First(); | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         public bool HasComponent<TComponent>() where TComponent : struct, IComponent { |         public bool HasComponent<TComponent>() where TComponent : struct, IComponent | ||||||
|  |         { | ||||||
|             return componentManager.EntityHasComponentOfType<TComponent>(id); |             return componentManager.EntityHasComponentOfType<TComponent>(id); | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         internal void RemoveAllComponents() { |         internal void RemoveAllComponents() | ||||||
|  |         { | ||||||
|             componentManager.RemoveAllComponentsFromEntity(id); |             componentManager.RemoveAllComponentsFromEntity(id); | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  | @ -1,7 +1,9 @@ | ||||||
| using System.Collections.Generic; | using System.Collections.Generic; | ||||||
| 
 | 
 | ||||||
| namespace Encompass { | namespace Encompass | ||||||
|     internal class EntityManager { | { | ||||||
|  |     internal class EntityManager | ||||||
|  |     { | ||||||
|         private uint nextID = 1; |         private uint nextID = 1; | ||||||
| 
 | 
 | ||||||
|         private List<Entity> entities = new List<Entity>(); |         private List<Entity> entities = new List<Entity>(); | ||||||
|  | @ -13,29 +15,36 @@ namespace Encompass { | ||||||
| 
 | 
 | ||||||
|         public EntityManager( |         public EntityManager( | ||||||
|             ComponentManager componentManager |             ComponentManager componentManager | ||||||
|         ) { |         ) | ||||||
|  |         { | ||||||
|             this.componentManager = componentManager; |             this.componentManager = componentManager; | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         public Entity CreateEntity() { |         public Entity CreateEntity() | ||||||
|  |         { | ||||||
|             return new Entity(NextID(), componentManager); |             return new Entity(NextID(), componentManager); | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         public Entity GetEntity(uint id) { |         public Entity GetEntity(uint id) | ||||||
|  |         { | ||||||
|             return this.IDToEntity[id]; |             return this.IDToEntity[id]; | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         public void MarkForDestroy(Entity entity) { |         public void MarkForDestroy(Entity entity) | ||||||
|  |         { | ||||||
|             entitiesMarkedForDestroy.Add(entity); |             entitiesMarkedForDestroy.Add(entity); | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         internal void DestroyMarkedEntities() { |         internal void DestroyMarkedEntities() | ||||||
|             foreach (var entity in entitiesMarkedForDestroy) { |         { | ||||||
|  |             foreach (var entity in entitiesMarkedForDestroy) | ||||||
|  |             { | ||||||
|                 entity.RemoveAllComponents(); |                 entity.RemoveAllComponents(); | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         private uint NextID() { |         private uint NextID() | ||||||
|  |         { | ||||||
|             var id = this.nextID; |             var id = this.nextID; | ||||||
|             this.nextID++; |             this.nextID++; | ||||||
|             return id; |             return id; | ||||||
|  |  | ||||||
|  | @ -1,4 +1,4 @@ | ||||||
| namespace Encompass | namespace Encompass | ||||||
| { | { | ||||||
|     public interface IComponent {} |     public interface IComponent { } | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -0,0 +1,4 @@ | ||||||
|  | namespace Encompass | ||||||
|  | { | ||||||
|  |     public interface IMessage { } | ||||||
|  | } | ||||||
							
								
								
									
										15
									
								
								src/World.cs
								
								
								
								
							
							
						
						
									
										15
									
								
								src/World.cs
								
								
								
								
							|  | @ -1,7 +1,9 @@ | ||||||
| using System.Collections.Generic; | using System.Collections.Generic; | ||||||
| 
 | 
 | ||||||
| namespace Encompass { | namespace Encompass | ||||||
|     public class World { | { | ||||||
|  |     public class World | ||||||
|  |     { | ||||||
|         private List<Engine> engines; |         private List<Engine> engines; | ||||||
|         private EntityManager entityManager; |         private EntityManager entityManager; | ||||||
|         private ComponentManager componentManager; |         private ComponentManager componentManager; | ||||||
|  | @ -10,14 +12,17 @@ namespace Encompass { | ||||||
|             List<Engine> engines, |             List<Engine> engines, | ||||||
|             EntityManager entityManager, |             EntityManager entityManager, | ||||||
|             ComponentManager componentManager |             ComponentManager componentManager | ||||||
|         ) { |         ) | ||||||
|  |         { | ||||||
|             this.engines = engines; |             this.engines = engines; | ||||||
|             this.entityManager = entityManager; |             this.entityManager = entityManager; | ||||||
|             this.componentManager = componentManager; |             this.componentManager = componentManager; | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         public void Update(float dt) { |         public void Update(float dt) | ||||||
|             foreach (var engine in engines) { |         { | ||||||
|  |             foreach (var engine in engines) | ||||||
|  |             { | ||||||
|                 engine.Update(dt); |                 engine.Update(dt); | ||||||
|             } |             } | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -1,22 +1,27 @@ | ||||||
| using System.Collections.Generic; | using System.Collections.Generic; | ||||||
| 
 | 
 | ||||||
| namespace Encompass { | namespace Encompass | ||||||
|     public class WorldBuilder { | { | ||||||
|  |     public class WorldBuilder | ||||||
|  |     { | ||||||
|         private List<Engine> engines = new List<Engine>(); |         private List<Engine> engines = new List<Engine>(); | ||||||
| 
 | 
 | ||||||
|         private ComponentManager componentManager; |         private ComponentManager componentManager; | ||||||
|         private EntityManager entityManager; |         private EntityManager entityManager; | ||||||
| 
 | 
 | ||||||
|         public WorldBuilder() { |         public WorldBuilder() | ||||||
|  |         { | ||||||
|             componentManager = new ComponentManager(); |             componentManager = new ComponentManager(); | ||||||
|             entityManager = new EntityManager(componentManager); |             entityManager = new EntityManager(componentManager); | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         public Entity CreateEntity() { |         public Entity CreateEntity() | ||||||
|  |         { | ||||||
|             return this.entityManager.CreateEntity(); |             return this.entityManager.CreateEntity(); | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         public Engine AddEngine<TEngine>() where TEngine : Engine, new() { |         public Engine AddEngine<TEngine>() where TEngine : Engine, new() | ||||||
|  |         { | ||||||
|             var engine = new TEngine(); |             var engine = new TEngine(); | ||||||
| 
 | 
 | ||||||
|             engine.AssignEntityManager(this.entityManager); |             engine.AssignEntityManager(this.entityManager); | ||||||
|  | @ -27,7 +32,8 @@ namespace Encompass { | ||||||
|             return engine; |             return engine; | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         public World Build() { |         public World Build() | ||||||
|  |         { | ||||||
|             var world = new World( |             var world = new World( | ||||||
|                 this.engines, |                 this.engines, | ||||||
|                 this.entityManager, |                 this.entityManager, | ||||||
|  |  | ||||||
|  | @ -1,7 +1,8 @@ | ||||||
| using System; | using System; | ||||||
| using System.Collections.Generic; | using System.Collections.Generic; | ||||||
| 
 | 
 | ||||||
| namespace Encompass { | namespace Encompass | ||||||
|  | { | ||||||
|     [System.AttributeUsage(System.AttributeTargets.Class)] |     [System.AttributeUsage(System.AttributeTargets.Class)] | ||||||
|     public class Mutates : System.Attribute |     public class Mutates : System.Attribute | ||||||
|     { |     { | ||||||
|  |  | ||||||
|  | @ -16,5 +16,6 @@ | ||||||
|     <Content Include="exceptions\IllegalComponentMutationException.cs" /> |     <Content Include="exceptions\IllegalComponentMutationException.cs" /> | ||||||
|     <Content Include="graph\DirectedGraph.cs" /> |     <Content Include="graph\DirectedGraph.cs" /> | ||||||
|     <Content Include="IComponent.cs" /> |     <Content Include="IComponent.cs" /> | ||||||
|  |     <Content Include="IMessage.cs" /> | ||||||
|   </ItemGroup> |   </ItemGroup> | ||||||
| </Project> | </Project> | ||||||
|  | @ -1,7 +1,9 @@ | ||||||
| using System; | using System; | ||||||
| 
 | 
 | ||||||
| namespace Encompass { | namespace Encompass | ||||||
|     public class IllegalComponentMutationException : Exception { | { | ||||||
|  |     public class IllegalComponentMutationException : Exception | ||||||
|  |     { | ||||||
|         public IllegalComponentMutationException( |         public IllegalComponentMutationException( | ||||||
|             string format, |             string format, | ||||||
|             params object[] args |             params object[] args | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue