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