Пример #1
0
    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();
        }
    }
Пример #2
0
 public static bool Unsubscribe(Collider collider, IHitReceiver receiver) => Receivers.Remove(collider);
Пример #3
0
 public static void Subscribe(Collider collider, IHitReceiver receiver)
 {
     Receivers[collider] = receiver;
 }