add debugger proxy

This commit is contained in:
Mikhail 2024-04-09 00:19:43 +08:00
parent 07e8319475
commit 44c49b987a
3 changed files with 38 additions and 3 deletions

View File

@ -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) { }

View File

@ -16,7 +16,7 @@ namespace DCFApixels.DragonECS
private static Stack<Builder> _constructorBuildersStack = null;
private static Stack<Builder> GetBuildersStack()
{
if(_constructorBuildersStack == null)
if (_constructorBuildersStack == null)
{
_constructorBuildersStack = new Stack<Builder>();
}

View File

@ -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