예제 #1
0
    protected virtual RaycastHit[] Shoot(int numberOfShots)
    {
        trail.Play();
        trail.Emit(10);
        RaycastHit        hit;
        DestroyableObject obj = null;

        RaycastHit[] hitArray = new RaycastHit[numberOfShots];
        AudioController.instance.PlayRandomSound(shots, AudioController.instance.weapon);
        for (int i = 0; i < numberOfShots; i++)
        {
            Vector3 shotPos = new Vector3(Random.Range(-xSpread, xSpread), Random.Range(-ySpread, ySpread), 0f) + cam.transform.forward;
            if (Physics.Raycast(cam.transform.position, shotPos, out hit, range))
            {
                Debug.Log(hit.collider.name);
                hitArray [i] = hit;

                obj = hit.transform.GetComponent <DestroyableObject> ();
                Explosion      _exlposion = hit.transform.GetComponent <Explosion> ();
                Enemy          _enemy     = hit.transform.GetComponent <Enemy> ();
                PlayerSettings player     = hit.transform.GetComponentInChildren <PlayerSettings>();
                Turret         turret     = hit.transform.GetComponentInParent <Turret>();

                if (turret != null)
                {
                    turret.ApplyDamage(damage, hit);
                }
                if (player != null && player.isAlive)
                {
                    player.ApplyDamage(damage);
                }

                if (_exlposion != null && !_exlposion.exploaded)
                {
                    _exlposion.Explode();
                    _exlposion.exploaded = true;
                }
                if (obj != null && !obj.wasHit && _exlposion == null)
                {
                    obj.ApplyDamage(obj.health);
                    obj.wasHit = true;
                }

                if (_enemy != null && _enemy.isAlive)
                {
                    enemyHitted = true;
                    _enemy.ApplyDamage(damage);
                }
                if (hit.rigidbody != null)
                {
                    hit.rigidbody.AddForce(-hit.normal * force);
                }

                NoiseController.instance.SpreadNoise(shotVolume / 2, hit.transform.position);
            }
        }
        NoiseController.instance.SpreadNoise(shotVolume, transform.position);

        return(hitArray);
    }
예제 #2
0
    // Perform a Raycast Shot
    protected virtual RaycastHit Shoot()
    {
        RaycastHit hit;

        if (Physics.Raycast(cam.transform.position, cam.transform.forward, out hit, range, ~(1 << LayerMask.NameToLayer("GunLayer"))))
        {
            DestroyableObject obj        = hit.transform.GetComponent <DestroyableObject> ();
            Explosion         _exlposion = hit.transform.GetComponent <Explosion> ();
            Enemy             _enemy     = hit.transform.GetComponent <Enemy> ();
            PlayerSettings    player     = hit.transform.GetComponentInChildren <PlayerSettings>();
            Turret            turret     = hit.transform.GetComponentInParent <Turret>();

            if (turret != null)
            {
                turret.ApplyDamage(damage, hit);
            }

            if (obj != null)
            {
                obj.ApplyDamage(damage);
            }
            if (player != null && player.isAlive && !transform.parent.GetComponentInParent <PlayerSettings>())
            {
                player.ApplyDamage(damage / 2);
            }

            if (_enemy != null && _enemy.isAlive)
            {
                enemyHitted = true;

                _enemy.ApplyDamage(damage, hit);
            }
            else
            {
                enemyHitted = false;
            }


            if (_exlposion != null)
            {
                _exlposion.Explode();
            }
            if (hit.rigidbody != null)
            {
                hit.rigidbody.AddForce(-hit.normal * force);
            }
            NoiseController.instance.SpreadNoise(shotVolume / 2, hit.transform.position);
        }
        else
        {
        }
        NoiseController.instance.SpreadNoise(shotVolume, transform.position);
        return(hit);
    }