/// <summary> /// Returns the number of clones (active and disabled) for the given pooled item /// </summary> private static int GetCloneCount(PooledItem pooledItem, PoolyExtension poolyExtension = null) { if (!Initialized) { Debug.LogWarning("[Pooly] Not has not finished it's initialization yet."); } return(Initialized ? pooledItem.CloneCount : -1); }
/// <summary> /// Despawns all the clones of all the prefabs from the given Pooly Extension /// </summary> public static void DespawnAllClonesFromPoolExtension(PoolyExtension poolExtension) { if (Instance == null) { return; } // Scene change in progress if (poolExtension == null) { return; } foreach (var pooledItem in poolExtension.Pool.Values) { DespawnAllClonesOfPrefab(Pool[pooledItem.prefab.name].prefab); } }
/// <summary> /// Despawns all the clones of all the prefabs from the given Pooly Extension in the given category /// </summary> public static void DespawnAllClonesInCategory(PoolyExtension poolExtension, string category) { if (Instance == null) { return; } // Scene change in progress if (poolExtension == null) { return; } if (string.IsNullOrEmpty(category)) { Debug.LogWarning("[Pooly] Cannot Despawn All Clones In Category because you provided an empty/null category name."); return; } foreach (var pooledItem in poolExtension.Pool.Values) { if (category.Equals(pooledItem.category)) { DespawnAllClonesOfPrefab(Pool[pooledItem.prefab.name].prefab); } } }
/// <summary> /// Created a pooled item for the given item and all the clones that need to be preloaded, in the specified pattern. /// </summary> public IEnumerator CreateClones(Item item, Transform poolTransform, Transform categoryTransform, PoolyExtension poolyExtension) { runningCoroutines++; var pooledItem = new PooledItem(new List <Transform>()) { category = item.category, prefab = item.prefab, preloadCloneCount = item.preloadCloneCount, limitCloneCount = item.limitCloneCount, cloneCountLimit = item.cloneCountLimit, limitCloneCreationPerFrame = item.limitCloneCreationPerFrame, clonesOnFirstFrame = item.clonesOnFirstFrame, clonesPerFrame = item.clonesPerFrame, delayCreatingClonesForFrames = item.delayCreatingClonesForFrames, allowInstantiateMore = item.allowInstantiateMore, allowRecycleClones = item.allowRecycleClones, debug = item.debug, poolTransform = poolTransform, categoryTransform = categoryTransform }; Pooly.Pool.Add(item.prefab.name, pooledItem); #if UNITY_EDITOR if (PoolySettings.enableStatistics) { //pooledItem.ownStats = PoolyStatistics.ActivateStatsForPrefab(item.prefab.name, item.category, item.prefab, item.preloadCloneCount, poolyExtension); pooledItem.ownStats = PoolyStatistics.GetStatisticsItem(poolyExtension, item.category, item.prefab.name, item.prefab, item.preloadCloneCount); } #endif int cloneNumber = 1; auxCloneTransform = null; if (item.limitCloneCreationPerFrame) { if (item.clonesOnFirstFrame > 0) { while (cloneNumber <= item.preloadCloneCount && cloneNumber <= item.clonesOnFirstFrame) { auxCloneTransform = CreateClone(item.prefab, cloneNumber, categoryTransform); Pooly.Pool[item.prefab.name].DisabledClones.Add(auxCloneTransform); cloneNumber++; } } if (item.delayCreatingClonesForFrames > 0) { int delayedFrames = 0; while (delayedFrames <= item.delayCreatingClonesForFrames) { yield return(null); delayedFrames++; } } while (cloneNumber <= item.preloadCloneCount) { auxCloneTransform = CreateClone(item.prefab, cloneNumber, categoryTransform); Pooly.Pool[item.prefab.name].DisabledClones.Add(auxCloneTransform); if (cloneNumber % item.clonesPerFrame == 0) { yield return(null); } cloneNumber++; } } else { while (cloneNumber <= item.preloadCloneCount) { auxCloneTransform = CreateClone(item.prefab, cloneNumber, categoryTransform); Pooly.Pool[item.prefab.name].DisabledClones.Add(auxCloneTransform); cloneNumber++; } } if (poolyExtension != null) { poolyExtension.Pool.Add(item.prefab.name, pooledItem); } runningCoroutines--; }