public GameObject GetObject(ObjectPoolType type, Vector3 startPosition)
    {
        if (!objectPoolList.ContainsKey(type.ToString()))
        {
            return(null);
        }

        ObjectPool pool = (ObjectPool)objectPoolList[type.ToString()];

        GameObject obj;

        if (pool.UnusedList.Count > 0)
        {
            obj = pool.UnusedList[0];
            pool.UnusedList.RemoveAt(0);
            obj.SetActive(true);
        }
        else
        {
            obj = Instantiate(pool.Prefab);
            obj.transform.name   = pool.Prefab.name;
            obj.transform.parent = pool.Group.transform;
        }

        obj.transform.position = startPosition;
        obj.transform.rotation = Quaternion.identity;

        return(obj);
    }
    private void CreateAndAddObject(ObjectPoolType poolType)
    {
        Queue <PooledObject> targetPool = GetQueue(poolType);

        if (targetPool == null)
        {
            Debug.LogError("Pool null");
            return;
        }

        PooledObject targetObject = GetPrefabFromPool(poolType);

        PooledObject newObject = Instantiate(targetObject) as PooledObject;

        newObject.poolType        = poolType;
        newObject.gameObject.name = poolType.ToString() + GameManager.Instance.createdPooledObjects;
        newObject.gameObject.SetActive(false);
        newObject.transform.SetParent(transform, false);
        targetPool.Enqueue(newObject);
        GameManager.AddCreations();
    }
    public GameObject GetPooledObject(ObjectPoolType type)
    {
        var itemInPool = _pooledObjects.Where(i => !i.activeInHierarchy && i.tag.ToUpper() == type.ToString().ToUpper()).FirstOrDefault();

        if (itemInPool != null)
        {
            itemInPool.SetActive(true);

            return(itemInPool);
        }

        var objectPoolItem = _itemsToPool.Where(i => i.Type == type).FirstOrDefault();

        if (objectPoolItem != null && objectPoolItem.ShouldExpand)
        {
            var obj = Instantiate(objectPoolItem.ObjectToPool);

            obj.name = objectPoolItem.Type.ToString() + "_" + _pooledObjects.Where(i => i.tag.ToUpper() == type.ToString().ToUpper()).Count();
            obj.SetActive(true);

            _pooledObjects.Add(obj);

            return(obj);
        }

        return(null);
    }