Beispiel #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);
    }
Beispiel #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);
    }
Beispiel #3
0
    IEnumerator Burn(GameObject obj)
    {
        timerBurn = timeToBurn;
        if (obj.GetComponent <Enemy> ())
        {
            Enemy enemyToBurn = obj.GetComponent <Enemy> ();

            if (enemyToBurn.wasIgnited == false)
            {
                while (timerBurn > 0)
                {
                    enemyToBurn.wasIgnited = true;
                    if (enemyToBurn.isAlive)
                    {
                        enemyToBurn.ApplyDamage(burnDamage);
                    }
                    timerBurn--;
                    yield return(new WaitForSeconds(1));
                }

                enemyToBurn.wasIgnited = false;
            }
        }
        else if (obj.GetComponent <DestroyableObject> ())
        {
            DestroyableObject objToBurn = obj.GetComponent <DestroyableObject> ();

            if (objToBurn.wasIgnited == false)
            {
                while (timerBurn > 0)
                {
                    objToBurn.wasIgnited = true;
                    if (objToBurn.alive)
                    {
                        objToBurn.ApplyDamage(burnDamage);
                    }
                    timerBurn--;
                    yield return(new WaitForSeconds(1));
                }

                objToBurn.wasIgnited = false;
            }
        }
    }
Beispiel #4
0
    public void Explode()
    {
        Destroy(gameObject);
        if (PlayerSettings.instance.IsPlayerAround(this.gameObject, radius + 10))
        {
            AudioController.instance.PlayRandomSound(explosionSounds, AudioController.instance.explosion);
        }
        else
        {
            AudioController.instance.PlayRandomSound(farExplosionSounds, AudioController.instance.explosion);
        }

        int        randomNumber     = Random.Range(0, explosionEffects.Length);
        GameObject explosionChoosen = explosionEffects [randomNumber];

        Instantiate(explosionChoosen, transform.position, transform.rotation);

        // Find objects to destroy, destroy them and apply force to shattered pieced
        Collider[] collidersToDestroy = Physics.OverlapSphere(transform.position, radius);

        if (collidersToDestroy.Length > 2)
        {
            TimeController.instance.SlowDownTIme(0.35f, 2f);
        }

        foreach (Collider nearbyObject in collidersToDestroy)
        {
            DestroyableObject dest = nearbyObject.GetComponent <DestroyableObject> ();
            if (dest != null)
            {
                dest.ApplyDamage(explosionDamage);
            }

            if ((nearbyObject.tag == "Enemy" || nearbyObject.tag == "Turret"))
            {
                CalculateAreaDamage(nearbyObject.gameObject, radius, 0.1f);
            }

            if (nearbyObject.GetComponent <Explosion> () && nearbyObject.name != name)
            {
                nearbyObject.GetComponent <Explosion> ().Invoke("Explode", 0.15f);
            }
        }


        Collider[] collidersToMove = Physics.OverlapSphere(transform.position, radius);

        foreach (Collider nearbyObject in collidersToMove)
        {
            Rigidbody rb = nearbyObject.GetComponent <Rigidbody> ();
            if (rb != null)
            {
                rb.AddExplosionForce(explosionForce, transform.position, radius);
            }
        }

        if (PlayerSettings.instance.IsPlayerAround(transform.gameObject, radius))
        {
            CalculateAreaDamage(PlayerSettings.instance.gameObject, radius, 20);
            CameraShaker.instance.ShakeCamera(0.6f, 1.5f, 1f);
        }

        NoiseController.instance.SpreadNoise(explosionVolume, transform.position);
        Destroy(this.gameObject);
    }