register filter components with storage
parent
1d7db58d43
commit
227aae9a1a
|
@ -10,6 +10,14 @@ internal class ComponentDepot
|
||||||
|
|
||||||
private Dictionary<int, HashSet<Type>> entityComponentMap = new Dictionary<int, HashSet<Type>>();
|
private Dictionary<int, HashSet<Type>> entityComponentMap = new Dictionary<int, HashSet<Type>>();
|
||||||
|
|
||||||
|
internal void Register<TComponent>() where TComponent : struct
|
||||||
|
{
|
||||||
|
if (!storages.ContainsKey(typeof(TComponent)))
|
||||||
|
{
|
||||||
|
storages.Add(typeof(TComponent), new ComponentStorage<TComponent>());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private ComponentStorage Lookup(Type type)
|
private ComponentStorage Lookup(Type type)
|
||||||
{
|
{
|
||||||
return storages[type];
|
return storages[type];
|
||||||
|
@ -18,11 +26,7 @@ internal class ComponentDepot
|
||||||
private ComponentStorage<TComponent> Lookup<TComponent>() where TComponent : struct
|
private ComponentStorage<TComponent> Lookup<TComponent>() where TComponent : struct
|
||||||
{
|
{
|
||||||
// TODO: is it possible to optimize this?
|
// TODO: is it possible to optimize this?
|
||||||
if (!storages.ContainsKey(typeof(TComponent)))
|
Register<TComponent>();
|
||||||
{
|
|
||||||
storages.Add(typeof(TComponent), new ComponentStorage<TComponent>());
|
|
||||||
}
|
|
||||||
|
|
||||||
return storages[typeof(TComponent)] as ComponentStorage<TComponent>;
|
return storages[typeof(TComponent)] as ComponentStorage<TComponent>;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -64,10 +68,7 @@ internal class ComponentDepot
|
||||||
{
|
{
|
||||||
foreach (var filterSignature in filterSignatures)
|
foreach (var filterSignature in filterSignatures)
|
||||||
{
|
{
|
||||||
if (CheckFilter(filterSignature, entityID))
|
CheckFilter(filterSignature, entityID);
|
||||||
{
|
|
||||||
filterSignatureToEntityIDs[filterSignature].Add(entityID);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -96,10 +97,7 @@ internal class ComponentDepot
|
||||||
{
|
{
|
||||||
foreach (var filterSignature in filterSignatures)
|
foreach (var filterSignature in filterSignatures)
|
||||||
{
|
{
|
||||||
if (!CheckFilter(filterSignature, entityID))
|
CheckFilter(filterSignature, entityID);
|
||||||
{
|
|
||||||
filterSignatureToEntityIDs[filterSignature].Remove(entityID);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -175,13 +173,14 @@ internal class ComponentDepot
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private bool CheckFilter(FilterSignature filterSignature, int entityID)
|
private void CheckFilter(FilterSignature filterSignature, int entityID)
|
||||||
{
|
{
|
||||||
foreach (var type in filterSignature.Included)
|
foreach (var type in filterSignature.Included)
|
||||||
{
|
{
|
||||||
if (!Has(type, entityID))
|
if (!Has(type, entityID))
|
||||||
{
|
{
|
||||||
return false;
|
filterSignatureToEntityIDs[filterSignature].Remove(entityID);
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -189,10 +188,11 @@ internal class ComponentDepot
|
||||||
{
|
{
|
||||||
if (Has(type, entityID))
|
if (Has(type, entityID))
|
||||||
{
|
{
|
||||||
return false;
|
filterSignatureToEntityIDs[filterSignature].Remove(entityID);
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
filterSignatureToEntityIDs[filterSignature].Add(entityID);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -22,12 +22,14 @@ public struct FilterBuilder
|
||||||
|
|
||||||
public FilterBuilder Include<TComponent>() where TComponent : struct
|
public FilterBuilder Include<TComponent>() where TComponent : struct
|
||||||
{
|
{
|
||||||
|
ComponentDepot.Register<TComponent>();
|
||||||
Included.Add(typeof(TComponent));
|
Included.Add(typeof(TComponent));
|
||||||
return new FilterBuilder(ComponentDepot, Included, Excluded);
|
return new FilterBuilder(ComponentDepot, Included, Excluded);
|
||||||
}
|
}
|
||||||
|
|
||||||
public FilterBuilder Exclude<TComponent>() where TComponent : struct
|
public FilterBuilder Exclude<TComponent>() where TComponent : struct
|
||||||
{
|
{
|
||||||
|
ComponentDepot.Register<TComponent>();
|
||||||
Excluded.Add(typeof(TComponent));
|
Excluded.Add(typeof(TComponent));
|
||||||
return new FilterBuilder(ComponentDepot, Included, Excluded);
|
return new FilterBuilder(ComponentDepot, Included, Excluded);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue