public void OnFrame(PlayerWeaponController controller, IWeaponCmd cmd) { var weaponId = controller.HeldWeaponAgent.ConfigId; // _attackTimeController.TimeUpdate(cmd.FrameInterval * 0.001f, weaponId); var weaponState = controller.HeldWeaponAgent.RunTimeComponent; // if(!_attackTimeController.CanAttack) return; // if (playerEntity.time.ClientTime < weaponState.NextAttackTimePeriodStamp) return; var nowTime = controller.RelatedTime.ClientTime; var delta = weaponState.NextAttackPeriodStamp - nowTime; delta = weaponState.ContinueAttackEndStamp - nowTime; if (cmd.IsFire) { // 轻击1 if (nowTime > weaponState.NextAttackPeriodStamp) { controller.RelatedStateInterface.LightMeleeAttackOne(OnAttackAniFinish); // _attackTimeController.SetMeleeInterprutTime(_config.AttackInterval); weaponState.NextAttackPeriodStamp = nowTime + _config.AttackTotalInterval; //目前表里配的间隔时间是结束后到开始时间 weaponState.ContinueAttackStartStamp = nowTime + _config.AttackOneCD; weaponState.ContinueAttackEndStamp = nowTime + _config.ContinousInterval; // DebugUtil.LogInUnity("First MeleeAttack", DebugUtil.DebugColor.Green); } // if (playerEntity.time.ClientTime > weaponState.ContinuousAttackTime) //{ // playerEntity.stateInterface.State.LightMeleeAttackOne(() => { _attackTimeController.FinishAttack();}); // _attackTimeController.SetMeleeInterprutTime(_config.AttackInterval); // weaponState.NextAttackTimePeriodStamp = playerEntity.time.ClientTime + _config.AttackTotalInterval; //目前表里配的间隔时间是结束后到开始时间 // Logger.InfoFormat("MeleeAttackOne----------------"); // 轻击2 else if (CompareUtility.IsBetween(nowTime, weaponState.ContinueAttackStartStamp, weaponState.ContinueAttackEndStamp)) { weaponState.ContinueAttackStartStamp = 0; weaponState.ContinueAttackEndStamp = 0; weaponState.NextAttackPeriodStamp = Math.Max(nowTime + _config.AttackOneCD, weaponState.ContinueAttackEndStamp); controller.RelatedStateInterface.LightMeleeAttackTwo(OnAttackAniFinish); // _attackTimeController.SetMeleeInterprutTime(_config.AttackInterval); //weaponState.ContinuousAttackTime = playerEntity.time.ClientTime; // DebugUtil.LogInUnity("Second MeleeAttack", DebugUtil.DebugColor.Green); } AfterAttack(controller, cmd); } else if (cmd.IsSpecialFire && nowTime >= weaponState.NextAttackPeriodStamp) { controller.RelatedStateInterface.MeleeSpecialAttack(OnAttackAniFinish); // _attackTimeController.SetMeleeInterprutTime(_config.SpecialAttackInterval); Logger.InfoFormat("MeleeAttackSpecial----------------"); weaponState.NextAttackPeriodStamp = nowTime + _config.SpecialDamageInterval; AfterAttack(controller, cmd); } }
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); } }