public virtual void LoadAllAmmo(vShooterWeapon weapon, bool secundaryWeapon = false)
 {
     if (!weapon)
     {
         return;
     }
     UpdateTotalAmmo();
     if (weapon.ammoCount < weapon.clipSize && (weapon.isInfinityAmmo || WeaponHasUnloadedAmmo(secundaryWeapon)))
     {
         var needAmmo = weapon.clipSize - weapon.ammoCount;
         if (weapon.isInfinityAmmo)
         {
             weapon.AddAmmo(needAmmo);
         }
         else
         {
             if (WeaponAmmo(weapon).count < needAmmo)
             {
                 needAmmo = WeaponAmmo(weapon).count;
             }
             weapon.AddAmmo(needAmmo);
             WeaponAmmo(weapon).Use(needAmmo);
         }
         weapon.onReload.Invoke();
     }
 }
 void Start()
 {
     weapon = GetComponent <vShooterWeapon>();
     if (weapon)
     {
         weapon.onChangerPowerCharger.AddListener(OnChangerPower);
     }
 }
Exemplo n.º 3
0
 public virtual void SetRightWeapon(GameObject weapon)
 {
     if (weapon != null)
     {
         var w = weapon.GetComponent <vShooterWeapon>();
         SetRightWeapon(w);
     }
     else
     {
         rWeapon = null;
     }
 }
        public vAmmo WeaponAmmo(vShooterWeapon weapon)
        {
            if (!weapon)
            {
                return(null);
            }
            var ammo = new vAmmo();

            if (ammoManager && ammoManager.ammos != null && ammoManager.ammos.Count > 0)
            {
                ammo = ammoManager.GetAmmo(weapon.ammoID);
            }
            return(ammo);
        }
        protected virtual void UpdateTotalAmmo(vShooterWeapon weapon, ref int targetTotalAmmo, int displayId)
        {
            if (!weapon)
            {
                return;
            }
            var ammoCount = 0;
            var ammo      = WeaponAmmo(weapon);

            if (ammo != null)
            {
                ammoCount += ammo.count;
            }

            targetTotalAmmo = ammoCount;
            UpdateAmmoDisplay(displayId);
        }
        private void SetRightWeapon(vShooterWeapon weapon)
        {
            rWeapon = weapon;
            if (rWeapon)
            {
                rWeapon.inHolder   = false;
                rWeapon.ignoreTags = ignoreTags;
                rWeapon.hitLayer   = damageLayer;
                rWeapon.root       = transform;
                rWeapon.onDisable.RemoveListener(HideRightAmmoDisplay);
                rWeapon.onDisable.AddListener(HideRightAmmoDisplay);
                rWeapon.onDestroy.RemoveListener(OnDestroyWeapon);
                rWeapon.onDestroy.AddListener(OnDestroyWeapon);
                if (rWeapon.dontUseReload)
                {
                    LoadAllAmmo(rWeapon, false);
                }
                if (rWeapon.secundaryWeapon)
                {
                    rWeapon.secundaryWeapon.ignoreTags        = ignoreTags;
                    rWeapon.secundaryWeapon.hitLayer          = damageLayer;
                    rWeapon.secundaryWeapon.root              = transform;
                    rWeapon.secundaryWeapon.isSecundaryWeapon = true;
                    if (rWeapon.secundaryWeapon.dontUseReload)
                    {
                        LoadAllAmmo(rWeapon.secundaryWeapon, true);
                    }
                }
                if (usingThirdPersonController)
                {
                    if (useAmmoDisplay && !ammoDisplayR)
                    {
                        GetAmmoDisplays();
                    }
                    if (useAmmoDisplay && ammoDisplayR)
                    {
                        ammoDisplayR.Show();
                    }
                    UpdateRightAmmo();
                }

                LoadIKAdjust(rWeapon.weaponCategory);
                onEquipWeapon.Invoke(weapon.gameObject, false);
            }
        }
 protected virtual void HandleShot(vShooterWeapon weapon, GenericInput weaponInput, bool secundaryShot = false)
 {
     if (weapon.chargeWeapon)
     {
         if (weapon.ammoCount > 0 && weapon.powerCharge < 1 && weaponInput.GetButton())
         {
             weapon.powerCharge += Time.deltaTime * weapon.chargeSpeed;
         }
         else if ((weapon.powerCharge >= 1 && weapon.autoShotOnFinishCharge) || weaponInput.GetButtonUp() || (!weaponInput.GetButton() && isAiming && weapon.powerCharge > 0))
         {
             if (shooterManager.hipfireShot)
             {
                 aimTimming = 3f;
             }
             shooterManager.Shoot(aimPosition, !isAiming, secundaryShot);
             weapon.powerCharge = 0;
         }
         animator.SetFloat("PowerCharger", weapon.powerCharge);
     }
     else if (weapon.automaticWeapon ? weaponInput.GetButton() : weaponInput.GetButtonDown())
     {
         if (shooterManager.hipfireShot)
         {
             aimTimming = 3f;
         }
         shooterManager.Shoot(aimPosition, !isAiming, secundaryShot);
     }
     else if (weaponInput.GetButtonDown())
     {
         if (allowAttack == false)
         {
             if (shooterManager.hipfireShot)
             {
                 aimTimming = 1f;
             }
             shooterManager.Shoot(aimPosition, !isAiming, secundaryShot);
             allowAttack = true;
         }
     }
     else
     {
         allowAttack = false;
     }
 }
Exemplo n.º 8
0
 public virtual void SetRightWeapon(GameObject weapon)
 {
     if (weapon != null)
     {
         var w = weapon.GetComponent <vShooterWeapon>();
         rWeapon = w;
         if (rWeapon)
         {
             rWeapon.ignoreTags = ignoreTags;
             rWeapon.hitLayer   = damageLayer;
             rWeapon.root       = transform;
             rWeapon.onDestroy.AddListener(OnDestroyWeapon);
             if (rWeapon.dontUseReload)
             {
                 LoadAllAmmo(rWeapon, false);
             }
             if (rWeapon.secundaryWeapon)
             {
                 rWeapon.secundaryWeapon.ignoreTags        = ignoreTags;
                 rWeapon.secundaryWeapon.hitLayer          = damageLayer;
                 rWeapon.secundaryWeapon.root              = transform;
                 rWeapon.secundaryWeapon.isSecundaryWeapon = true;
                 if (rWeapon.secundaryWeapon.dontUseReload)
                 {
                     LoadAllAmmo(rWeapon.secundaryWeapon, true);
                 }
             }
             if (usingThirdPersonController)
             {
                 if (useAmmoDisplay && !ammoDisplayR)
                 {
                     GetAmmoDisplays();
                 }
                 if (useAmmoDisplay && ammoDisplayR)
                 {
                     ammoDisplayR.Show();
                 }
                 UpdateRightAmmo();
             }
             currentShotTime = 0;
             LoadIKAdjust(rWeapon.weaponCategory);
         }
     }
 }
Exemplo n.º 9
0
 public void SetRightWeapon(GameObject weapon)
 {
     if (weapon != null)
     {
         var w = weapon.GetComponent <vShooterWeapon>();
         rWeapon = w;
         if (rWeapon)
         {
             rWeapon.ignoreTags = ignoreTags;
             rWeapon.hitLayer   = damageLayer;
             rWeapon.root       = transform;
             rWeapon.onDestroy.AddListener(OnDestroyWeapon);
             if (rWeapon.autoReload && isServer)
             {
                 CmdReloadWeaponAuto(rWeapon.gameObject, false, false);
             }
             if (rWeapon.secundaryWeapon)
             {
                 rWeapon.secundaryWeapon.ignoreTags        = ignoreTags;
                 rWeapon.secundaryWeapon.hitLayer          = damageLayer;
                 rWeapon.secundaryWeapon.root              = transform;
                 rWeapon.secundaryWeapon.isSecundaryWeapon = true;
                 if (rWeapon.secundaryWeapon.autoReload && isServer)
                 {
                     CmdReloadWeaponAuto(rWeapon.secundaryWeapon.gameObject, false, true);
                 }
             }
             if (usingThirdPersonController && isLocalPlayer)
             {
                 if (useAmmoDisplay && !ammoDisplayR)
                 {
                     GetAmmoDisplays();
                 }
                 if (useAmmoDisplay && ammoDisplayR)
                 {
                     ammoDisplayR.Show();
                 }
                 UpdateRightAmmo();
             }
             currentShotTime = 0;
         }
     }
 }
        protected void ReloadWeaponAuto(vShooterWeapon weapon, bool ignoreAmmo, bool secundaryWeapon = false)
        {
            if (!weapon)
            {
                return;
            }
            UpdateTotalAmmo();

            if (!(!ignoreAmmo && (weapon.ammoCount >= weapon.clipSize || !WeaponHasAmmo(secundaryWeapon))))
            {
                var needAmmo = weapon.clipSize - weapon.ammoCount;

                if (!ignoreAmmo && WeaponAmmo(weapon).count < needAmmo)
                {
                    needAmmo = WeaponAmmo(weapon).count;
                }

                weapon.AddAmmo(needAmmo);
                if (!ignoreAmmo)
                {
                    WeaponAmmo(weapon).Use(needAmmo);
                }
            }
        }
Exemplo n.º 11
0
 void Start()
 {
     weapon   = GetComponent <vShooterWeapon>();
     animator = GetComponent <Animator>();
 }
Exemplo n.º 12
0
        protected virtual IEnumerator AddAmmoToWeapon(vShooterWeapon weapon, float delayTime, bool ignoreEffects = false)
        {
            isReloading = true;
            if (weapon.ammoCount < weapon.clipSize && (weapon.isInfinityAmmo || WeaponHasUnloadedAmmo()) && !weapon.dontUseReload && !cancelReload)
            {
                if (!ignoreEffects)
                {
                    weapon.ReloadEffect();
                }
                yield return(new WaitForSeconds(delayTime));

                if (!cancelReload)
                {
                    var needAmmo = weapon.reloadOneByOne ? 1 : weapon.clipSize - weapon.ammoCount;

                    if (weapon.isInfinityAmmo)
                    {
                        weapon.AddAmmo(needAmmo);
                    }
                    else
                    {
                        if (WeaponAmmo(weapon).count < needAmmo)
                        {
                            needAmmo = WeaponAmmo(weapon).count;
                        }
                        weapon.AddAmmo(needAmmo);
                        WeaponAmmo(weapon).Use(needAmmo);
                    }

                    if (weapon.reloadOneByOne && weapon.ammoCount < weapon.clipSize && WeaponHasUnloadedAmmo())
                    {
                        if (WeaponAmmo(weapon).count == 0)
                        {
                            if (!ignoreEffects)
                            {
                                weapon.FinishReloadEffect();
                            }
                            if (!ignoreEffects)
                            {
                                isReloadingWeapon = false;
                            }
                            if (!ignoreEffects)
                            {
                                onFinishReloadWeapon.Invoke(weapon);
                            }
                        }
                        else
                        {
                            if (!ignoreEffects)
                            {
                                isReloadingWeapon = true;
                            }
                            if (!cancelReload)
                            {
                                if (!ignoreEffects)
                                {
                                    animator.SetInteger(ReloadID, weapon.reloadID);
                                    animator.SetTrigger(Reload);
                                }
                                StartCoroutine(AddAmmoToWeapon(weapon, delayTime, ignoreEffects));
                            }
                        }
                    }
                    else
                    {
                        if (!ignoreEffects)
                        {
                            weapon.FinishReloadEffect();
                        }
                        if (!ignoreEffects)
                        {
                            isReloadingWeapon = false;
                        }
                        if (!ignoreEffects)
                        {
                            onFinishReloadWeapon.Invoke(weapon);
                        }
                    }
                }
                UpdateTotalAmmo();
            }
            isReloading = false;
        }