mirror of
https://github.com/DCFApixels/DragonECS.git
synced 2025-09-18 01:44:35 +08:00
Update EcsPool.cs
This commit is contained in:
parent
0813a68e04
commit
8ce6fc4861
@ -15,16 +15,18 @@ namespace DCFApixels.DragonECS
|
||||
#endregion
|
||||
|
||||
#region Methods
|
||||
public bool Has(int entityID);
|
||||
public void Add(int entityID);
|
||||
public void Write(int entityID);
|
||||
public bool Has(int entityID);
|
||||
public void Del(int entityID);
|
||||
internal void OnWorldResize(int newSize);
|
||||
#endregion
|
||||
}
|
||||
public interface IEcsPool<T> : IEcsPool where T : struct
|
||||
{
|
||||
public ref T Read(int entity);
|
||||
public new ref T Write(int entity);
|
||||
public new ref T Add(int entityID);
|
||||
public ref T Read(int entityID);
|
||||
public new ref T Write(int entityID);
|
||||
}
|
||||
|
||||
public struct NullComponent { }
|
||||
@ -44,11 +46,13 @@ namespace DCFApixels.DragonECS
|
||||
#endregion
|
||||
|
||||
#region Methods
|
||||
public void Del(int index) { }
|
||||
public ref NullComponent Add(int entity) => ref fakeComponent;
|
||||
public override bool Has(int index) => false;
|
||||
void IEcsPool.Write(int entityID) { }
|
||||
public ref NullComponent Read(int entity) => ref fakeComponent;
|
||||
public ref NullComponent Write(int entity) => ref fakeComponent;
|
||||
public void Del(int index) { }
|
||||
void IEcsPool.Write(int entityID) { }
|
||||
void IEcsPool.Add(int entityID) { }
|
||||
void IEcsPool.OnWorldResize(int newSize) { }
|
||||
internal override void OnWorldResize(int newSize) { }
|
||||
#endregion
|
||||
@ -64,7 +68,7 @@ namespace DCFApixels.DragonECS
|
||||
private readonly int _componentID;
|
||||
private readonly IEcsWorld _source;
|
||||
|
||||
private int[] _mapping;// index = entity / value = itemIndex;/ value = 0 = no entity
|
||||
private int[] _mapping;// index = entityID / value = itemIndex;/ value = 0 = no entityID
|
||||
private T[] _items; //dense
|
||||
private int _itemsCount;
|
||||
private int[] _recycledItems;
|
||||
@ -124,7 +128,6 @@ namespace DCFApixels.DragonECS
|
||||
}
|
||||
|
||||
_mapping[entityID] = itemIndex;
|
||||
_componentResetHandler.Reset(ref _items[itemIndex]);
|
||||
_poolRunnres.add.OnComponentAdd<T>(entityID);
|
||||
}
|
||||
_poolRunnres.write.OnComponentWrite<T>(entityID);
|
||||
@ -154,10 +157,12 @@ namespace DCFApixels.DragonECS
|
||||
{
|
||||
// using (_delMark.Auto())
|
||||
// {
|
||||
ref int itemIndex = ref _mapping[entityID];
|
||||
_componentResetHandler.Reset(ref _items[itemIndex]);
|
||||
if (_recycledItemsCount >= _recycledItems.Length)
|
||||
Array.Resize(ref _recycledItems, _recycledItems.Length << 1);
|
||||
_recycledItems[_recycledItemsCount++] = _mapping[entityID];
|
||||
_mapping[entityID] = 0;
|
||||
_recycledItems[_recycledItemsCount++] = itemIndex;
|
||||
itemIndex = 0;
|
||||
_itemsCount--;
|
||||
_poolRunnres.del.OnComponentDel<T>(entityID);
|
||||
// }
|
||||
@ -169,6 +174,10 @@ namespace DCFApixels.DragonECS
|
||||
{
|
||||
Write(entityID);
|
||||
}
|
||||
void IEcsPool.Add(int entityID)
|
||||
{
|
||||
Add(entityID);
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region Object
|
||||
|
Loading…
Reference in New Issue
Block a user