more hashset pools
parent
e808565342
commit
fc36d0ace7
|
@ -12,7 +12,7 @@ namespace Encompass
|
|||
|
||||
private readonly Dictionary<Guid, Type> componentIDToType = new Dictionary<Guid, Type>();
|
||||
private readonly Dictionary<Guid, IComponent> IDToComponent = new Dictionary<Guid, IComponent>();
|
||||
private readonly Dictionary<Guid, HashSet<Guid>> entityIDToComponentIDs = new Dictionary<Guid, HashSet<Guid>>();
|
||||
private readonly Dictionary<Guid, PooledSet<Guid>> entityIDToComponentIDs = new Dictionary<Guid, PooledSet<Guid>>();
|
||||
private readonly Dictionary<Guid, Guid> componentIDToEntityID = new Dictionary<Guid, Guid>();
|
||||
|
||||
private readonly Dictionary<Guid, PooledDictionary<Type, PooledSet<Guid>>> entityIDToComponentTypeToComponentIDs = new Dictionary<Guid, PooledDictionary<Type, PooledSet<Guid>>>();
|
||||
|
@ -30,7 +30,7 @@ namespace Encompass
|
|||
|
||||
internal void RegisterEntity(Guid entityID)
|
||||
{
|
||||
entityIDToComponentIDs.Add(entityID, new HashSet<Guid>());
|
||||
entityIDToComponentIDs.Add(entityID, new PooledSet<Guid>());
|
||||
entityIDToComponentTypeToComponentIDs.Add(entityID, new PooledDictionary<Type, PooledSet<Guid>>());
|
||||
}
|
||||
|
||||
|
@ -72,8 +72,7 @@ namespace Encompass
|
|||
|
||||
internal IEnumerable<Guid> GetComponentIDsByEntityID(Guid entityID)
|
||||
{
|
||||
HashSet<Guid> idSet;
|
||||
if (entityIDToComponentIDs.TryGetValue(entityID, out idSet))
|
||||
if (entityIDToComponentIDs.TryGetValue(entityID, out PooledSet<Guid> idSet))
|
||||
{
|
||||
return idSet;
|
||||
}
|
||||
|
@ -82,8 +81,7 @@ namespace Encompass
|
|||
|
||||
internal IEnumerable<(Guid, TComponent)> GetComponentsByType<TComponent>() where TComponent : struct, IComponent
|
||||
{
|
||||
HashSet<Guid> idSet;
|
||||
if (typeToComponentIDs.TryGetValue(typeof(TComponent), out idSet))
|
||||
if (typeToComponentIDs.TryGetValue(typeof(TComponent), out HashSet<Guid> idSet))
|
||||
{
|
||||
return idSet.Select(id => (id, (TComponent)IDToComponent[id]));
|
||||
}
|
||||
|
@ -92,8 +90,7 @@ namespace Encompass
|
|||
|
||||
internal IEnumerable<ValueTuple<Guid, TComponent>> GetComponentsByEntityAndType<TComponent>(Guid entityID) where TComponent : struct, IComponent
|
||||
{
|
||||
PooledSet<Guid> idSet;
|
||||
if (entityIDToComponentTypeToComponentIDs.ContainsKey(entityID) && entityIDToComponentTypeToComponentIDs[entityID].TryGetValue(typeof(TComponent), out idSet))
|
||||
if (entityIDToComponentTypeToComponentIDs.ContainsKey(entityID) && entityIDToComponentTypeToComponentIDs[entityID].TryGetValue(typeof(TComponent), out PooledSet<Guid> idSet))
|
||||
{
|
||||
return idSet.Select(id => (id, (TComponent)IDToComponent[id]));
|
||||
}
|
||||
|
@ -102,8 +99,7 @@ namespace Encompass
|
|||
|
||||
internal bool EntityHasComponentOfType<TComponent>(Guid entityID) where TComponent : struct, IComponent
|
||||
{
|
||||
PooledSet<Guid> idSet;
|
||||
if (entityIDToComponentTypeToComponentIDs.ContainsKey(entityID) && entityIDToComponentTypeToComponentIDs[entityID].TryGetValue(typeof(TComponent), out idSet))
|
||||
if (entityIDToComponentTypeToComponentIDs.ContainsKey(entityID) && entityIDToComponentTypeToComponentIDs[entityID].TryGetValue(typeof(TComponent), out PooledSet<Guid> idSet))
|
||||
{
|
||||
return idSet.Count > 0;
|
||||
}
|
||||
|
@ -113,8 +109,7 @@ namespace Encompass
|
|||
|
||||
internal bool ComponentOfTypeExists<TComponent>() where TComponent : struct, IComponent
|
||||
{
|
||||
HashSet<Guid> idSet;
|
||||
if (typeToComponentIDs.TryGetValue(typeof(TComponent), out idSet))
|
||||
if (typeToComponentIDs.TryGetValue(typeof(TComponent), out HashSet<Guid> idSet))
|
||||
{
|
||||
return idSet.Count > 0;
|
||||
}
|
||||
|
@ -200,6 +195,7 @@ namespace Encompass
|
|||
|
||||
public void RegisterDestroyedEntity(Guid entityID)
|
||||
{
|
||||
entityIDToComponentIDs[entityID].Dispose();
|
||||
entityIDToComponentIDs.Remove(entityID);
|
||||
|
||||
foreach (var set in entityIDToComponentTypeToComponentIDs[entityID].Values)
|
||||
|
|
|
@ -152,8 +152,7 @@ namespace Encompass
|
|||
|
||||
internal IEnumerable<(Guid, TComponent)> ReadExistingAndPendingComponentsByType<TComponent>() where TComponent : struct, IComponent
|
||||
{
|
||||
HashSet<Guid> idSet;
|
||||
if (componentMessageTypeToComponentIDs.TryGetValue(typeof(TComponent), out idSet))
|
||||
if (componentMessageTypeToComponentIDs.TryGetValue(typeof(TComponent), out HashSet<Guid> idSet))
|
||||
{
|
||||
return idSet.Select(id => (id, (TComponent)componentIDToComponent[id]));
|
||||
}
|
||||
|
@ -163,8 +162,7 @@ namespace Encompass
|
|||
|
||||
internal IEnumerable<(Guid, TComponent)> ReadExistingComponentsByType<TComponent>() where TComponent: struct, IComponent
|
||||
{
|
||||
HashSet<Guid> idSet;
|
||||
if (componentMessageTypeToExistingComponentIDs.TryGetValue(typeof(TComponent), out idSet))
|
||||
if (componentMessageTypeToExistingComponentIDs.TryGetValue(typeof(TComponent), out HashSet<Guid> idSet))
|
||||
{
|
||||
return idSet.Select(id => (id, (TComponent)componentIDToComponent[id]));
|
||||
}
|
||||
|
@ -174,8 +172,7 @@ namespace Encompass
|
|||
|
||||
internal IEnumerable<(Guid, TComponent)> ReadPendingComponentsByType<TComponent>() where TComponent : struct, IComponent
|
||||
{
|
||||
HashSet<Guid> idSet;
|
||||
if (componentMessageTypeToPendingComponentIDs.TryGetValue(typeof(TComponent), out idSet))
|
||||
if (componentMessageTypeToPendingComponentIDs.TryGetValue(typeof(TComponent), out HashSet<Guid> idSet))
|
||||
{
|
||||
return idSet.Select(id => (id, (TComponent)componentIDToComponent[id]));
|
||||
}
|
||||
|
@ -204,8 +201,7 @@ namespace Encompass
|
|||
|
||||
internal bool SomeExistingOrPendingComponent<TComponent>() where TComponent : struct, IComponent
|
||||
{
|
||||
HashSet<Guid> idSet;
|
||||
if (componentMessageTypeToComponentIDs.TryGetValue(typeof(TComponent), out idSet))
|
||||
if (componentMessageTypeToComponentIDs.TryGetValue(typeof(TComponent), out HashSet<Guid> idSet))
|
||||
{
|
||||
return idSet.Count > 0;
|
||||
}
|
||||
|
@ -215,8 +211,7 @@ namespace Encompass
|
|||
|
||||
internal bool SomeExistingComponent<TComponent>() where TComponent : struct, IComponent
|
||||
{
|
||||
HashSet<Guid> idSet;
|
||||
if (componentMessageTypeToExistingComponentIDs.TryGetValue(typeof(TComponent), out idSet))
|
||||
if (componentMessageTypeToExistingComponentIDs.TryGetValue(typeof(TComponent), out HashSet<Guid> idSet))
|
||||
{
|
||||
return idSet.Count > 0;
|
||||
}
|
||||
|
@ -226,8 +221,7 @@ namespace Encompass
|
|||
|
||||
internal bool SomePendingComponent<TComponent>() where TComponent : struct, IComponent
|
||||
{
|
||||
HashSet<Guid> idSet;
|
||||
if (componentMessageTypeToPendingComponentIDs.TryGetValue(typeof(TComponent), out idSet))
|
||||
if (componentMessageTypeToPendingComponentIDs.TryGetValue(typeof(TComponent), out HashSet<Guid> idSet))
|
||||
{
|
||||
return idSet.Count > 0;
|
||||
}
|
||||
|
@ -239,8 +233,7 @@ namespace Encompass
|
|||
|
||||
internal IEnumerable<(Guid, TComponent)> ReadExistingAndPendingComponentsByEntityAndType<TComponent>(Entity entity) where TComponent : struct, IComponent
|
||||
{
|
||||
PooledSet<Guid> idSet;
|
||||
if (entityToTypeToComponentIDs.ContainsKey(entity) && entityToTypeToComponentIDs[entity].TryGetValue(typeof(TComponent), out idSet))
|
||||
if (entityToTypeToComponentIDs.ContainsKey(entity) && entityToTypeToComponentIDs[entity].TryGetValue(typeof(TComponent), out PooledSet<Guid> idSet))
|
||||
{
|
||||
return idSet.Select(id => (id, (TComponent)componentIDToComponent[id]));
|
||||
}
|
||||
|
@ -250,8 +243,7 @@ namespace Encompass
|
|||
|
||||
internal IEnumerable<(Guid, TComponent)> ReadExistingComponentsByEntityAndType<TComponent>(Entity entity) where TComponent : struct, IComponent
|
||||
{
|
||||
PooledSet<Guid> idSet;
|
||||
if (entityToTypeToExistingComponentIDs.ContainsKey(entity) && entityToTypeToExistingComponentIDs[entity].TryGetValue(typeof(TComponent), out idSet))
|
||||
if (entityToTypeToExistingComponentIDs.ContainsKey(entity) && entityToTypeToExistingComponentIDs[entity].TryGetValue(typeof(TComponent), out PooledSet<Guid> idSet))
|
||||
{
|
||||
return idSet.Select(id => (id, (TComponent)componentIDToComponent[id]));
|
||||
}
|
||||
|
@ -261,8 +253,7 @@ namespace Encompass
|
|||
|
||||
internal IEnumerable<(Guid, TComponent)> ReadPendingComponentsByEntityAndType<TComponent>(Entity entity) where TComponent : struct, IComponent
|
||||
{
|
||||
PooledSet<Guid> idSet;
|
||||
if (entityToTypeToPendingComponentIDs.ContainsKey(entity) && entityToTypeToPendingComponentIDs[entity].TryGetValue(typeof(TComponent), out idSet))
|
||||
if (entityToTypeToPendingComponentIDs.ContainsKey(entity) && entityToTypeToPendingComponentIDs[entity].TryGetValue(typeof(TComponent), out PooledSet<Guid> idSet))
|
||||
{
|
||||
return idSet.Select(id => (id, (TComponent)componentIDToComponent[id]));
|
||||
}
|
||||
|
@ -291,8 +282,7 @@ namespace Encompass
|
|||
|
||||
internal bool HasExistingOrPendingComponent<TComponent>(Entity entity) where TComponent : struct, IComponent
|
||||
{
|
||||
PooledSet<Guid> idSet;
|
||||
if (entityToTypeToComponentIDs.TryGetValue(entity, out _) && entityToTypeToComponentIDs[entity].TryGetValue(typeof(TComponent), out idSet))
|
||||
if (entityToTypeToComponentIDs.TryGetValue(entity, out _) && entityToTypeToComponentIDs[entity].TryGetValue(typeof(TComponent), out PooledSet<Guid> idSet))
|
||||
{
|
||||
return idSet.Count > 0;
|
||||
}
|
||||
|
@ -302,8 +292,7 @@ namespace Encompass
|
|||
|
||||
internal bool HasExistingComponent<TComponent>(Entity entity) where TComponent : struct, IComponent
|
||||
{
|
||||
PooledSet<Guid> idSet;
|
||||
if (entityToTypeToExistingComponentIDs.TryGetValue(entity, out _) && entityToTypeToExistingComponentIDs[entity].TryGetValue(typeof(TComponent), out idSet))
|
||||
if (entityToTypeToExistingComponentIDs.TryGetValue(entity, out _) && entityToTypeToExistingComponentIDs[entity].TryGetValue(typeof(TComponent), out PooledSet<Guid> idSet))
|
||||
{
|
||||
return idSet.Count > 0;
|
||||
}
|
||||
|
@ -313,8 +302,7 @@ namespace Encompass
|
|||
|
||||
internal bool HasPendingComponent<TComponent>(Entity entity) where TComponent : struct, IComponent
|
||||
{
|
||||
PooledSet<Guid> idSet;
|
||||
if (entityToTypeToPendingComponentIDs.TryGetValue(entity, out _) && entityToTypeToPendingComponentIDs[entity].TryGetValue(typeof(TComponent), out idSet))
|
||||
if (entityToTypeToPendingComponentIDs.TryGetValue(entity, out _) && entityToTypeToPendingComponentIDs[entity].TryGetValue(typeof(TComponent), out PooledSet<Guid> idSet))
|
||||
{
|
||||
return idSet.Count > 0;
|
||||
}
|
||||
|
|
|
@ -6,19 +6,16 @@ namespace Encompass
|
|||
{
|
||||
internal class RenderManager
|
||||
{
|
||||
private readonly EntityManager entityManager;
|
||||
private readonly ComponentManager componentManager;
|
||||
private readonly DrawLayerManager drawLayerManager;
|
||||
|
||||
private readonly Dictionary<Type, Action<Guid, IComponent>> drawComponentTypeToOrderedRenderer = new Dictionary<Type, Action<Guid, IComponent>>();
|
||||
|
||||
public RenderManager(
|
||||
EntityManager entityManager,
|
||||
ComponentManager componentManager,
|
||||
DrawLayerManager drawLayerManager
|
||||
)
|
||||
{
|
||||
this.entityManager = entityManager;
|
||||
this.componentManager = componentManager;
|
||||
this.drawLayerManager = drawLayerManager;
|
||||
}
|
||||
|
|
|
@ -32,7 +32,7 @@ namespace Encompass
|
|||
messageManager = new MessageManager();
|
||||
componentMessageManager = new ComponentMessageManager();
|
||||
entityManager = new EntityManager(componentManager, componentMessageManager);
|
||||
renderManager = new RenderManager(entityManager, componentManager, drawLayerManager);
|
||||
renderManager = new RenderManager(componentManager, drawLayerManager);
|
||||
}
|
||||
|
||||
public Entity CreateEntity()
|
||||
|
|
Loading…
Reference in New Issue