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