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); }
// 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); }
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; } } }
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); }