public GameObject SpawnFromPool(PoolObjectsTag tag) { if (!poolDictionary.ContainsKey(tag)) { Debug.LogWarning($"Pool with tag {tag}, doesn't excists"); return(null); } //If the initialized size of the queue is not enough, creates another object var objectToSpawn = poolDictionary[tag].Count == 0 ? CreateInstance(tag) : poolDictionary[tag].Dequeue(); objectToSpawn.SetActive(true); objectToSpawn.transform.position = transform.position; objectToSpawn.transform.rotation = Quaternion.identity; var pooledObj = objectToSpawn.GetComponent <IPooledObject>(); if (pooledObj != null) { pooledObj.OnObjectSpawn(); pooledObj.Tag = tag; } return(objectToSpawn); }
private Pool GetPoolElement(PoolObjectsTag tag) { Pool poolElement = new Pool(); foreach (Pool pool in pools) { if (pool.tag == tag) { poolElement = pool; break; } } return(poolElement); }
private GameObject CreateInstance(PoolObjectsTag tag) { Pool poolElement = GetPoolElement(tag); GameObject prefab = poolElement.prefab; if (prefab == null) { Debug.LogWarning($"Instantiation tag:{tag} error"); return(null); } GameObject obj = Instantiate(prefab); obj.transform.SetParent(transform); return(obj); }