refactoring DelEntBuffer

This commit is contained in:
Mikhail 2023-11-22 16:08:49 +08:00
parent 5e6ac8cb16
commit b580d69185

View File

@ -2,7 +2,6 @@
using DCFApixels.DragonECS.Utils; using DCFApixels.DragonECS.Utils;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Diagnostics;
using System.Runtime.CompilerServices; using System.Runtime.CompilerServices;
namespace DCFApixels.DragonECS namespace DCFApixels.DragonECS
@ -23,7 +22,7 @@ namespace DCFApixels.DragonECS
private int[] _delEntBuffer; private int[] _delEntBuffer;
private int _delEntBufferCount; private int _delEntBufferCount;
private int _delEntBufferMinCount; private int _delEntBufferMinCount;
private int _usedSpace; private int _freeSpace;
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);
@ -35,7 +34,9 @@ namespace DCFApixels.DragonECS
public bool IsDestroyed => _isDestroyed; public bool IsDestroyed => _isDestroyed;
public int Count => _entitiesCount; public int Count => _entitiesCount;
public int Capacity => _entitesCapacity; //_denseEntities.Length; public int Capacity => _entitesCapacity; //_denseEntities.Length;
internal int DelBufferCount => _usedSpace - _entitiesCount; //_denseEntities.Length;
public int DelEntBufferCount => _delEntBufferCount;
public EcsReadonlyGroup Entities => _allEntites.Readonly; public EcsReadonlyGroup Entities => _allEntites.Readonly;
public ReadOnlySpan<IEcsPoolImplementation> AllPools => _pools;// new ReadOnlySpan<IEcsPoolImplementation>(pools, 0, _poolsCount); public ReadOnlySpan<IEcsPoolImplementation> AllPools => _pools;// new ReadOnlySpan<IEcsPoolImplementation>(pools, 0, _poolsCount);
#endregion #endregion
@ -133,15 +134,13 @@ namespace DCFApixels.DragonECS
#endregion #endregion
#region Entity #region Entity
private int FreeSpace => Capacity - _usedSpace;
public int NewEmptyEntity() public int NewEmptyEntity()
{ {
if(FreeSpace <= 1 && DelBufferCount > _delEntBufferMinCount) if(_freeSpace <= 1 && _delEntBufferCount > _delEntBufferMinCount)
ReleaseDelEntityBuffer(); ReleaseDelEntityBuffer();
int entityID = _entityDispenser.GetFree(); int entityID = _entityDispenser.GetFree();
_usedSpace++; _freeSpace--;
_entitiesCount++; _entitiesCount++;
if (_gens.Length <= entityID) if (_gens.Length <= entityID)
@ -235,7 +234,7 @@ namespace DCFApixels.DragonECS
_listeners.InvokeOnReleaseDelEntityBuffer(buffser); _listeners.InvokeOnReleaseDelEntityBuffer(buffser);
for (int i = 0; i < _delEntBufferCount; i++) for (int i = 0; i < _delEntBufferCount; i++)
_entityDispenser.Release(_delEntBuffer[i]); _entityDispenser.Release(_delEntBuffer[i]);
_usedSpace = _entitiesCount; _freeSpace = _entitesCapacity - _entitiesCount;
_delEntBufferCount = 0; _delEntBufferCount = 0;
} }
public void DeleteEmptyEntites() public void DeleteEmptyEntites()