mirror of
https://github.com/DCFApixels/DragonECS.git
synced 2026-04-21 17:35:56 +08:00
update
This commit is contained in:
parent
0f8d619468
commit
91d196e1a9
@ -86,6 +86,7 @@ namespace DCFApixels.DragonECS
|
|||||||
|
|
||||||
private StructList<IEcsWorldEventListener> _listeners = new StructList<IEcsWorldEventListener>(2);
|
private StructList<IEcsWorldEventListener> _listeners = new StructList<IEcsWorldEventListener>(2);
|
||||||
private StructList<IEcsEntityEventListener> _entityListeners = new StructList<IEcsEntityEventListener>(2);
|
private StructList<IEcsEntityEventListener> _entityListeners = new StructList<IEcsEntityEventListener>(2);
|
||||||
|
private bool _hasAnyEntityListener = false;
|
||||||
|
|
||||||
#region Properties
|
#region Properties
|
||||||
EcsWorld IEntityStorage.World
|
EcsWorld IEntityStorage.World
|
||||||
@ -394,7 +395,10 @@ namespace DCFApixels.DragonECS
|
|||||||
{
|
{
|
||||||
slot.gen |= GEN_SLEEP_MASK;
|
slot.gen |= GEN_SLEEP_MASK;
|
||||||
}
|
}
|
||||||
_entityListeners.InvokeOnNewEntity(entityID);
|
if (_hasAnyEntityListener)
|
||||||
|
{
|
||||||
|
_entityListeners.InvokeOnNewEntity(entityID);
|
||||||
|
}
|
||||||
MoveToEmptyEntities(entityID);
|
MoveToEmptyEntities(entityID);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -436,7 +440,10 @@ namespace DCFApixels.DragonECS
|
|||||||
_delEntBuffer[_delEntBufferCount++] = entityID;
|
_delEntBuffer[_delEntBufferCount++] = entityID;
|
||||||
_entities[entityID].isUsed = false;
|
_entities[entityID].isUsed = false;
|
||||||
_entitiesCount--;
|
_entitiesCount--;
|
||||||
_entityListeners.InvokeOnDelEntity(entityID);
|
if (_hasAnyEntityListener)
|
||||||
|
{
|
||||||
|
_entityListeners.InvokeOnDelEntity(entityID);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||||
private void MoveToEmptyEntities(int entityID)
|
private void MoveToEmptyEntities(int entityID)
|
||||||
@ -1045,10 +1052,12 @@ namespace DCFApixels.DragonECS
|
|||||||
public void AddListener(IEcsEntityEventListener entityEventListener)
|
public void AddListener(IEcsEntityEventListener entityEventListener)
|
||||||
{
|
{
|
||||||
_entityListeners.Add(entityEventListener);
|
_entityListeners.Add(entityEventListener);
|
||||||
|
_hasAnyEntityListener = _entityListeners.Count > 0;
|
||||||
}
|
}
|
||||||
public void RemoveListener(IEcsEntityEventListener entityEventListener)
|
public void RemoveListener(IEcsEntityEventListener entityEventListener)
|
||||||
{
|
{
|
||||||
_entityListeners.Remove(entityEventListener);
|
_entityListeners.Remove(entityEventListener);
|
||||||
|
_hasAnyEntityListener = _entityListeners.Count > 0;
|
||||||
}
|
}
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
@ -1374,6 +1383,7 @@ namespace DCFApixels.DragonECS
|
|||||||
public interface IEcsEntityEventListener
|
public interface IEcsEntityEventListener
|
||||||
{
|
{
|
||||||
void OnNewEntity(int entityID);
|
void OnNewEntity(int entityID);
|
||||||
|
void OnMigrateEntity(int entityID);
|
||||||
void OnDelEntity(int entityID);
|
void OnDelEntity(int entityID);
|
||||||
}
|
}
|
||||||
internal static class WorldEventListExtensions
|
internal static class WorldEventListExtensions
|
||||||
@ -1411,6 +1421,14 @@ namespace DCFApixels.DragonECS
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||||
|
public static void InvokeOnMigrateEntity(this ref StructList<IEcsEntityEventListener> self, int entityID)
|
||||||
|
{
|
||||||
|
for (int i = 0, iMax = self.Count; i < iMax; i++)
|
||||||
|
{
|
||||||
|
self[i].OnMigrateEntity(entityID);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||||
public static void InvokeOnDelEntity(this ref StructList<IEcsEntityEventListener> self, int entityID)
|
public static void InvokeOnDelEntity(this ref StructList<IEcsEntityEventListener> self, int entityID)
|
||||||
{
|
{
|
||||||
for (int i = 0, iMax = self.Count; i < iMax; i++)
|
for (int i = 0, iMax = self.Count; i < iMax; i++)
|
||||||
|
|||||||
@ -286,6 +286,10 @@ namespace DCFApixels.DragonECS
|
|||||||
RemoveFromEmptyEntities(entityID);
|
RemoveFromEmptyEntities(entityID);
|
||||||
}
|
}
|
||||||
_entityComponentMasks[(entityID << _entityComponentMaskLengthBitShift) + maskBit.chunkIndex] |= maskBit.mask;
|
_entityComponentMasks[(entityID << _entityComponentMaskLengthBitShift) + maskBit.chunkIndex] |= maskBit.mask;
|
||||||
|
if (_hasAnyEntityListener)
|
||||||
|
{
|
||||||
|
_entityListeners.InvokeOnMigrateEntity(entityID);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||||
private void UnregisterEntityComponent(int entityID, int componentTypeID, EcsMaskChunck maskBit)
|
private void UnregisterEntityComponent(int entityID, int componentTypeID, EcsMaskChunck maskBit)
|
||||||
@ -296,12 +300,15 @@ namespace DCFApixels.DragonECS
|
|||||||
slot.version++;
|
slot.version++;
|
||||||
var count = --_entities[entityID].componentsCount;
|
var count = --_entities[entityID].componentsCount;
|
||||||
_entityComponentMasks[(entityID << _entityComponentMaskLengthBitShift) + maskBit.chunkIndex] &= ~maskBit.mask;
|
_entityComponentMasks[(entityID << _entityComponentMaskLengthBitShift) + maskBit.chunkIndex] &= ~maskBit.mask;
|
||||||
|
|
||||||
if (count == 0 && IsUsed(entityID))
|
if (count == 0 && IsUsed(entityID))
|
||||||
{
|
{
|
||||||
MoveToEmptyEntities(entityID);
|
MoveToEmptyEntities(entityID);
|
||||||
}
|
}
|
||||||
CheckUnregisterValid(count, entityID);
|
CheckUnregisterValid(count, entityID);
|
||||||
|
if (_hasAnyEntityListener)
|
||||||
|
{
|
||||||
|
_entityListeners.InvokeOnMigrateEntity(entityID);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||||
private bool TryRegisterEntityComponent(int entityID, int componentTypeID, EcsMaskChunck maskBit)
|
private bool TryRegisterEntityComponent(int entityID, int componentTypeID, EcsMaskChunck maskBit)
|
||||||
@ -320,6 +327,10 @@ namespace DCFApixels.DragonECS
|
|||||||
{
|
{
|
||||||
RemoveFromEmptyEntities(entityID);
|
RemoveFromEmptyEntities(entityID);
|
||||||
}
|
}
|
||||||
|
if (_hasAnyEntityListener)
|
||||||
|
{
|
||||||
|
_entityListeners.InvokeOnMigrateEntity(entityID);
|
||||||
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
@ -343,6 +354,10 @@ namespace DCFApixels.DragonECS
|
|||||||
MoveToEmptyEntities(entityID);
|
MoveToEmptyEntities(entityID);
|
||||||
}
|
}
|
||||||
CheckUnregisterValid(count, entityID);
|
CheckUnregisterValid(count, entityID);
|
||||||
|
if (_hasAnyEntityListener)
|
||||||
|
{
|
||||||
|
_entityListeners.InvokeOnMigrateEntity(entityID);
|
||||||
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
|
|||||||
@ -160,6 +160,7 @@ namespace DCFApixels.DragonECS.Core.Internal
|
|||||||
SortHalper.Sort(_filteredEntities.AsSpan(_filteredEntitiesCount), comparison);
|
SortHalper.Sort(_filteredEntities.AsSpan(_filteredEntitiesCount), comparison);
|
||||||
return new EcsUnsafeSpan(World.ID, _filteredEntities.Ptr, _filteredEntitiesCount);
|
return new EcsUnsafeSpan(World.ID, _filteredEntities.Ptr, _filteredEntitiesCount);
|
||||||
}
|
}
|
||||||
|
public override EcsSpan Snapshot() { return Execute(); }
|
||||||
#endregion
|
#endregion
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -117,6 +117,7 @@ namespace DCFApixels.DragonECS.Core.Internal
|
|||||||
ExecuteFor_Iternal(span);
|
ExecuteFor_Iternal(span);
|
||||||
return _filteredGroup;
|
return _filteredGroup;
|
||||||
}
|
}
|
||||||
|
public override EcsSpan Snapshot() { return Execute(); }
|
||||||
#endregion
|
#endregion
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -105,6 +105,7 @@ namespace DCFApixels.DragonECS.Core
|
|||||||
}
|
}
|
||||||
protected abstract void OnInitialize();
|
protected abstract void OnInitialize();
|
||||||
protected abstract void OnDestroy();
|
protected abstract void OnDestroy();
|
||||||
|
public abstract EcsSpan Snapshot();
|
||||||
}
|
}
|
||||||
|
|
||||||
#if ENABLE_IL2CPP
|
#if ENABLE_IL2CPP
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user