Ejemplo n.º 1
0
    private void ShootProjectile(int bulletNum)
    {
        float      randY  = Random.Range(-_accuracy, _accuracy);
        GameObject effect = Instantiate(BarrelEffect, TestBarrel.transform.position, Quaternion.identity) as GameObject;

        effect.transform.rotation  = TestBarrel.rotation;
        effect.transform.rotation *= Quaternion.Euler(0, randY, 0);
        randY += bulletNum * 12;

        switch (Type)
        {
        case ShootType.Bullet:
            Rigidbody proj = _spawnablePool.GetBullet();
            proj.GetComponent <BulletScript>().SetStats(_currentDamage, _projLifetime);

            proj.transform.position  = TestBarrel.position;
            proj.transform.rotation  = TestBarrel.rotation;
            proj.transform.rotation *= Quaternion.Euler(90, randY, 0);
            proj.gameObject.GetComponent <TrailRenderer>().Clear();
            proj.AddForce(proj.transform.up * _projSpeed, ForceMode.VelocityChange);
            break;

        case ShootType.Lobbing:
            float     dist  = Vector3.Distance(transform.position, PlayerController.Instance.LookPoint);
            Rigidbody shell = _spawnablePool.GetShell();
            shell.GetComponent <BulletScript>().SetStats(_currentDamage, _projLifetime);

            if (dist < 3)
            {
                dist = 3;
            }

            if (dist > 16)
            {
                dist = 16;
            }
            shell.transform.position  = TestBarrel.position;
            shell.transform.rotation  = TestBarrel.rotation;
            shell.transform.rotation *= Quaternion.Euler(90, randY, 0);
            shell.gameObject.GetComponent <TrailRenderer>().Clear();
            shell.AddForce(shell.transform.up * (dist * Random.Range(2.1f, 3.3f)), ForceMode.VelocityChange);
            break;

        case ShootType.Laser:
            Rigidbody laserProj = _spawnablePool.GetLaser();
            laserProj.GetComponent <BulletScript>().SetStats(_currentDamage, _projLifetime);

            laserProj.transform.position  = TestBarrel.position;
            laserProj.transform.rotation  = TestBarrel.rotation;
            laserProj.transform.rotation *= Quaternion.Euler(90, randY, 0);
            laserProj.gameObject.GetComponent <TrailRenderer>().Clear();
            laserProj.AddForce(laserProj.transform.up * _projSpeed, ForceMode.VelocityChange);
            break;

        case ShootType.Flame:
            Rigidbody flameProj = _spawnablePool.GetFlame();
            flameProj.GetComponent <BulletScript>().SetStats(_currentDamage, _projLifetime);

            flameProj.transform.position  = TestBarrel.position;
            flameProj.transform.rotation  = TestBarrel.rotation;
            flameProj.transform.rotation *= Quaternion.Euler(90, randY, 0);
            flameProj.gameObject.GetComponent <TrailRenderer>().Clear();
            flameProj.AddForce(flameProj.transform.up * _projSpeed, ForceMode.VelocityChange);
            break;

        case ShootType.Rocket:
            Rigidbody rocketProj = _spawnablePool.GetRocket();
            rocketProj.GetComponent <BulletScript>().SetStats(_currentDamage, _projLifetime);

            rocketProj.transform.position  = TestBarrel.position;
            rocketProj.transform.rotation  = TestBarrel.rotation;
            rocketProj.transform.rotation *= Quaternion.Euler(90, randY, 0);
            rocketProj.gameObject.GetComponent <TrailRenderer>().Clear();
            rocketProj.AddForce(rocketProj.transform.up * _projSpeed, ForceMode.VelocityChange);
            break;
        }
    }