From 21ee6aee00a945c7e4466ea413b1c237a214699e Mon Sep 17 00:00:00 2001 From: Mikhail <99481254+DCFApixels@users.noreply.github.com> Date: Thu, 18 Jan 2024 21:25:26 +0800 Subject: [PATCH] fix --- src/Debug/EcsDebugUtility.cs | 1 + src/Pools/EcsHybridPool.cs | 16 ++++++++++++---- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/src/Debug/EcsDebugUtility.cs b/src/Debug/EcsDebugUtility.cs index af4b262..bef2053 100644 --- a/src/Debug/EcsDebugUtility.cs +++ b/src/Debug/EcsDebugUtility.cs @@ -49,6 +49,7 @@ namespace DCFApixels.DragonECS } private static string AutoToString(object target, Type type, bool isWriteName) { + //TODO сделать специальный вывод в виде названий констант для Enum-ов var fields = type.GetFields(RFL_FLAGS); string[] values = new string[fields.Length]; for (int i = 0; i < fields.Length; i++) diff --git a/src/Pools/EcsHybridPool.cs b/src/Pools/EcsHybridPool.cs index 7c40337..2009d88 100644 --- a/src/Pools/EcsHybridPool.cs +++ b/src/Pools/EcsHybridPool.cs @@ -71,16 +71,18 @@ namespace DCFApixels.DragonECS _mediator.RegisterComponent(entityID, _componentTypeID, _maskBit); _listeners.InvokeOnAdd(entityID); if (isMain) + { component.OnAddToPool(_source.GetEntityLong(entityID)); + } _items[itemIndex] = component; _entities[itemIndex] = entityID; } public void Add(int entityID, T component) { HybridMapping mapping = _source.GetHybridMapping(component.GetType()); - mapping.GetTargetTypePool().AddRefInternal(entityID, component, false); + mapping.GetTargetTypePool().AddRefInternal(entityID, component, true); foreach (var pool in mapping.GetPools()) - pool.AddRefInternal(entityID, component, true); + pool.AddRefInternal(entityID, component, false); } public void Set(int entityID, T component) { @@ -122,9 +124,13 @@ namespace DCFApixels.DragonECS ref int itemIndex = ref _mapping[entityID]; T component = _items[itemIndex]; if (isMain) + { component.OnDelFromPool(_source.GetEntityLong(entityID)); + } if (_recycledItemsCount >= _recycledItems.Length) + { Array.Resize(ref _recycledItems, _recycledItems.Length << 1); + } _recycledItems[_recycledItemsCount++] = itemIndex; _mapping[entityID] = 0; _entities[itemIndex] = 0; @@ -136,9 +142,11 @@ namespace DCFApixels.DragonECS { var component = Get(entityID); HybridMapping mapping = _source.GetHybridMapping(component.GetType()); - mapping.GetTargetTypePool().DelInternal(entityID, false); + mapping.GetTargetTypePool().DelInternal(entityID, true); foreach (var pool in mapping.GetPools()) - pool.DelInternal(entityID, true); + { + pool.DelInternal(entityID, false); + } } public void TryDel(int entityID) {