public EWeaponSlotType UnArmWeapon(bool includeAction, bool needInterrupt = false)
        {
            if (IsHeldSlotEmpty)
            {
                return(EWeaponSlotType.None);
            }
            AudioController.StopPullBoltAudio();
            RelatedThrowAction.CleanThrowingState();
            HeldWeaponAgent.InterruptPullBolt();
            var holdSlot = HeldSlotType;

            if (needInterrupt)
            {
                DoAppearanceInterrupt();
            }
            if (includeAction)
            {
                DoDrawUnarmWeaponWithAction();
            }
            else
            {
                DoDrawUnarmWeaponWithoutAction(HeldConfigId);
            }

            return(holdSlot);
        }
        public void ArmWeapon(EWeaponSlotType slot, bool includeAction)
        {
            slot = processHelper.GetRealSlotType(slot);
            if (!processHelper.FilterSameSpecies(slot) || !processHelper.FilterSlotValied(slot))
            {
                return;
            }
            //把当前的一些枪械状态重置掉
            HeldWeaponAgent.InterruptPullBolt();

            var lastWeapon       = HeldConfigId;
            var destWeapon       = GetWeaponAgent(slot).ComponentScan;
            var appearanceStruct = processHelper.GetDrawAppearanceStruct(slot);

            DoSpecialAppearance();
            DoAppearanceInterrupt();
            if (includeAction)
            {
                if (IsHeldSlotEmpty)
                {
                    DoDrawArmWeaponWithActionFromEmpty(destWeapon, lastWeapon, appearanceStruct);
                }
                else
                {
                    DoDrawArmWeaponWithActionFromOtherWeapon(destWeapon, lastWeapon, appearanceStruct);
                }
            }
            else
            {
                //CharacterState控制动作相关
                DoDrawArmWeaponWithoutAction(destWeapon, lastWeapon, appearanceStruct);
            }

            onWeaponSwitchEvt(this, HeldConfigId, EInOrOff.In);
        }
示例#3
0
        public void AfterAttack()
        {
            if (HeldSlotType == EWeaponSlotType.None || IsHeldSlotEmpty)
            {
                return;
            }

            //var handler = slotsAux.FindHandler(slot);
            int reservedBullet = GetReservedBullet();

            HeldWeaponAgent.ExpendWeapon(reservedBullet);
            onWeaponExpendEvt(this, HeldSlotType);
        }
示例#4
0
        private void AutoStuffHeldWeapon()
        {
            var lastSlotType = HeldSlotType;
            var nextId       = HeldWeaponAgent.FindNextWeapon(true);

            //消耗掉当前武器
            DestroyWeapon(HeldSlotType, -1, false);
            //自动填充下一项武器
            if (lastSlotType == EWeaponSlotType.ThrowingWeapon)
            {
                TryHoldGrenade();
            }
            RefreshWeaponAppearance();
        }
示例#5
0
        public void ExpendAfterAttack()
        {
            if (HeldSlotType == EWeaponSlotType.None || IsHeldSlotEmpty)
            {
                return;
            }
            PlayFireAudio();
            //var handler = slotsAux.FindHandler(slot);
            bool destroyAndStuffNew = HeldWeaponAgent.ExpendWeapon();

            if (destroyAndStuffNew)
            {
                AutoStuffHeldWeapon();
            }
            if (onWeaponExpendEvt != null)
            {
                onWeaponExpendEvt(this, HeldSlotType);
            }
        }
示例#6
0
        public void InternalUpdate(PlayerEntity player)
        {
            if (!HeldWeaponAgent.IsValid())
            {
                if (HeldSlotType != EWeaponSlotType.None)
                {
                    SetHeldSlotType(EWeaponSlotType.None);
                }
            }

            switch (RelatedServerUpdate.EUpdateCmdType)
            {
            case EWeaponUpdateCmdType.UpdateHoldAppearance:
                logger.Info("WeaponUpdate.UpdateHeldAppearance Come in ");
                RelatedServerUpdate.UpdateCmdType = 0;
                //率先刷新手雷物品
                TryHoldGrenade(true, false);
                RefreshWeaponAppearance(EWeaponSlotType.ThrowingWeapon);
                EWeaponSlotType newSlot = PollGetLastSlotType();
                if (newSlot == HeldSlotType)
                {
                    RefreshWeaponAppearance();
                }
                else
                {
                    if (player.playerInfo.JobAttribute == (int)EJobAttribute.EJob_EveryMan)
                    {
                        TryArmWeaponImmediately(newSlot);
                    }
                }
                break;

            case EWeaponUpdateCmdType.ExchangePrimaryAppearance:
                RelatedServerUpdate.UpdateCmdType = 0;
                RefreshWeaponAppearance(EWeaponSlotType.PrimeWeapon);
                RefreshWeaponAppearance(EWeaponSlotType.SecondaryWeapon);
                break;

            default:
                break;
            }
        }
示例#7
0
        public EWeaponSlotType UnArmWeapon(bool includeAction, Action callback)
        {
            if (IsHeldSlotEmpty)
            {
                return(EWeaponSlotType.None);
            }
            HeldWeaponAgent.StoreDynamic();
            var holdSlot = HeldSlotType;

            if (includeAction)
            {
                DoDrawUnarmWeaponWithAction(callback);
            }
            else
            {
                DoDrawUnarmWeaponWithoutAction(null, callback);
            }

            return(holdSlot);
        }
        public void InternalUpdate()
        {
            GrenadeHandler.Rewind();
            if (!HeldWeaponAgent.IsValid())
            {
                if (HeldSlotType != EWeaponSlotType.None)
                {
                    SetHeldSlotType(EWeaponSlotType.None);
                    logger.InfoFormat("Do internal {0}", HeldSlotType);
                }
            }

            switch ((EWeaponUpdateCmdType)RelatedServerUpdate.UpdateCmdType)
            {
            case EWeaponUpdateCmdType.UpdateHoldAppearance:
                logger.Info("WeaponUpdate.UpdateHeldAppearance Come in ");
                RelatedServerUpdate.UpdateCmdType = 0;
                TryHoldGrenade(true, false);     //率先刷新手雷物品
                RefreshWeaponAppearance(EWeaponSlotType.ThrowingWeapon);
                EWeaponSlotType newSlot = PollGetLastSlotType();
                if (newSlot == HeldSlotType)
                {
                    RefreshWeaponAppearance();
                }
                else
                {
                    if (RelatedGamePlay.JobAttribute == (int)EJobAttribute.EJob_EveryMan)
                    {
                        TryArmWeaponImmediately(newSlot);
                    }
                }

                break;

            case EWeaponUpdateCmdType.ExchangePrimaryAppearance:
                RelatedServerUpdate.UpdateCmdType = 0;
                RefreshWeaponAppearance(EWeaponSlotType.PrimeWeapon);
                RefreshWeaponAppearance(EWeaponSlotType.SecondaryWeapon);
                break;
            }
        }
示例#9
0
 public void LateUpdate()
 {
     if (!HeldWeaponAgent.IsValid() && HeldSlotType != EWeaponSlotType.None)
     {
         SetHeldSlotTypeProcess(EWeaponSlotType.None);
     }
     if (playerWeaponAgent.WeaponUpdateCache.UpdateHeldAppearance)
     {
         playerWeaponAgent.WeaponUpdateCache.UpdateHeldAppearance = false;
         //率先刷新手雷物品
         TryHoldGrenade(true, false);
         RefreshWeaponAppearance(EWeaponSlotType.ThrowingWeapon);
         EWeaponSlotType newSlot = PollGetLastSlotType();
         if (newSlot == HeldSlotType)
         {
             RefreshWeaponAppearance();
         }
         else
         {
             TryArmWeapon(newSlot);
         }
     }
 }