mirror of
https://github.com/DCFApixels/DragonECS.git
synced 2025-11-13 17:15:54 +08:00
simplifying EcsQuery
This commit is contained in:
parent
d7988166dd
commit
6d357fc948
@ -8,16 +8,12 @@ using UnityEngine.UI;
|
|||||||
|
|
||||||
namespace DCFApixels.DragonECS
|
namespace DCFApixels.DragonECS
|
||||||
{
|
{
|
||||||
public abstract class EcsQueryBase
|
public abstract class EcsQuery
|
||||||
{
|
{
|
||||||
internal EcsGroup groupFilter;
|
internal EcsGroup groupFilter;
|
||||||
internal EcsQueryMask mask;
|
internal EcsQueryMask mask;
|
||||||
public IEcsWorld World => groupFilter.World;
|
public IEcsWorld World => groupFilter.World;
|
||||||
}
|
|
||||||
|
|
||||||
public abstract class EcsQuery<TWorldArchetype> : EcsQueryBase
|
|
||||||
where TWorldArchetype : EcsWorld<TWorldArchetype>
|
|
||||||
{
|
|
||||||
private ProfilerMarker _getEnumerator = new ProfilerMarker("EcsQuery.GetEnumerator");
|
private ProfilerMarker _getEnumerator = new ProfilerMarker("EcsQuery.GetEnumerator");
|
||||||
|
|
||||||
public EcsGroup.Enumerator GetEnumerator()
|
public EcsGroup.Enumerator GetEnumerator()
|
||||||
@ -71,20 +67,20 @@ namespace DCFApixels.DragonECS
|
|||||||
private List<int> _inc;
|
private List<int> _inc;
|
||||||
private List<int> _exc;
|
private List<int> _exc;
|
||||||
|
|
||||||
internal static TQuery Build<TQuery>(IEcsWorld world) where TQuery : EcsQueryBase
|
internal static TQuery Build<TQuery>(IEcsWorld world) where TQuery : EcsQuery
|
||||||
{
|
{
|
||||||
Builder builder = new Builder(world);
|
Builder builder = new Builder(world);
|
||||||
|
|
||||||
Type queryType = typeof(TQuery);
|
Type queryType = typeof(TQuery);
|
||||||
ConstructorInfo constructorInfo = queryType.GetConstructor(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic, null, new Type[] { typeof(Builder) }, null);
|
ConstructorInfo constructorInfo = queryType.GetConstructor(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic, null, new Type[] { typeof(Builder) }, null);
|
||||||
EcsQuery<TWorldArchetype> newQuery;
|
EcsQuery newQuery;
|
||||||
if (constructorInfo != null)
|
if (constructorInfo != null)
|
||||||
{
|
{
|
||||||
newQuery = (EcsQuery<TWorldArchetype>)constructorInfo.Invoke(new object[] { builder });
|
newQuery = (EcsQuery)constructorInfo.Invoke(new object[] { builder });
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
newQuery = (EcsQuery<TWorldArchetype>)Activator.CreateInstance(typeof(TQuery));
|
newQuery = (EcsQuery)Activator.CreateInstance(typeof(TQuery));
|
||||||
newQuery.Init(builder);
|
newQuery.Init(builder);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -17,10 +17,10 @@ namespace DCFApixels.DragonECS
|
|||||||
|
|
||||||
private int _entitiesCount;
|
private int _entitiesCount;
|
||||||
|
|
||||||
private List<EcsQueryBase>[] _filtersByIncludedComponents;
|
private List<EcsQuery>[] _filtersByIncludedComponents;
|
||||||
private List<EcsQueryBase>[] _filtersByExcludedComponents;
|
private List<EcsQuery>[] _filtersByExcludedComponents;
|
||||||
|
|
||||||
private EcsQueryBase[] _queries;
|
private EcsQuery[] _queries;
|
||||||
|
|
||||||
private List<EcsGroup> _groups;
|
private List<EcsGroup> _groups;
|
||||||
|
|
||||||
|
|||||||
@ -74,7 +74,7 @@ namespace DCFApixels.DragonECS
|
|||||||
private EcsPool[] _pools;
|
private EcsPool[] _pools;
|
||||||
private EcsNullPool _nullPool;
|
private EcsNullPool _nullPool;
|
||||||
|
|
||||||
private EcsQueryBase[] _queries;
|
private EcsQuery[] _queries;
|
||||||
|
|
||||||
private EcsPipeline _pipeline;
|
private EcsPipeline _pipeline;
|
||||||
|
|
||||||
@ -142,7 +142,7 @@ namespace DCFApixels.DragonECS
|
|||||||
ArrayUtility.Fill(_pools, _nullPool);
|
ArrayUtility.Fill(_pools, _nullPool);
|
||||||
|
|
||||||
_gens = new short[512];
|
_gens = new short[512];
|
||||||
_queries = new EcsQuery<TWorldArchetype>[QueryType.capacity];
|
_queries = new EcsQuery[QueryType.capacity];
|
||||||
_groups = new List<EcsGroup>(128);
|
_groups = new List<EcsGroup>(128);
|
||||||
|
|
||||||
_denseEntities = new int[512];
|
_denseEntities = new int[512];
|
||||||
@ -181,7 +181,7 @@ namespace DCFApixels.DragonECS
|
|||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region Query
|
#region Query
|
||||||
public TQuery Query<TQuery>(out TQuery query) where TQuery : EcsQueryBase
|
public TQuery Query<TQuery>(out TQuery query) where TQuery : EcsQuery
|
||||||
{
|
{
|
||||||
int uniqueID = QueryType<TQuery>.uniqueID;
|
int uniqueID = QueryType<TQuery>.uniqueID;
|
||||||
if (_queries.Length < QueryType.capacity)
|
if (_queries.Length < QueryType.capacity)
|
||||||
@ -189,7 +189,7 @@ namespace DCFApixels.DragonECS
|
|||||||
|
|
||||||
if (_queries[uniqueID] == null)
|
if (_queries[uniqueID] == null)
|
||||||
{
|
{
|
||||||
_queries[uniqueID] = EcsQuery<TWorldArchetype>.Builder.Build<TQuery>(this);
|
_queries[uniqueID] = EcsQuery.Builder.Build<TQuery>(this);
|
||||||
}
|
}
|
||||||
query = (TQuery)_queries[uniqueID];
|
query = (TQuery)_queries[uniqueID];
|
||||||
return query;
|
return query;
|
||||||
|
|||||||
@ -15,7 +15,7 @@ namespace DCFApixels.DragonECS
|
|||||||
#region Methods
|
#region Methods
|
||||||
public EcsPool<T> GetPool<T>() where T : struct;
|
public EcsPool<T> GetPool<T>() where T : struct;
|
||||||
public ReadOnlySpan<EcsPool> GetAllPools();
|
public ReadOnlySpan<EcsPool> GetAllPools();
|
||||||
public TQuery Query<TQuery>(out TQuery query) where TQuery : EcsQueryBase;
|
public TQuery Query<TQuery>(out TQuery query) where TQuery : EcsQuery;
|
||||||
|
|
||||||
public int GetComponentID<T>();
|
public int GetComponentID<T>();
|
||||||
public bool IsMaskCompatible<TInc, TExc>(int entityID) where TInc : struct, IInc where TExc : struct, IExc;
|
public bool IsMaskCompatible<TInc, TExc>(int entityID) where TInc : struct, IInc where TExc : struct, IExc;
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user