using System; using System.Collections.Generic; namespace Encompass { internal class EntityManager { private readonly HashSet IDs = new HashSet(); private readonly HashSet entitiesMarkedForDestroy = new HashSet(); private readonly ComponentManager componentManager; public EntityManager(ComponentManager componentManager) { this.componentManager = componentManager; } public Entity CreateEntity() { var id = NextID(); var entity = new Entity(id); IDs.Add(id); return entity; } public bool EntityExists(Guid id) { return IDs.Contains(id); } public void MarkForDestroy(Entity entity) { entitiesMarkedForDestroy.Add(entity); } public void DestroyMarkedEntities() { foreach (var entity in entitiesMarkedForDestroy) { componentManager.MarkAllComponentsOnEntityForRemoval(entity); IDs.Remove(entity.ID); } entitiesMarkedForDestroy.Clear(); } private Guid NextID() { return Guid.NewGuid(); } } }