Esempio n. 1
0
    /// <summary>
    /// Use "PoolTypes.TYPE.ToString()" as poolTag
    /// </summary>
    public GameObject GetObjectFromPool(string poolTag)
    {
        currentPool = gameObjectPools[poolTag];

        //If pool queue is empty creates new instances and asigns the last added instance
        if (pooledObjectQueues[poolTag].Count == 0)
        {
            for (int i = 0; i < currentPool.IncrementalSteps; i++)
            {
                currentInstance = Instantiate(currentPool.Prefab);
                currentInstance.transform.SetParent(currentPool.PooledObjectParent.transform);
                ReturnObjectToPool(poolTag, currentInstance);
            }
        }

        currentInstance = pooledObjectQueues[poolTag].Dequeue();
        currentInstance.SetActive(true);

        IpooledObjectGet = currentInstance.GetComponent <IPooleableObject>();
        if (IpooledObjectGet != null)
        {
            IpooledObjectGet.OnGetFromPool();
        }
        IpooledObjectGet = null;

        return(currentInstance);
    }
Esempio n. 2
0
    /// <summary>
    /// Use "PoolTypes.TYPE.ToString()" as poolTag
    /// </summary>
    public void ReturnObjectToPool(string poolTag, GameObject gameObjectToReturn)
    {
        pooledObjectQueues[poolTag].Enqueue(gameObjectToReturn);

        IpooledObjectReturn = currentInstance.GetComponent <IPooleableObject>();
        if (IpooledObjectReturn != null)
        {
            IpooledObjectReturn.OnReturnToPool();
        }
        IpooledObjectReturn = null;
        gameObjectToReturn.transform.SetParent(gameObjectPools[poolTag].PooledObjectParent.transform);
        gameObjectToReturn.SetActive(false);
    }
Esempio n. 3
0
    public GameObject SpawnFromPool(string pTag, Vector3 pPos, Quaternion pRot)
    {
        GameObject objToSpawn = poolDictionary[pTag].Dequeue();

        objToSpawn.SetActive(true);
        objToSpawn.transform.position = pPos;
        objToSpawn.transform.rotation = pRot;

        IPooleableObject pooledObj = objToSpawn.GetComponent <IPooleableObject>();

        if (pooledObj != null)
        {
            pooledObj.OnObjectSpawn();
        }

        poolDictionary[pTag].Enqueue(objToSpawn);


        return(objToSpawn);
    }