mirror of
https://github.com/DCFApixels/DragonECS.git
synced 2025-09-18 09:54:35 +08:00
update auto release del buffer & refactoring
This commit is contained in:
parent
ff6d8cba5a
commit
df24a2d26a
@ -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
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user