mirror of
https://github.com/DCFApixels/DragonECS.git
synced 2025-09-18 01:44:35 +08:00
fix entity gen management
This commit is contained in:
parent
fe8b1d9ecd
commit
f585140f70
@ -290,10 +290,9 @@ namespace DCFApixels.DragonECS
|
||||
_entitiesCount++;
|
||||
ref var slot = ref _entities[entityID];
|
||||
slot.isUsed = true;
|
||||
if (slot.gen >= 0)
|
||||
{ //если gen был пробужен у не мертвой сущности, то для отличия от мертвой, нужно инкрементировать и усыпить
|
||||
slot.gen++;
|
||||
slot.gen &= SLEEP_GEN_MASK;
|
||||
if (slot.gen >= GEN_STATUS_SEPARATOR)
|
||||
{
|
||||
slot.gen |= GEN_SLEEP_MASK;
|
||||
}
|
||||
_entityListeners.InvokeOnNewEntity(entityID);
|
||||
}
|
||||
@ -374,10 +373,10 @@ namespace DCFApixels.DragonECS
|
||||
unchecked
|
||||
{
|
||||
ref var slotGen = ref _entities[entityID].gen;
|
||||
if (slotGen < 0)
|
||||
{ //если gen меньше 0 значит он спящий, спящие нужно инкремировать
|
||||
if (slotGen < GEN_STATUS_SEPARATOR)
|
||||
{ //если gen меньше 0 значит он спящий, спящие нужно инкремировать перед выдачей
|
||||
slotGen++;
|
||||
slotGen &= WAKE_UP_GEN_MASK;
|
||||
slotGen &= GEN_WAKEUP_MASK;
|
||||
}
|
||||
return slotGen;
|
||||
}
|
||||
@ -719,7 +718,7 @@ namespace DCFApixels.DragonECS
|
||||
{
|
||||
int e = buffer[i];
|
||||
_entityDispenser.Release(e);
|
||||
_entities[e].gen |= SLEEPING_GEN_FLAG;
|
||||
_entities[e].gen |= GEN_SLEEP_MASK;
|
||||
}
|
||||
Densify();
|
||||
}
|
||||
@ -1061,7 +1060,7 @@ namespace DCFApixels.DragonECS
|
||||
[StructLayout(LayoutKind.Sequential)]
|
||||
private struct EntitySlot
|
||||
{
|
||||
public static readonly EntitySlot Empty = new EntitySlot(SLEEPING_GEN_FLAG, 0, false);
|
||||
public static readonly EntitySlot Empty = new EntitySlot(GEN_SLEEP_MASK, 0, false);
|
||||
public short gen;
|
||||
public short componentsCount;
|
||||
public bool isUsed;
|
||||
|
@ -19,10 +19,10 @@ namespace DCFApixels.DragonECS
|
||||
{
|
||||
private const short NULL_WORLD_ID = 0;
|
||||
|
||||
private const short WAKE_UP_GEN_MASK = 0x7fff;
|
||||
private const short SLEEP_GEN_MASK = ~WAKE_UP_GEN_MASK;
|
||||
private const short GEN_STATUS_SEPARATOR = 0;
|
||||
private const short GEN_WAKEUP_MASK = 0x7fff;
|
||||
private const short GEN_SLEEP_MASK = ~GEN_WAKEUP_MASK;
|
||||
|
||||
private const short SLEEPING_GEN_FLAG = short.MinValue;
|
||||
private const int DEL_ENT_BUFFER_SIZE_OFFSET = 5;
|
||||
private const int DEL_ENT_BUFFER_MIN_SIZE = 64;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user