protected override void DoIdle(WeaponAttackProxy attackProxy, WeaponSideCmd cmd) { //null->Fire->SpecialFireHold(1)->SpecialFireEnd->null if (cmd.FiltedInput(EPlayerInput.IsPullboltInterrupt)) {//当前pullBolting被限制,不执行 attackProxy.InterruptPullBolt(); return; } var state = attackProxy.CharacterState.GetActionState(); //正常开火拉栓 if (state == ActionInConfig.SpecialFireHold) { logger.Info("Normal pullbolt"); attackProxy.AudioController.PlayPullBoltAudio(attackProxy.WeaponConfigAssy.S_Id); attackProxy.CharacterState.SpecialFireEnd(); attackProxy.RuntimeComponent.FinishPullBolt(); return; } if (state == ActionInConfig.Null && attackProxy.BasicComponent.Bullet > 0) { //只拉栓逻辑 if (attackProxy.RuntimeComponent.IsPullboltInterrupt) { logger.Info("Interrupt pullbolt"); attackProxy.RuntimeComponent.FinishPullBolt(); attackProxy.AudioController.PlayPullBoltAudio(attackProxy.WeaponConfigAssy.S_Id); attackProxy.CharacterState.SpecialFireEnd(); } // var needActionDeal = SingletonManager.Get<WeaponResourceConfigManager>() // .NeedActionDeal(attackProxy.WeaponConfigAssy.S_Id, ActionDealEnum.Reload); } }
public virtual bool IsCanFire(WeaponAttackProxy attackProxy, WeaponSideCmd cmd) { if (cmd.UserCmd.RenderTime < attackProxy.RuntimeComponent.NextAttackTimestamp) { return(false); } if (attackProxy.BasicComponent.Bullet <= 0) { attackProxy.Owner.ShowTip(ETipType.FireWithNoBullet); if (cmd.FiltedInput(EPlayerInput.IsLeftAttack)) { attackProxy.AudioController.PlayEmptyFireAudio(); } return(false); } EFireMode currentMode = (EFireMode)attackProxy.BasicComponent.RealFireModel; switch (currentMode) { case EFireMode.Manual: return(!attackProxy.RuntimeComponent.IsPrevCmdFire); case EFireMode.Auto: return(true); case EFireMode.Burst: return(!attackProxy.RuntimeComponent.IsPrevCmdFire || attackProxy.RuntimeComponent.NeedAutoBurstShoot); default: return(false); } }
protected override void UpdateFire(PlayerWeaponController controller, WeaponSideCmd cmd, Contexts contexts) { var nowTime = controller.RelatedTime; var runTimeComponent = controller.HeldWeaponAgent.RunTimeComponent; if (!cmd.FiltedInput(XmlConfig.EPlayerInput.MeleeAttack) || _inSpecialAttack) { return; } if (cmd.FiltedInput(XmlConfig.EPlayerInput.IsLeftAttack) && controller.RelatedThrowAction.ThrowingEntityKey == EntityKey.Default && (controller.RelatedThrowAction.LastFireWeaponKey == controller.HeldWeaponAgent.WeaponKey.EntityId || controller.RelatedThrowAction.LastFireWeaponKey == 0)) { if (nowTime > runTimeComponent.NextAttackPeriodStamp) { // 轻击1 runTimeComponent.NextAttackPeriodStamp = nowTime + _config.AttackTotalInterval; //目前表里配的间隔时间是结束后到开始时间 runTimeComponent.ContinueAttackStartStamp = nowTime + _config.AttackOneCD; runTimeComponent.ContinueAttackEndStamp = nowTime + _config.ContinousInterval; controller.RelatedCharState.LightMeleeAttackOne(OnAttackAniFinish); AfterAttack(controller, cmd, EMeleeAttackType.Soft); } else if (CompareUtility.IsBetween(nowTime, runTimeComponent.ContinueAttackStartStamp, runTimeComponent.ContinueAttackEndStamp)) { // 轻击2 runTimeComponent.ContinueAttackStartStamp = 0; runTimeComponent.ContinueAttackEndStamp = 0; runTimeComponent.NextAttackPeriodStamp = Math.Max(nowTime + _config.AttackOneCD, runTimeComponent.ContinueAttackEndStamp); controller.RelatedCharState.LightMeleeAttackTwo(OnAttackAniFinish); AfterAttack(controller, cmd, EMeleeAttackType.Soft); } controller.RelatedThrowAction.LastFireWeaponKey = controller.HeldWeaponAgent.WeaponKey.EntityId; } else if (cmd.FiltedInput(XmlConfig.EPlayerInput.IsRightAttack) && nowTime >= runTimeComponent.NextAttackPeriodStamp) { _inSpecialAttack = true; controller.RelatedCharState.MeleeSpecialAttack(OnSpecialAttackFinished); runTimeComponent.NextAttackPeriodStamp = nowTime + _config.SpecialAttackTotalInterval; AfterAttack(controller, cmd, EMeleeAttackType.Hard); } }
protected override void UpdateFire(PlayerWeaponController controller, WeaponSideCmd cmd, Contexts contexts) { if (cmd.FiltedInput(EPlayerInput.IsLeftAttack)) { DoReady(controller, cmd); } if (cmd.SwitchThrowMode) { DoSwitchMode(controller, cmd); } if (cmd.FiltedInput(EPlayerInput.IsReload)) { DoPull(controller, cmd); } if (cmd.FiltedInput(EPlayerInput.IsThrowing)) { DoThrowing(controller, cmd, contexts); } }
protected override bool CheckInterrupt(PlayerWeaponController controller, WeaponSideCmd cmd) { if (throwingActionData.IsReady && cmd.FiltedInput(EPlayerInput.IsThrowingInterrupt)) { DebugUtil.MyLog("Throw interrupt"); //拉栓未投掷,打断投掷动作 characterState.ForceFinishGrenadeThrow(); controller.UnArmWeapon(false); return(true); } return(false); }
protected override bool CheckInterrupt(PlayerWeaponController controller, WeaponSideCmd cmd) { if (controller.RelatedThrowAction.IsReady && cmd.FiltedInput(EPlayerInput.IsThrowingInterrupt)) { //收回手雷 controller.RelatedThrowAction.IsReady = false; if (controller.RelatedThrowAction.IsPull) { //若已拉栓,销毁ThrowingEntity _throwingFactory.DestroyThrowing(controller.RelatedThrowAction.ThrowingEntityKey); } controller.UnArmWeapon(false); //拉栓未投掷,打断投掷动作 controller.RelatedCharState.ForceFinishGrenadeThrow(); controller.RelatedThrowAction.ClearState(); return(true); } return(false); }
protected override void DoIdle(PlayerWeaponController controller, WeaponSideCmd cmd) { var heldAgent = controller.HeldWeaponAgent; //null->Fire->SpecialFireHold(1)->SpecialFireEnd->null if (cmd.FiltedInput(EPlayerInput.IsPullboltInterrupt)) {//当前pullBolting被限制,不执行 heldAgent.InterruptPullBolt(); return; } var state = controller.RelatedCharState.GetActionState(); var runTimeComponent = heldAgent.RunTimeComponent; //开火中:重置拉栓 if (state == ActionInConfig.SpecialFireHold || (runTimeComponent.PullBoltInterrupt && state == ActionInConfig.Null)) { runTimeComponent.PullBoltInterrupt = false; if (!runTimeComponent.IsPullingBolt) { controller.RelatedCharState.SpecialFireEnd(); if (controller.AudioController != null) { controller.AudioController.PlayPullBoltAudio(heldAgent.ConfigId); } } SetPullBolt(runTimeComponent, true); return; } //拉栓行为结束:拉栓成功 if (runTimeComponent.IsPullingBolt && state != ActionInConfig.SpecialFireEnd) { SetPullBolt(runTimeComponent, false); runTimeComponent.PullBoltFinish = true; } }
public virtual bool IsCanFire(PlayerWeaponController controller, WeaponSideCmd cmd) { WeaponBaseAgent weaponAgent = controller.HeldWeaponAgent; if (cmd.UserCmd.RenderTime < weaponAgent.RunTimeComponent.NextAttackTimestamp) { return(false); } if (weaponAgent.BaseComponent.Bullet <= 0) { controller.ShowTip(ETipType.FireWithNoBullet); if (cmd.FiltedInput(EPlayerInput.IsLeftAttack) && controller.AudioController != null) { controller.AudioController.PlayEmptyFireAudio(); } return(false); } EFireMode currentMode = (EFireMode)weaponAgent.BaseComponent.RealFireModel; switch (currentMode) { case EFireMode.Manual: return(!weaponAgent.RunTimeComponent.IsPrevCmdFire); case EFireMode.Auto: return(true); case EFireMode.Burst: return(!weaponAgent.RunTimeComponent.IsPrevCmdFire || weaponAgent.RunTimeComponent.NeedAutoBurstShoot); default: return(false); } }
public bool IsTrigger(PlayerWeaponController controller, WeaponSideCmd cmd) { return(cmd.FiltedInput(XmlConfig.EPlayerInput.IsLeftAttack) || cmd.UserCmd.IsAutoFire); }