From 3d6155ea8095ba1d0c53954520f43fadb45f836b Mon Sep 17 00:00:00 2001 From: Mikhail <99481254+DCFApixels@users.noreply.github.com> Date: Fri, 7 Apr 2023 17:15:31 +0800 Subject: [PATCH] refactoring --- src/EcsQuery.cs | 20 ++++++-------------- src/EcsQueryMember.cs | 24 ++++++++++++++++++++++++ 2 files changed, 30 insertions(+), 14 deletions(-) diff --git a/src/EcsQuery.cs b/src/EcsQuery.cs index 4c3eaa5..54bb4f0 100644 --- a/src/EcsQuery.cs +++ b/src/EcsQuery.cs @@ -10,12 +10,6 @@ using System.Threading.Tasks; namespace DCFApixels.DragonECS { - public abstract class EcsQueryBuilder - { - public abstract inc Include() where TComponent : struct; - public abstract exc Exclude() where TComponent : struct; - public abstract opt Optional() where TComponent : struct; - } public interface IEcsQuery { internal void AddEntity(int entityID); @@ -115,7 +109,6 @@ namespace DCFApixels.DragonECS _exc.Sort(); mask = new EcsQueryMask(_world.ArchetypeType, _inc.ToArray(), _exc.ToArray()); - _world = null; _inc.Clear(); _inc = null; @@ -128,12 +121,6 @@ namespace DCFApixels.DragonECS public class EcsQueryMask : EcsMaskBase { - // internal readonly Type WorldArchetypeType; - // internal readonly int[] Inc; - // internal readonly int[] Exc; - // - // public int IncCount => Inc.Length; - // public int ExcCount => Exc.Length; public EcsQueryMask(Type worldArchetypeType, int[] inc, int[] exc) { WorldArchetypeType = worldArchetypeType; @@ -141,5 +128,10 @@ namespace DCFApixels.DragonECS Exc = exc; } } - + public abstract class EcsQueryBuilder + { + public abstract inc Include() where TComponent : struct; + public abstract exc Exclude() where TComponent : struct; + public abstract opt Optional() where TComponent : struct; + } } diff --git a/src/EcsQueryMember.cs b/src/EcsQueryMember.cs index 89bf2b7..e24bd7d 100644 --- a/src/EcsQueryMember.cs +++ b/src/EcsQueryMember.cs @@ -22,12 +22,20 @@ namespace DCFApixels.DragonECS [MethodImpl(MethodImplOptions.AggressiveInlining)] internal inc(EcsPool pool) => _pool = pool; [MethodImpl(MethodImplOptions.AggressiveInlining)] + public ref TComponent Write(ent entity) => ref _pool.Write(entity.id); + [MethodImpl(MethodImplOptions.AggressiveInlining)] public ref TComponent Write(int entityID) => ref _pool.Write(entityID); [MethodImpl(MethodImplOptions.AggressiveInlining)] + public ref readonly TComponent Read(ent entity) => ref _pool.Read(entity.id); + [MethodImpl(MethodImplOptions.AggressiveInlining)] public ref readonly TComponent Read(int entityID) => ref _pool.Read(entityID); [MethodImpl(MethodImplOptions.AggressiveInlining)] + public bool Has(ent entity) => _pool.Has(entity.id); + [MethodImpl(MethodImplOptions.AggressiveInlining)] public bool Has(int entityID) => _pool.Has(entityID); [MethodImpl(MethodImplOptions.AggressiveInlining)] + public void Del(ent entity) => _pool.Del(entity.id); + [MethodImpl(MethodImplOptions.AggressiveInlining)] public void Del(int entityID) => _pool.Del(entityID); [MethodImpl(MethodImplOptions.AggressiveInlining)] public override string ToString() => $"{(_pool == null ? "NULL" : _pool.World.ArchetypeType.Name)}inc<{typeof(TComponent).Name}>"; @@ -44,12 +52,20 @@ namespace DCFApixels.DragonECS [MethodImpl(MethodImplOptions.AggressiveInlining)] internal exc(EcsPool pool) => _pool = pool; [MethodImpl(MethodImplOptions.AggressiveInlining)] + public ref TComponent Write(ent entity) => ref _pool.Write(entity.id); + [MethodImpl(MethodImplOptions.AggressiveInlining)] public ref TComponent Write(int entityID) => ref _pool.Write(entityID); [MethodImpl(MethodImplOptions.AggressiveInlining)] + public ref readonly TComponent Read(ent entity) => ref _pool.Read(entity.id); + [MethodImpl(MethodImplOptions.AggressiveInlining)] public ref readonly TComponent Read(int entityID) => ref _pool.Read(entityID); [MethodImpl(MethodImplOptions.AggressiveInlining)] + public bool Has(ent entity) => _pool.Has(entity.id); + [MethodImpl(MethodImplOptions.AggressiveInlining)] public bool Has(int entityID) => _pool.Has(entityID); [MethodImpl(MethodImplOptions.AggressiveInlining)] + public void Del(ent entity) => _pool.Del(entity.id); + [MethodImpl(MethodImplOptions.AggressiveInlining)] public void Del(int entityID) => _pool.Del(entityID); [MethodImpl(MethodImplOptions.AggressiveInlining)] public override string ToString() => $"{(_pool == null ? "NULL" : _pool.World.ArchetypeType.Name)}exc<{typeof(TComponent).Name}>"; @@ -66,12 +82,20 @@ namespace DCFApixels.DragonECS [MethodImpl(MethodImplOptions.AggressiveInlining)] internal opt(EcsPool pool) => _pool = pool; [MethodImpl(MethodImplOptions.AggressiveInlining)] + public ref TComponent Write(ent entity) => ref _pool.Write(entity.id); + [MethodImpl(MethodImplOptions.AggressiveInlining)] public ref TComponent Write(int entityID) => ref _pool.Write(entityID); [MethodImpl(MethodImplOptions.AggressiveInlining)] + public ref readonly TComponent Read(ent entity) => ref _pool.Read(entity.id); + [MethodImpl(MethodImplOptions.AggressiveInlining)] public ref readonly TComponent Read(int entityID) => ref _pool.Read(entityID); [MethodImpl(MethodImplOptions.AggressiveInlining)] + public bool Has(ent entity) => _pool.Has(entity.id); + [MethodImpl(MethodImplOptions.AggressiveInlining)] public bool Has(int entityID) => _pool.Has(entityID); [MethodImpl(MethodImplOptions.AggressiveInlining)] + public void Del(ent entity) => _pool.Del(entity.id); + [MethodImpl(MethodImplOptions.AggressiveInlining)] public void Del(int entityID) => _pool.Del(entityID); [MethodImpl(MethodImplOptions.AggressiveInlining)] public override string ToString() => $"{(_pool == null ? "NULL" : _pool.World.ArchetypeType.Name)}opt<{typeof(TComponent).Name}>";