diff --git a/src/Collections/EcsSpan.cs b/src/Collections/EcsSpan.cs index 1880656..8f0a26d 100644 --- a/src/Collections/EcsSpan.cs +++ b/src/Collections/EcsSpan.cs @@ -36,7 +36,7 @@ namespace DCFApixels.DragonECS public bool IsNull { [MethodImpl(MethodImplOptions.AggressiveInlining)] - get => _values.IsEmpty; + get => _worldID == 0; } #endregion diff --git a/src/EcsWorld.cs b/src/EcsWorld.cs index 195a115..dc825ca 100644 --- a/src/EcsWorld.cs +++ b/src/EcsWorld.cs @@ -18,6 +18,8 @@ namespace DCFApixels.DragonECS public short componentsCount; [FieldOffset(4)] public bool isUsed; + //[FieldOffset(5)] + //public bool isLocked; public EntitySlot(short gen, short componentsCount, bool isUsed) { this.gen = gen; diff --git a/src/EcsWorld.pools.cs b/src/EcsWorld.pools.cs index be7f207..f8b2eeb 100644 --- a/src/EcsWorld.pools.cs +++ b/src/EcsWorld.pools.cs @@ -209,6 +209,7 @@ namespace DCFApixels.DragonECS [MethodImpl(MethodImplOptions.AggressiveInlining)] private void RegisterEntityComponent(int entityID, int componentTypeID, EcsMaskChunck maskBit) { + UpVersion(); _poolComponentCounts[componentTypeID]++; _entities[entityID].componentsCount++; _entityComponentMasks[entityID * _entityComponentMaskLength + maskBit.chankIndex] |= maskBit.mask; @@ -216,6 +217,7 @@ namespace DCFApixels.DragonECS [MethodImpl(MethodImplOptions.AggressiveInlining)] private void UnregisterEntityComponent(int entityID, int componentTypeID, EcsMaskChunck maskBit) { + UpVersion(); _poolComponentCounts[componentTypeID]--; var count = --_entities[entityID].componentsCount; _entityComponentMasks[entityID * _entityComponentMaskLength + maskBit.chankIndex] &= ~maskBit.mask; diff --git a/src/entlong.cs b/src/entlong.cs index f9690fc..6f22edd 100644 --- a/src/entlong.cs +++ b/src/entlong.cs @@ -223,7 +223,7 @@ namespace DCFApixels.DragonECS } - [DebuggerTypeProxy(typeof(entlong.DebuggerProxy))] + [DebuggerTypeProxy(typeof(DebuggerProxy))] public readonly struct EntitySlotInfo : IEquatable { public readonly int id; @@ -280,5 +280,31 @@ namespace DCFApixels.DragonECS world = this.world; } #endregion + + + internal class DebuggerProxy + { + private List _componentsList = new List(); + private entlong _value; + public long full { get { return _value.full; } } + public int id { get { return _value.id; } } + public int gen { get { return _value.gen; } } + public int world { get { return _value.world; } } + public EntState State { get { return _value.IsNull ? EntState.Null : _value.IsAlive ? EntState.Alive : EntState.Dead; } } + public EcsWorld EcsWorld { get { return EcsWorld.GetWorld(world); } } + public IEnumerable components + { + get + { + _value.World.GetComponents(_value.ID, _componentsList); + return _componentsList; + } + } + public DebuggerProxy(EntitySlotInfo value) + { + _value = new entlong(value.id, value.gen, value.world); + } + public enum EntState { Null, Dead, Alive, } + } } }