From 6d357fc948bb58e7a378907c7ebaceeb6a864e2c Mon Sep 17 00:00:00 2001 From: Mikhail <99481254+DCFApixels@users.noreply.github.com> Date: Wed, 12 Apr 2023 23:09:50 +0800 Subject: [PATCH] simplifying EcsQuery --- src/EcsQuery.cs | 14 +++++--------- src/EcsTable.cs | 6 +++--- src/EcsWorld.cs | 8 ++++---- src/Interfaces/IEcsReadonlyTable.cs | 2 +- 4 files changed, 13 insertions(+), 17 deletions(-) diff --git a/src/EcsQuery.cs b/src/EcsQuery.cs index 565466d..c081e18 100644 --- a/src/EcsQuery.cs +++ b/src/EcsQuery.cs @@ -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 : EcsQueryBase - where TWorldArchetype : EcsWorld - { private ProfilerMarker _getEnumerator = new ProfilerMarker("EcsQuery.GetEnumerator"); public EcsGroup.Enumerator GetEnumerator() @@ -71,20 +67,20 @@ namespace DCFApixels.DragonECS private List _inc; private List _exc; - internal static TQuery Build(IEcsWorld world) where TQuery : EcsQueryBase + internal static TQuery Build(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 newQuery; + EcsQuery newQuery; if (constructorInfo != null) { - newQuery = (EcsQuery)constructorInfo.Invoke(new object[] { builder }); + newQuery = (EcsQuery)constructorInfo.Invoke(new object[] { builder }); } else { - newQuery = (EcsQuery)Activator.CreateInstance(typeof(TQuery)); + newQuery = (EcsQuery)Activator.CreateInstance(typeof(TQuery)); newQuery.Init(builder); } diff --git a/src/EcsTable.cs b/src/EcsTable.cs index 7fb53f3..152beb7 100644 --- a/src/EcsTable.cs +++ b/src/EcsTable.cs @@ -17,10 +17,10 @@ namespace DCFApixels.DragonECS private int _entitiesCount; - private List[] _filtersByIncludedComponents; - private List[] _filtersByExcludedComponents; + private List[] _filtersByIncludedComponents; + private List[] _filtersByExcludedComponents; - private EcsQueryBase[] _queries; + private EcsQuery[] _queries; private List _groups; diff --git a/src/EcsWorld.cs b/src/EcsWorld.cs index 3b44931..da8e41d 100644 --- a/src/EcsWorld.cs +++ b/src/EcsWorld.cs @@ -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[QueryType.capacity]; + _queries = new EcsQuery[QueryType.capacity]; _groups = new List(128); _denseEntities = new int[512]; @@ -181,7 +181,7 @@ namespace DCFApixels.DragonECS #endregion #region Query - public TQuery Query(out TQuery query) where TQuery : EcsQueryBase + public TQuery Query(out TQuery query) where TQuery : EcsQuery { int uniqueID = QueryType.uniqueID; if (_queries.Length < QueryType.capacity) @@ -189,7 +189,7 @@ namespace DCFApixels.DragonECS if (_queries[uniqueID] == null) { - _queries[uniqueID] = EcsQuery.Builder.Build(this); + _queries[uniqueID] = EcsQuery.Builder.Build(this); } query = (TQuery)_queries[uniqueID]; return query; diff --git a/src/Interfaces/IEcsReadonlyTable.cs b/src/Interfaces/IEcsReadonlyTable.cs index 136f86f..d721cc2 100644 --- a/src/Interfaces/IEcsReadonlyTable.cs +++ b/src/Interfaces/IEcsReadonlyTable.cs @@ -15,7 +15,7 @@ namespace DCFApixels.DragonECS #region Methods public EcsPool GetPool() where T : struct; public ReadOnlySpan GetAllPools(); - public TQuery Query(out TQuery query) where TQuery : EcsQueryBase; + public TQuery Query(out TQuery query) where TQuery : EcsQuery; public int GetComponentID(); public bool IsMaskCompatible(int entityID) where TInc : struct, IInc where TExc : struct, IExc;