Example #1
0
        public BasePoolObject GetFromPool(string poolTag, Vector3 pos, Quaternion rot, Transform parent)
        {
            if (!_poolIsInit)
            {
                InitPools();
            }
            if (_poolDict == null)
            {
                return(null);
            }
            if (!_poolDict.ContainsKey(poolTag))
            {
                return(null);
            }

            BasePoolObject poolObject    = _poolDict[poolTag].Dequeue();
            Transform      poolTransform = poolObject.transform;

            poolTransform.SetParent(parent);
            poolTransform.localPosition = pos;
            poolTransform.localRotation = rot;
            poolObject.gameObject.SetActive(true);
            poolObject.OnSpawn();

            _poolDict[poolTag].Enqueue(poolObject);
            return(poolObject);
        }
Example #2
0
        private void InitPools()
        {
            if (!poolContainer)
            {
                Debug.LogError("[ObjectPooler] PoolContainer is missing");
                return;
            }
            if (_poolIsInit || !poolContainer)
            {
                return;
            }

            _poolDict = new Dictionary <string, Queue <BasePoolObject> >();

            foreach (var pool in poolContainer.Pools)
            {
                Queue <BasePoolObject> poolObjectsQ = new Queue <BasePoolObject>();

                for (int i = 0; i < pool.PoolSize; i++)
                {
                    BasePoolObject bpo = Instantiate(pool.PoolObject, spawnPos, Quaternion.identity);
                    bpo.OnCreate(pool.PoolTag);
                    bpo.gameObject.SetActive(false);
                    poolObjectsQ.Enqueue(bpo);
                }
                _poolDict.Add(pool.PoolTag, poolObjectsQ);
            }

            _poolIsInit = true;
        }
Example #3
0
        public void ReturnToPool(BasePoolObject basePoolObject)
        {
            basePoolObject.OnReturn();
            Transform poolTransform = basePoolObject.transform;

            poolTransform.SetParent(null);
            poolTransform.position = spawnPos;
            basePoolObject.gameObject.SetActive(false);
        }