update auto release del buffer & refactoring

This commit is contained in:
Mikhail 2024-01-29 01:10:52 +08:00
parent ff6d8cba5a
commit df24a2d26a

View File

@ -23,7 +23,7 @@ namespace DCFApixels.DragonECS
private int _delEntBufferCount; private int _delEntBufferCount;
private int _delEntBufferMinCount; private int _delEntBufferMinCount;
private int _freeSpace; private int _freeSpace;
private bool _isEnableReleaseDelEntBuffer = true; private bool _isEnableAutoReleaseDelEntBuffer = true;
private List<WeakReference<EcsGroup>> _groups = new List<WeakReference<EcsGroup>>(); private List<WeakReference<EcsGroup>> _groups = new List<WeakReference<EcsGroup>>();
private Stack<EcsGroup> _groupsPool = new Stack<EcsGroup>(64); private Stack<EcsGroup> _groupsPool = new Stack<EcsGroup>(64);
@ -36,15 +36,51 @@ namespace DCFApixels.DragonECS
private readonly PoolsMediator _poolsMediator; private readonly PoolsMediator _poolsMediator;
#region Properties #region Properties
public bool IsDestroyed => _isDestroyed; public bool IsDestroyed
public int Count => _entitiesCount; {
public int Capacity => _entitesCapacity; //_denseEntities.Length; [MethodImpl(MethodImplOptions.AggressiveInlining)]
get { return _isDestroyed; }
}
public int Count
{
[MethodImpl(MethodImplOptions.AggressiveInlining)]
get { return _entitiesCount; }
}
public int Capacity
{
//_denseEntities.Length;
[MethodImpl(MethodImplOptions.AggressiveInlining)]
get { return _entitesCapacity; }
}
public int DelEntBufferCount
{
[MethodImpl(MethodImplOptions.AggressiveInlining)]
get { return _delEntBufferCount; }
}
public bool IsEnableReleaseDelEntBuffer
{
[MethodImpl(MethodImplOptions.AggressiveInlining)]
get { return _isEnableAutoReleaseDelEntBuffer; }
}
public int DelEntBufferCount => _delEntBufferCount; public EcsReadonlyGroup Entities
public bool IsEnableReleaseDelEntBuffer => _isEnableReleaseDelEntBuffer; {
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public EcsReadonlyGroup Entities => _allEntites.Readonly; get
public ReadOnlySpan<IEcsPoolImplementation> AllPools => _pools;// new ReadOnlySpan<IEcsPoolImplementation>(pools, 0, _poolsCount); {
if (_isEnableAutoReleaseDelEntBuffer)
{
ReleaseDelEntityBufferAll();
}
return _allEntites.Readonly;
}
}
public ReadOnlySpan<IEcsPoolImplementation> AllPools
{
// new ReadOnlySpan<IEcsPoolImplementation>(pools, 0, _poolsCount);
[MethodImpl(MethodImplOptions.AggressiveInlining)]
get { return _pools; }
}
#endregion #endregion
#region Constructors/Destroy #region Constructors/Destroy
@ -60,7 +96,9 @@ namespace DCFApixels.DragonECS
{ {
id = (short)_worldIdDispenser.UseFree(); id = (short)_worldIdDispenser.UseFree();
if (id >= Worlds.Length) if (id >= Worlds.Length)
{
Array.Resize(ref Worlds, Worlds.Length << 1); Array.Resize(ref Worlds, Worlds.Length << 1);
}
Worlds[id] = this; Worlds[id] = this;
} }
@ -142,7 +180,7 @@ namespace DCFApixels.DragonECS
#region Where Query #region Where Query
public EcsReadonlyGroup WhereToGroupFor<TAspect>(EcsSpan span, out TAspect aspect) where TAspect : EcsAspect public EcsReadonlyGroup WhereToGroupFor<TAspect>(EcsSpan span, out TAspect aspect) where TAspect : EcsAspect
{ {
if (_isEnableReleaseDelEntBuffer) if (_isEnableAutoReleaseDelEntBuffer)
{ {
ReleaseDelEntityBufferAll(); ReleaseDelEntityBufferAll();
} }
@ -152,7 +190,7 @@ namespace DCFApixels.DragonECS
} }
public EcsReadonlyGroup WhereToGroupFor<TAspect>(EcsSpan span) where TAspect : EcsAspect public EcsReadonlyGroup WhereToGroupFor<TAspect>(EcsSpan span) where TAspect : EcsAspect
{ {
if (_isEnableReleaseDelEntBuffer) if (_isEnableAutoReleaseDelEntBuffer)
{ {
ReleaseDelEntityBufferAll(); ReleaseDelEntityBufferAll();
} }
@ -160,7 +198,7 @@ namespace DCFApixels.DragonECS
} }
public EcsReadonlyGroup WhereToGroup<TAspect>(out TAspect aspect) where TAspect : EcsAspect public EcsReadonlyGroup WhereToGroup<TAspect>(out TAspect aspect) where TAspect : EcsAspect
{ {
if (_isEnableReleaseDelEntBuffer) if (_isEnableAutoReleaseDelEntBuffer)
{ {
ReleaseDelEntityBufferAll(); ReleaseDelEntityBufferAll();
} }
@ -170,7 +208,7 @@ namespace DCFApixels.DragonECS
} }
public EcsReadonlyGroup WhereToGroup<TAspect>() where TAspect : EcsAspect public EcsReadonlyGroup WhereToGroup<TAspect>() where TAspect : EcsAspect
{ {
if (_isEnableReleaseDelEntBuffer) if (_isEnableAutoReleaseDelEntBuffer)
{ {
ReleaseDelEntityBufferAll(); ReleaseDelEntityBufferAll();
} }
@ -179,7 +217,7 @@ namespace DCFApixels.DragonECS
public EcsSpan WhereFor<TAspect>(EcsSpan span, out TAspect aspect) where TAspect : EcsAspect public EcsSpan WhereFor<TAspect>(EcsSpan span, out TAspect aspect) where TAspect : EcsAspect
{ {
if (_isEnableReleaseDelEntBuffer) if (_isEnableAutoReleaseDelEntBuffer)
{ {
ReleaseDelEntityBufferAll(); ReleaseDelEntityBufferAll();
} }
@ -189,7 +227,7 @@ namespace DCFApixels.DragonECS
} }
public EcsSpan WhereFor<TAspect>(EcsSpan span) where TAspect : EcsAspect public EcsSpan WhereFor<TAspect>(EcsSpan span) where TAspect : EcsAspect
{ {
if (_isEnableReleaseDelEntBuffer) if (_isEnableAutoReleaseDelEntBuffer)
{ {
ReleaseDelEntityBufferAll(); ReleaseDelEntityBufferAll();
} }
@ -197,7 +235,7 @@ namespace DCFApixels.DragonECS
} }
public EcsSpan Where<TAspect>(out TAspect aspect) where TAspect : EcsAspect public EcsSpan Where<TAspect>(out TAspect aspect) where TAspect : EcsAspect
{ {
if (_isEnableReleaseDelEntBuffer) if (_isEnableAutoReleaseDelEntBuffer)
{ {
ReleaseDelEntityBufferAll(); ReleaseDelEntityBufferAll();
} }
@ -207,7 +245,7 @@ namespace DCFApixels.DragonECS
} }
public EcsSpan Where<TAspect>() where TAspect : EcsAspect public EcsSpan Where<TAspect>() where TAspect : EcsAspect
{ {
if (_isEnableReleaseDelEntBuffer) if (_isEnableAutoReleaseDelEntBuffer)
{ {
ReleaseDelEntityBufferAll(); ReleaseDelEntityBufferAll();
} }
@ -339,12 +377,12 @@ namespace DCFApixels.DragonECS
#region DelEntBuffer #region DelEntBuffer
public AutoReleaseDelEntBufferLonkUnloker DisableAutoReleaseDelEntBuffer() public AutoReleaseDelEntBufferLonkUnloker DisableAutoReleaseDelEntBuffer()
{ {
_isEnableReleaseDelEntBuffer = false; _isEnableAutoReleaseDelEntBuffer = false;
return new AutoReleaseDelEntBufferLonkUnloker(this); return new AutoReleaseDelEntBufferLonkUnloker(this);
} }
public void EnableAutoReleaseDelEntBuffer() public void EnableAutoReleaseDelEntBuffer()
{ {
_isEnableReleaseDelEntBuffer = true; _isEnableAutoReleaseDelEntBuffer = true;
} }
public readonly struct AutoReleaseDelEntBufferLonkUnloker : IDisposable public readonly struct AutoReleaseDelEntBufferLonkUnloker : IDisposable
{ {