public GameObject GetBullet(enumBulletType type)
    {
        GameObject bullet = ObjectPooler.Current.GetPooledObject(type);

        if (bullet != null)
        {
            bullet.transform.position = this.bulletOrigin;
            bullet.transform.rotation = this.bulletRotation;
            bullet.SetActive(true);

            bullet.GetComponent <Rigidbody>().velocity = bullet.transform.forward * this.Velocity;
        }

        return(bullet);
    }
    private GameObject CreateNewPooledObject(enumBulletType type)
    {
        switch (type)
        {
        case enumBulletType.Laser:
            GameObject laser = Instantiate(this.LaserPrefab, this.transform) as GameObject;
            laser.SetActive(false);
            return(laser);

        case enumBulletType.Plasma:
            GameObject plasma = Instantiate(this.PlasmaPrefab, this.transform) as GameObject;
            plasma.SetActive(false);
            return(plasma);
        }

        return(null);
    }
    public GameObject GetPooledObject(enumBulletType type)
    {
        switch (type)
        {
        case enumBulletType.Laser:
            for (int i = 0; i < this.laserObjects.Count; i++)
            {
                if (this.laserObjects[i].activeInHierarchy == false)
                {
                    return(this.laserObjects[i]);
                }
            }
            break;

        case enumBulletType.Plasma:
            for (int i = 0; i < this.plasmaObjects.Count; i++)
            {
                if (this.plasmaObjects[i].activeInHierarchy == false)
                {
                    return(this.plasmaObjects[i]);
                }
            }
            break;
        }

        if (this.WillGrow)
        {
            GameObject obj = this.CreateNewPooledObject(type);

            switch (type)
            {
            case enumBulletType.Laser:
                this.laserObjects.Add(obj);
                return(obj);

            case enumBulletType.Plasma:
                this.plasmaObjects.Add(obj);
                return(obj);
            }
        }

        return(null);
    }