From 44c49b987aeb356cf7d3816d9bebdf4c0cf9a5ca Mon Sep 17 00:00:00 2001 From: Mikhail <99481254+DCFApixels@users.noreply.github.com> Date: Tue, 9 Apr 2024 00:19:43 +0800 Subject: [PATCH 1/3] add debugger proxy --- src/Builtin/Worlds.cs | 6 +++++- src/EcsAspect.cs | 2 +- src/EcsWorld.cs | 33 ++++++++++++++++++++++++++++++++- 3 files changed, 38 insertions(+), 3 deletions(-) diff --git a/src/Builtin/Worlds.cs b/src/Builtin/Worlds.cs index 10bdcf6..fe3b8dc 100644 --- a/src/Builtin/Worlds.cs +++ b/src/Builtin/Worlds.cs @@ -1,10 +1,14 @@ -namespace DCFApixels.DragonECS +using System.Diagnostics; + +namespace DCFApixels.DragonECS { + [DebuggerTypeProxy(typeof(DebuggerProxy))] public sealed class EcsDefaultWorld : EcsWorld { public EcsDefaultWorld(EcsWorldConfig config, short worldID = -1) : base(config, worldID) { } public EcsDefaultWorld(IConfigContainer configs = null, short worldID = -1) : base(configs, worldID) { } } + [DebuggerTypeProxy(typeof(DebuggerProxy))] public sealed class EcsEventWorld : EcsWorld { public EcsEventWorld(EcsWorldConfig config, short worldID = -1) : base(config, worldID) { } diff --git a/src/EcsAspect.cs b/src/EcsAspect.cs index 589ae24..b41b9a3 100644 --- a/src/EcsAspect.cs +++ b/src/EcsAspect.cs @@ -16,7 +16,7 @@ namespace DCFApixels.DragonECS private static Stack _constructorBuildersStack = null; private static Stack GetBuildersStack() { - if(_constructorBuildersStack == null) + if (_constructorBuildersStack == null) { _constructorBuildersStack = new Stack(); } diff --git a/src/EcsWorld.cs b/src/EcsWorld.cs index b1900a1..5f45155 100644 --- a/src/EcsWorld.cs +++ b/src/EcsWorld.cs @@ -1,6 +1,7 @@ using DCFApixels.DragonECS.Internal; using System; using System.Collections.Generic; +using System.Diagnostics; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; @@ -23,6 +24,7 @@ namespace DCFApixels.DragonECS PoolRecycledComponentsCapacity = poolRecycledComponentsCapacity; } } + [DebuggerTypeProxy(typeof(DebuggerProxy))] public partial class EcsWorld : IEntityStorage { public readonly short id; @@ -544,6 +546,7 @@ namespace DCFApixels.DragonECS { _entityDispenser.Upsize(minSize); } + [MethodImpl(MethodImplOptions.NoInlining)] private int CalcEntityComponentMaskLastIndex() { int result = _pools.Length / COMPONENT_MASK_CHUNK_SIZE; @@ -554,7 +557,7 @@ namespace DCFApixels.DragonECS { Array.Resize(ref _entities, newSize); Array.Resize(ref _delEntBuffer, newSize); - _entityComponentMaskLength = CalcEntityComponentMaskLastIndex();//_pools.Length / COMPONENT_MASK_CHUNK_SIZE + 1; + _entityComponentMaskLength = CalcEntityComponentMaskLastIndex(); //_pools.Length / COMPONENT_MASK_CHUNK_SIZE + 1; Array.Resize(ref _entityComponentMasks, newSize * _entityComponentMaskLength); ArrayUtility.Fill(_entities, EntitySlot.Empty, _entitiesCapacity); @@ -734,6 +737,34 @@ namespace DCFApixels.DragonECS } } #endregion + + #region DebuggerProxy + private EcsSpan GetSpan_Debug() + { + return _entityDispenser.UsedToEcsSpan(id); + } + protected class DebuggerProxy + { + private EcsWorld _world; + public EntitySlotInfo[] Entities + { + get + { + EntitySlotInfo[] result = new EntitySlotInfo[_world.Count]; + int i = 0; + foreach (var e in _world.ToSpan()) + { + result[i++] = _world.GetEntitySlotInfoDebug(e); + } + return result; + } + } + public DebuggerProxy(EcsWorld world) + { + _world = world; + } + } + #endregion } public static class EcsWorldExtenssions From c73d660f13298f22a3731edecdb9e5799dc72a1a Mon Sep 17 00:00:00 2001 From: Mikhail <99481254+DCFApixels@users.noreply.github.com> Date: Wed, 10 Apr 2024 12:11:10 +0800 Subject: [PATCH 2/3] change the invocation moment for IEcsComponentLifecycle.Enable --- src/Pools/EcsPool.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Pools/EcsPool.cs b/src/Pools/EcsPool.cs index 76cd630..acc27b6 100644 --- a/src/Pools/EcsPool.cs +++ b/src/Pools/EcsPool.cs @@ -77,8 +77,8 @@ namespace DCFApixels.DragonECS } } _mediator.RegisterComponent(entityID, _componentTypeID, _maskBit); - _listeners.InvokeOnAddAndGet(entityID); EnableComponent(ref _items[itemIndex]); + _listeners.InvokeOnAddAndGet(entityID); return ref _items[itemIndex]; } [MethodImpl(MethodImplOptions.AggressiveInlining)] @@ -117,10 +117,10 @@ namespace DCFApixels.DragonECS } } _mediator.RegisterComponent(entityID, _componentTypeID, _maskBit); + EnableComponent(ref _items[itemIndex]); _listeners.InvokeOnAdd(entityID); } _listeners.InvokeOnGet(entityID); - EnableComponent(ref _items[itemIndex]); return ref _items[itemIndex]; } [MethodImpl(MethodImplOptions.AggressiveInlining)] From fd5d1ec06a9b1957575fade7ed01545b5e9ea773 Mon Sep 17 00:00:00 2001 From: Mikhail <99481254+DCFApixels@users.noreply.github.com> Date: Wed, 10 Apr 2024 12:11:32 +0800 Subject: [PATCH 3/3] update MetaGroup --- src/Debug/MetaAttributes/MetaGroupAttribute.cs | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/Debug/MetaAttributes/MetaGroupAttribute.cs b/src/Debug/MetaAttributes/MetaGroupAttribute.cs index 332ab92..e8dd599 100644 --- a/src/Debug/MetaAttributes/MetaGroupAttribute.cs +++ b/src/Debug/MetaAttributes/MetaGroupAttribute.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.Text.RegularExpressions; namespace DCFApixels.DragonECS { @@ -7,10 +8,17 @@ namespace DCFApixels.DragonECS public sealed class MetaGroupAttribute : EcsMetaAttribute { public readonly MetaGroupRef Data; + + [Obsolete("With empty parameters, this attribute makes no sense.")] + public MetaGroupAttribute() { } public MetaGroupAttribute(string name) { Data = new MetaGroupRef(name); } + public MetaGroupAttribute(params string[] path) + { + Data = new MetaGroupRef(string.Join('/', path)); + } } public class MetaGroupRef { @@ -18,6 +26,7 @@ namespace DCFApixels.DragonECS public readonly string Name; private string[] path = null; + private static string pattern = @"Module(?=/)"; public IReadOnlyCollection Splited { get @@ -41,7 +50,7 @@ namespace DCFApixels.DragonECS { name += '/'; } - Name = name; + Name = Regex.Replace(name, pattern, ""); ; } }