Ejemplo n.º 1
0
	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]);
		}
	}
Ejemplo n.º 2
0
    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);
        }
    }
Ejemplo n.º 3
0
	private static int NumberOfClones(PoolItemInstanceList instList) {
		if (_isReady) {
			return instList.DespawnedClones.Count + instList.SpawnedClones.Count;
		}
		Debug.LogWarning(NotInitError);
		return -1;
	}
Ejemplo n.º 4
0
 private static int NumberOfClones(PoolItemInstanceList instList)
 {
     if (_isReady)
     {
         return(instList.DespawnedClones.Count + instList.SpawnedClones.Count);
     }
     LevelSettings.LogIfNew(NotInitError);
     return(-1);
 }
Ejemplo n.º 5
0
	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;
	}
Ejemplo n.º 6
0
    // 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;
    }
Ejemplo n.º 7
0
	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);
	}
Ejemplo n.º 8
0
 private static int NumberOfClones(PoolItemInstanceList instList)
 {
     return(instList.DespawnedClones.Count + instList.SpawnedClones.Count);
 }
Ejemplo n.º 9
0
 private static int NumberOfClones(PoolItemInstanceList instList) {
     if (_isReady) {
         return instList.DespawnedClones.Count + instList.SpawnedClones.Count;
     }
     LevelSettings.LogIfNew(NotInitError);
     return -1;
 }
Ejemplo n.º 10
0
        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);
            }
        }
Ejemplo n.º 11
0
        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;
        }
Ejemplo n.º 12
0
        // 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);
        }