using UnityEngine; namespace BaseGames.Player.States { /// 闲置状态。默认入口状态,播放 Idle 动画。 public class IdleState : PlayerStateBase { public IdleState(PlayerController owner) : base(owner) { } public override void OnStateEnter() { if (AnimCfg?.Idle != null) Anim.Play(AnimCfg.Idle); Move?.ZeroHorizontalVelocity(); // 落地时重置空中能力计数器 Owner.GetState()?.ResetAerialDashes(); Owner.ResetAirJumps(); } public override void OnStateUpdate() { if (!Move.IsGrounded) { _owner.TransitionTo(_owner.GetState()); return; } if (Buffer.ConsumeJump()) { _owner.TransitionTo(_owner.GetState()); return; } // 地面冲刺:需解锁 Dash 能力,且冲刺不在冷却 if (Buffer.ConsumeDash() && Stats != null && Stats.HasAbility(AbilityType.Dash) && Owner.GetState() is { CanDash: true } dashState) { _owner.TransitionTo(dashState); return; } if (Mathf.Abs(Input.MoveInput.x) > 0.1f) { _owner.TransitionTo(_owner.GetState()); } } } }