private void RegisterInSceneObjects() { if (_potentialInSceneObjects.Count == 0) return; _deadList.Clear(); foreach (var key in _potentialInSceneObjects.Keys) { var itemTrans = key.GetComponent<Transform>(); PoolItemInstanceList match = null; if (PoolItemsByName.ContainsKey(key.ItemName)) { match = PoolItemsByName[key.ItemName]; } else { if (!autoAddMissingPoolItems) { Debug.LogWarning( $"Could not create Pool Boss item for in-Scene game object '{key.ItemName}' because Auto-Add Missing Items is turned off."); } else { var itemName = CreateMissingPoolItem(itemTrans, key.ItemName, false); match = PoolItemsByName[itemName]; } } if (match != null) { match.SpawnedClones.Add(itemTrans); } _deadList.Add(key); } // ReSharper disable once ForCanBeConvertedToForeach for (var i = 0; i < _deadList.Count; i++) { _potentialInSceneObjects.Remove(_deadList[i]); } }
private static void CreateMissingPoolItem(Transform missingTrans, string itemName, bool isSpawn) { var instances = new List <Transform>(); if (isSpawn) { var createdObjTransform = InstantiateForPool(missingTrans, instances.Count + 1); instances.Add(createdObjTransform); } var newItemSettings = new PoolItemInstanceList(instances) { LogMessages = false, AllowInstantiateMore = true, SourceTrans = missingTrans }; PoolItemsByName.Add(itemName, newItemSettings); // for the Inspector only Instance.poolItems.Add(new PoolBossItem() { instancesToPreload = 1, isExpanded = true, allowInstantiateMore = true, logMessages = false, prefabTransform = missingTrans }); if (Instance.logMessages) { Debug.LogWarning("PoolBoss created Pool Item for missing item '" + itemName + "' at " + Time.time); } }
private static int NumberOfClones(PoolItemInstanceList instList) { if (_isReady) { return instList.DespawnedClones.Count + instList.SpawnedClones.Count; } Debug.LogWarning(NotInitError); return -1; }
private static int NumberOfClones(PoolItemInstanceList instList) { if (_isReady) { return(instList.DespawnedClones.Count + instList.SpawnedClones.Count); } LevelSettings.LogIfNew(NotInitError); return(-1); }
private static string CreateMissingPoolItem(Transform missingTran, string itemName, bool isSpawn, bool enableNavMeshAgentOnSpawn = true, int navMeshAgentFrameDelay = 1) { #if UNITY_EDITOR #if UNITY_2018_2_OR_NEWER var prefab = PrefabUtility.GetCorrespondingObjectFromSource(missingTran) as Transform; #else var prefab = PrefabUtility.GetPrefabParent(missingTran) as Transform; #endif if (prefab == null) { prefab = missingTran; // there is no parent because it was already the one from Hierarchy (prefab, not instance) } #else var prefab = missingTran; #endif var instances = new List<Transform>(); if (isSpawn) { var createdObjTransform = InstantiateForPool(prefab, instances.Count + 1); instances.Add(createdObjTransform); } var navAgent = prefab.GetComponent<NavMeshAgent>(); var hasNavAgent = navAgent != null; var catName = Instance._categories[0].CatName; var newItemSettings = new PoolItemInstanceList(instances) { LogMessages = false, AllowInstantiateMore = true, SourceTrans = prefab, EnableNavMeshAgent = hasNavAgent && enableNavMeshAgentOnSpawn, NavMeshAgentFrameDelay = navMeshAgentFrameDelay, CategoryName = catName }; PoolItemsByName.Add(itemName, newItemSettings); // for the Inspector only Instance.poolItems.Add(new PoolBossItem() { instancesToPreload = 1, isExpanded = true, allowInstantiateMore = true, logMessages = false, prefabTransform = prefab, categoryName = catName }); if (Instance.logMessages) Debug.LogWarning($"PoolBoss created Pool Item for missing item '{itemName}' at {Time.time}"); return itemName; }
// ReSharper disable once UnusedMember.Local void Awake() { _isReady = false; PoolItemsByName.Clear(); for (var p = 0; p < poolItems.Count; p++) { var item = poolItems[p]; if (item.instancesToPreload <= 0) { continue; } if (item.prefabTransform == null) { LevelSettings.LogIfNew("You have an item in Pool Boss with no prefab assigned at position: " + (p + 1)); continue; } var itemName = item.prefabTransform.name; if (PoolItemsByName.ContainsKey(itemName)) { LevelSettings.LogIfNew("You have more than one instance of '" + itemName + "' in Pool Boss. Skipping the second instance."); continue; } var itemClones = new List <Transform>(); for (var i = 0; i < item.instancesToPreload; i++) { var createdObjTransform = InstantiateForPool(item.prefabTransform, i + 1); itemClones.Add(createdObjTransform); } var instanceList = new PoolItemInstanceList(itemClones) { LogMessages = item.logMessages, AllowInstantiateMore = item.allowInstantiateMore, SourceTrans = item.prefabTransform, ItemHardLimit = item.itemHardLimit, AllowRecycle = item.allowRecycle }; PoolItemsByName.Add(itemName, instanceList); } _isReady = true; }
private void FillItemPool(PoolBossItem item, Transform transformTemplate) { var itemName = GetPrefabName(transformTemplate); // calling this here will add the PoolableInfo script to the prefab, so all clones will get it. if (PoolItemsByName.ContainsKey(itemName)) { Debug.LogError($"You have more than one instance of '{itemName}' in Pool Boss. Skipping the second instance."); return; } var itemClones = new List<Transform>(); var navAgent = transformTemplate.GetComponent<NavMeshAgent>(); var hasAgent = navAgent != null; for (var i = 0; i < item.instancesToPreload; i++) { var createdObjTransform = InstantiateForPool(transformTemplate, i + 1); itemClones.Add(createdObjTransform); } var instanceList = new PoolItemInstanceList(itemClones) { LogMessages = item.logMessages, AllowInstantiateMore = item.allowInstantiateMore, SourceTrans = transformTemplate, ItemHardLimit = item.itemHardLimit, AllowRecycle = item.allowRecycle, EnableNavMeshAgent = hasAgent && item.enableNavMeshAgentOnSpawn, NavMeshAgentFrameDelay = item.delayNavMeshEnableByFrames, CategoryName = item.categoryName }; if (Instance._categories.Find(delegate (PoolBossCategory x) { return x.CatName == item.categoryName; }) == null) { Instance._categories.Add(new PoolBossCategory() { CatName = item.categoryName, IsExpanded = true, IsEditing = false }); } PoolItemsByName.Add(itemName, instanceList); }
private static int NumberOfClones(PoolItemInstanceList instList) { return(instList.DespawnedClones.Count + instList.SpawnedClones.Count); }
private static int NumberOfClones(PoolItemInstanceList instList) { if (_isReady) { return instList.DespawnedClones.Count + instList.SpawnedClones.Count; } LevelSettings.LogIfNew(NotInitError); return -1; }
private static void CreateMissingPoolItem(Transform missingTrans, string itemName, bool isSpawn) { var instances = new List<Transform>(); if (isSpawn) { var createdObjTransform = InstantiateForPool(missingTrans, instances.Count + 1); instances.Add(createdObjTransform); } var newItemSettings = new PoolItemInstanceList(instances) { LogMessages = false, AllowInstantiateMore = true, SourceTrans = missingTrans }; PoolItemsByName.Add(itemName, newItemSettings); // for the Inspector only Instance.poolItems.Add(new PoolBossItem() { instancesToPreload = 1, isExpanded = true, allowInstantiateMore = true, logMessages = false, prefabTransform = missingTrans, categoryName = Instance._categories[0].CatName }); if (Instance.logMessages) { Debug.LogWarning("PoolBoss created Pool Item for missing item '" + itemName + "' at " + Time.time); } }
public static void Initialize() { _isReady = false; PoolItemsByName.Clear(); for (var p = 0; p < Instance.poolItems.Count; p++) { var item = Instance.poolItems[p]; if (item.instancesToPreload <= 0) { continue; } if (item.prefabTransform == null) { LevelSettings.LogIfNew("You have an item in Pool Boss with no prefab assigned at position: " + (p + 1)); continue; } var itemName = item.prefabTransform.name; if (PoolItemsByName.ContainsKey(itemName)) { LevelSettings.LogIfNew("You have more than one instance of '" + itemName + "' in Pool Boss. Skipping the second instance."); continue; } var itemClones = new List<Transform>(); for (var i = 0; i < item.instancesToPreload; i++) { var createdObjTransform = InstantiateForPool(item.prefabTransform, i + 1); itemClones.Add(createdObjTransform); } var instanceList = new PoolItemInstanceList(itemClones) { LogMessages = item.logMessages, AllowInstantiateMore = item.allowInstantiateMore, SourceTrans = item.prefabTransform, ItemHardLimit = item.itemHardLimit, AllowRecycle = item.allowRecycle }; PoolItemsByName.Add(itemName, instanceList); } _isReady = true; }
// ReSharper disable once MemberCanBeMadeStatic.Local private void CreatePoolItemClones(PoolBossItem item, bool isDuringAwake) { if (!isDuringAwake) { Instance.poolItems.Add(item); } if (item.instancesToPreload <= 0) { return; } if (item.prefabTransform == null) { if (isDuringAwake) { LevelSettings.LogIfNew("You have an item in Pool Boss with no prefab assigned in category: " + item.categoryName); } else { LevelSettings.LogIfNew("You are attempting to add a Pool Boss Item with no prefab assigned."); } return; } var itemName = item.prefabTransform.name; if (PoolItemsByName.ContainsKey(itemName)) { LevelSettings.LogIfNew("You have more than one instance of '" + itemName + "' in Pool Boss. Skipping the second instance."); return; } var itemClones = new List<Transform>(); for (var i = 0; i < item.instancesToPreload; i++) { var createdObjTransform = InstantiateForPool(item.prefabTransform, i + 1); itemClones.Add(createdObjTransform); } var instanceList = new PoolItemInstanceList(itemClones) { LogMessages = item.logMessages, AllowInstantiateMore = item.allowInstantiateMore, SourceTrans = item.prefabTransform, ItemHardLimit = item.itemHardLimit, AllowRecycle = item.allowRecycle }; if (Instance._categories.Find(delegate(PoolBossCategory x) { return x.CatName == item.categoryName; }) == null) { Instance._categories.Add(new PoolBossCategory() { CatName = item.categoryName, IsExpanded = true, IsEditing = false }); } PoolItemsByName.Add(itemName, instanceList); }