Initial commit
This commit is contained in:
@@ -0,0 +1,93 @@
|
||||
using UnityEngine;
|
||||
using System.Collections;
|
||||
using Random = UnityEngine.Random;
|
||||
|
||||
public class GunShoot : MonoBehaviour {
|
||||
|
||||
public float fireRate = 0.25f; // Number in seconds which controls how often the player can fire
|
||||
public float weaponRange = 20f; // Distance in Unity units over which the player can fire
|
||||
|
||||
public Transform gunEnd;
|
||||
public ParticleSystem muzzleFlash;
|
||||
public ParticleSystem cartridgeEjection;
|
||||
|
||||
public GameObject metalHitEffect;
|
||||
public GameObject sandHitEffect;
|
||||
public GameObject stoneHitEffect;
|
||||
public GameObject waterLeakEffect;
|
||||
public GameObject waterLeakExtinguishEffect;
|
||||
public GameObject[] fleshHitEffects;
|
||||
public GameObject woodHitEffect;
|
||||
|
||||
private float nextFire; // Float to store the time the player will be allowed to fire again, after firing
|
||||
private Animator anim;
|
||||
private GunAim gunAim;
|
||||
|
||||
void Start ()
|
||||
{
|
||||
anim = GetComponent<Animator> ();
|
||||
gunAim = GetComponentInParent<GunAim>();
|
||||
}
|
||||
|
||||
void Update ()
|
||||
{
|
||||
if (Input.GetButtonDown("Fire1") && Time.time > nextFire && !gunAim.GetIsOutOfBounds())
|
||||
{
|
||||
nextFire = Time.time + fireRate;
|
||||
muzzleFlash.Play();
|
||||
cartridgeEjection.Play();
|
||||
anim.SetTrigger ("Fire");
|
||||
|
||||
Vector3 rayOrigin = gunEnd.position;
|
||||
RaycastHit hit;
|
||||
if (Physics.Raycast(rayOrigin, gunEnd.forward, out hit, weaponRange))
|
||||
{
|
||||
HandleHit(hit);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void HandleHit(RaycastHit hit)
|
||||
{
|
||||
if(hit.collider.sharedMaterial != null)
|
||||
{
|
||||
string materialName = hit.collider.sharedMaterial.name;
|
||||
|
||||
switch(materialName)
|
||||
{
|
||||
case "Metal":
|
||||
SpawnDecal(hit, metalHitEffect);
|
||||
break;
|
||||
case "Sand":
|
||||
SpawnDecal(hit, sandHitEffect);
|
||||
break;
|
||||
case "Stone":
|
||||
SpawnDecal(hit, stoneHitEffect);
|
||||
break;
|
||||
case "WaterFilled":
|
||||
SpawnDecal(hit, waterLeakEffect);
|
||||
SpawnDecal(hit, metalHitEffect);
|
||||
break;
|
||||
case "Wood":
|
||||
SpawnDecal(hit, woodHitEffect);
|
||||
break;
|
||||
case "Meat":
|
||||
SpawnDecal(hit, fleshHitEffects[Random.Range(0, fleshHitEffects.Length)]);
|
||||
break;
|
||||
case "Character":
|
||||
SpawnDecal(hit, fleshHitEffects[Random.Range(0, fleshHitEffects.Length)]);
|
||||
break;
|
||||
case "WaterFilledExtinguish":
|
||||
SpawnDecal(hit, waterLeakExtinguishEffect);
|
||||
SpawnDecal(hit, metalHitEffect);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void SpawnDecal(RaycastHit hit, GameObject prefab)
|
||||
{
|
||||
GameObject spawnedDecal = GameObject.Instantiate(prefab, hit.point, Quaternion.LookRotation(hit.normal));
|
||||
spawnedDecal.transform.SetParent(hit.collider.transform);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user