diff --git a/src/EcsWorld.cs b/src/EcsWorld.cs index dc4e0ef..40a345a 100644 --- a/src/EcsWorld.cs +++ b/src/EcsWorld.cs @@ -274,7 +274,6 @@ namespace DCFApixels.DragonECS public void DeleteEmptyEntites() { - throw new NotImplementedException(); foreach (var e in Entities) { if (_componentCounts[e] <= 0) diff --git a/src/EcsWorld.pools.cs b/src/EcsWorld.pools.cs index c790a83..71ef175 100644 --- a/src/EcsWorld.pools.cs +++ b/src/EcsWorld.pools.cs @@ -142,15 +142,17 @@ namespace DCFApixels.DragonECS [MethodImpl(MethodImplOptions.AggressiveInlining)] private void UnregisterEntityComponent(int entityID, int componentTypeID, EcsMaskChunck maskBit) { -// _poolComponentCounts[componentTypeID]--; -// var count = --_componentCounts[entityID]; -// _entitiesComponentMasks[entityID][maskBit.chankIndex] &= ~maskBit.mask; -// -// if (count == 0 && _allEntites.Has(entityID)) -// DelEntity(entityID); -//#if (DEBUG && !DISABLE_DEBUG) || ENABLE_DRAGONECS_ASSERT_CHEKS -// if (count < 0) Throw.World_InvalidIncrementComponentsBalance(); -//#endif + _poolComponentCounts[componentTypeID]--; + var count = --_componentCounts[entityID]; + _entitiesComponentMasks[entityID][maskBit.chankIndex] &= ~maskBit.mask; + + if (count == 0 && IsUsed(entityID)) + { + DelEntity(entityID); + } +#if (DEBUG && !DISABLE_DEBUG) || ENABLE_DRAGONECS_ASSERT_CHEKS + if (count < 0) Throw.World_InvalidIncrementComponentsBalance(); +#endif } [MethodImpl(MethodImplOptions.AggressiveInlining)] private bool HasEntityComponent(int entityID, EcsMaskChunck maskBit)