Esempio n. 1
0
 private bool HasNoReservedBullet(ISharedPlayerWeaponComponentGetter agent, PlayerEntity playerEntity)
 {
     if (agent.GetReservedBullet() < 1)
     {
         _elapse = 0;
         if (SharedConfig.CurrentGameMode == Components.GameMode.Normal)
         {
             playerEntity.tip.TipType = ETipType.BulletRunout;
         }
         else
         {
             playerEntity.tip.TipType = ETipType.NoBulletInPackage;
         }
         return(true);
     }
     return(false);
 }
Esempio n. 2
0
        public void ExecuteUserCmd(IUserCmdOwner owner, IUserCmd cmd)
        {
            PlayerEntity player = (PlayerEntity)owner.OwnerEntity;

            if (cmd.IsReload)// && cmd.FilteredInput.IsInput(EPlayerInput.IsReload))
            {
                if (!cmd.FilteredInput.IsInput(EPlayerInput.IsReload) && !player.playerMove.IsAutoRun)
                {
                    return;
                }
                if (!player.hasWeaponComponentAgent)
                {
                    return;
                }
                ISharedPlayerWeaponComponentGetter sharedAPI = player.GetController <PlayerWeaponController>();

                WeaponInfo currWeapon = sharedAPI.CurrSlotWeaponInfo;
                var        config     = SingletonManager.Get <WeaponConfigManager>().GetConfigById(currWeapon.Id);
                if (NoReloadAction(config))
                {
                    return;
                }
                if (MagazineIsFull(player.weaponLogic.State, currWeapon.Bullet))
                {
                    return;
                }
                if (HasNoReservedBullet(sharedAPI, player))
                {
                    return;
                }
                if (!_reloading)
                {
                    player.weaponLogic.WeaponSound.PlaySound(EWeaponSoundType.ClipDrop);
                    _reloading = true;
                }
                var weaponState = player.weaponLogic.State;
                var reloadSpeed = weaponState.ReloadSpeed;
                reloadSpeed = Mathf.Max(0.1f, reloadSpeed);

                player.playerMove.InterruptAutoRun();

                player.animatorClip.ClipManager.SetReloadSpeedBuff(reloadSpeed);
                if (weaponState.SpecialReloadCount > 0)
                {
                    var target = weaponState.BulletCountLimit - weaponState.LoadedBulletCount;
                    target = Mathf.Min(target, weaponState.ReservedBulletCount);
                    var count = Mathf.CeilToInt((float)target / weaponState.SpecialReloadCount);
                    count = Mathf.Max(1, count);
                    player.stateInterface.State.SpecialReload(
                        () =>
                    {
                        SpecialReload(weaponState);
                    },
                        count,
                        () =>
                    {    //换弹结束回调
                        player.animatorClip.ClipManager.ResetReloadSpeedBuff();
                    });
                }
                else
                {
                    if (weaponState.LoadedBulletCount > 0 && !weaponState.IsAlwaysEmptyReload)
                    {
                        var needActionDeal = CheckNeedActionDeal(sharedAPI, ActionDealEnum.Reload);
                        if (needActionDeal)
                        {
                            player.appearanceInterface.Appearance.MountWeaponOnAlternativeLocator();
                        }
                        player.stateInterface.State.Reload(() =>
                        {
                            if (needActionDeal)
                            {
                                player.appearanceInterface.Appearance.RemountWeaponOnRightHand();
                            }
                            Reload(weaponState);
                            player.animatorClip.ClipManager.ResetReloadSpeedBuff();
                            _reloading = false;
                        });
                    }
                    else
                    {
                        var needActionDeal = CheckNeedActionDeal(sharedAPI, ActionDealEnum.ReloadEmpty);
                        if (needActionDeal)
                        {
                            player.appearanceInterface.Appearance.MountWeaponOnAlternativeLocator();
                        }
                        player.stateInterface.State.ReloadEmpty(() =>
                        {
                            if (needActionDeal)
                            {
                                player.appearanceInterface.Appearance.RemountWeaponOnRightHand();
                            }
                            Reload(weaponState);
                            player.animatorClip.ClipManager.ResetReloadSpeedBuff();
                            _reloading = false;
                        });
                    }
                }
            }
        }
Esempio n. 3
0
 private bool CheckNeedActionDeal(ISharedPlayerWeaponComponentGetter sharedApi, ActionDealEnum action)
 {
     return(SingletonManager.Get <WeaponConfigManager>().NeedActionDeal(sharedApi.CurrSlotWeaponId, action));
 }