Пример #1
0
        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);
            }
        }