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