public void Fire() { handAnim.Play("Fire"); for (int i = 0; i < stats.bulletCount; i++) { Vector3 forwardVector = Vector3.forward; float deviation = UnityEngine.Random.Range(0f, stats.spread); float angle = UnityEngine.Random.Range(0f, 360f); forwardVector = Quaternion.AngleAxis(deviation, Vector3.up) * forwardVector; forwardVector = Quaternion.AngleAxis(angle, Vector3.forward) * forwardVector; forwardVector = cameraTransform.transform.rotation * forwardVector; Physics.Raycast(cameraTransform.position, forwardVector, out RaycastHit hit, 200f, layerMask); // change to projectile? if (hit.transform) { IHitReceiver hittable = hit.transform.GetComponent <IHitReceiver>(); if (hittable != null) { hittable.Hit(15.0f); } else { //DrawDecals; } Transform dec = Instantiate(decal, hit.transform).transform; dec.position = hit.point; } } magAmmo--; nextFireTime = Time.time + stats.fireTime; AmmoUI.UpdateAmmo(magAmmo); recoilObject.recoil += stats.recoilTime; if (magAmmo == 0) { Reload(); } }
public static bool Unsubscribe(Collider collider, IHitReceiver receiver) => Receivers.Remove(collider);
public static void Subscribe(Collider collider, IHitReceiver receiver) { Receivers[collider] = receiver; }