예제 #1
0
 public void SetRightWeapon(GameObject weapon)
 {
     if (weapon != null)
     {
         var w = weapon.GetComponent <vShooterWeapon>();
         rWeapon = w;
         if (rWeapon)
         {
             rWeapon.ignoreTags = ignoreTags;
             rWeapon.hitLayer   = aimTargetLayer;
             rWeapon.root       = transform;
             rWeapon.onDestroy.AddListener(OnDestroyWeapon);
             if (usingThirdPersonController)
             {
                 if (useAmmoDisplay && !ammoDisplay)
                 {
                     ammoDisplay = FindObjectOfType <vAmmoDisplay>();
                 }
                 if (useAmmoDisplay && ammoDisplay)
                 {
                     ammoDisplay.Show();
                 }
                 UpdateTotalAmmo();
             }
             currentShotTime = 0;
         }
     }
 }
예제 #2
0
    public virtual void Shoot(Vector3 aimPosition, bool applyHipfirePrecision = false)
    {
        if (isShooting)
        {
            return;
        }
        if (rWeapon.ammoCount > 0)
        {
            var _aimPos = applyHipfirePrecision ? aimPosition + HipFirePrecision(aimPosition) : aimPosition;
            rWeapon.ShootEffect(_aimPos, transform);

            if (applyRecoilToCamera)
            {
                var recoilHorizontal = Random.Range(rWeapon.recoilLeft, rWeapon.recoilRight);
                var recoilUp         = Random.Range(0, rWeapon.recoilUp);
                StartCoroutine(Recoil(recoilHorizontal, recoilUp));
            }

            if (useAmmoDisplay && !ammoDisplay)
            {
                ammoDisplay = FindObjectOfType <vAmmoDisplay>();
            }
            if (useAmmoDisplay && ammoDisplay)
            {
                ammoDisplay.UpdateDisplay(string.Format("{0} / {1}", rWeapon.ammoCount, totalAmmo), rWeapon.ammoID);
            }
        }
        else
        {
            rWeapon.EmptyClipEffect();
        }
        currentShotTime = rWeapon.shootFrequency;
    }
예제 #3
0
 public virtual void Shoot(Vector3 aimPosition)
 {
     if (rWeapon.ammoCount > 0)
     {
         shotting = true;
         rWeapon.ShootEffect(aimPosition, transform);
         if (applyRecoilToCamera)
         {
             var recoilHorizontal = Random.Range(rWeapon.recoilLeft, rWeapon.recoilRight);
             var recoilUp         = Random.Range(0, rWeapon.recoilUp);
             StartCoroutine(Recoil(recoilHorizontal, recoilUp));
         }
         if (animator)
         {
             animator.SetTrigger("Shoot");
         }
         StartCoroutine(ResetShot(rWeapon.shootFrequency));
         if (useAmmoDisplay && !ammoDisplay)
         {
             ammoDisplay = FindObjectOfType <vAmmoDisplay>();
         }
         if (useAmmoDisplay && ammoDisplay)
         {
             ammoDisplay.UpdateDisplay(string.Format("{0} / {1}", rWeapon.ammoCount, totalAmmo), rWeapon.ammoID);
         }
     }
     else
     {
         shotting = true;
         rWeapon.EmptyClipEffect();
         StartCoroutine(ResetShot(rWeapon.shootFrequency));
     }
 }
 protected virtual void HideAmmoDisplay(vAmmoDisplay ammoDisplay)
 {
     if (useAmmoDisplay && ammoDisplay)
     {
         ammoDisplay.UpdateDisplay("");
         ammoDisplay.Hide();
     }
 }
예제 #5
0
 public void OnDestroyWeapon(GameObject otherGameObject)
 {
     if (usingThirdPersonController)
     {
         if (useAmmoDisplay && !ammoDisplay)
         {
             ammoDisplay = FindObjectOfType <vAmmoDisplay>();
         }
         if (useAmmoDisplay && (ammoDisplay && (rWeapon == null || rWeapon.gameObject.Equals(otherGameObject))))
         {
             ammoDisplay.UpdateDisplay("");
             ammoDisplay.Hide();
         }
     }
 }
        protected void GetAmmoDisplays()
        {
            var ammoDisplays = FindObjectsOfType <vAmmoDisplay>();

            if (ammoDisplays.Length > 0)
            {
                if (!ammoDisplayL)
                {
                    ammoDisplayL = ammoDisplays.vToList().Find(d => d.displayID == leftWeaponAmmoDisplayID);
                }
                if (!ammoDisplayR)
                {
                    ammoDisplayR = ammoDisplays.vToList().Find(d => d.displayID == rightWeaponAmmoDisplayID);
                }
            }
        }
예제 #7
0
    public void UpdateTotalAmmo()
    {
        var ammoCount = 0;
        var ammo      = WeaponAmmo();

        if (ammo != null)
        {
            ammoCount += ammo.count;
        }
        if (totalAmmoHandler != null)
        {
            totalAmmoHandler(rWeapon.ammoID, ref ammoCount);
        }
        totalAmmo = ammoCount;
        if (useAmmoDisplay && !ammoDisplay)
        {
            ammoDisplay = FindObjectOfType <vAmmoDisplay>();
        }

        if (useAmmoDisplay && ammoDisplay)
        {
            ammoDisplay.UpdateDisplay(string.Format("{0} / {1}", rWeapon.ammoCount, totalAmmo), rWeapon.ammoID);
        }
    }