Merge branch 'dev'

This commit is contained in:
Mikhail 2024-04-10 12:11:39 +08:00
commit ebe9a07189
5 changed files with 50 additions and 6 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

@ -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<string> Splited
{
get
@ -41,7 +50,7 @@ namespace DCFApixels.DragonECS
{
name += '/';
}
Name = name;
Name = Regex.Replace(name, pattern, ""); ;
}
}

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

View File

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