public static void RemoveAt(ref IDrawer[] target, int index, bool disposeOriginalArray, bool disposeRemovedDrawer) //if needed, could add flag for this { #if DEV_MODE && PI_ASSERTATIONS UnityEngine.Debug.Assert(index >= 0, StringUtils.ToColorizedString(index)); UnityEngine.Debug.Assert(index <= target.Length, StringUtils.ToColorizedString(index)); #endif int oldSize = target.Length; int newSize = oldSize - 1; var result = Create(newSize); for (int n = oldSize - 1; n > index; n--) { result[n - 1] = target[n]; target[n] = null; } if (disposeRemovedDrawer) { var removed = target[index]; if (removed != null) { DrawerPool.Pool(removed); } } for (int n = index - 1; n >= 0; n--) { result[n] = target[n]; target[n] = null; } if (disposeOriginalArray) { Dispose(ref target, false); } target = result; }