using BaseGames.Combat; namespace BaseGames.Player.States { /// /// 空中攻击状态(架构 05_PlayerModule §2)。 /// 由 FallState / JumpState 接收攻击输入后转入; /// Animancer 帧事件驱动 HitBoxAir 激活;结束后回到 FallState。 /// public class AirAttackState : PlayerStateBase { public AirAttackState(PlayerController owner) : base(owner) { } public override void OnStateEnter() { Owner.Combat?.SetComboSegmentSource(0); Owner.Combat?.EnableWeaponHitBox(AttackDirection.Air); var clip = Owner.Weapon?.ActiveWeapon?.airAttackClip; if (clip != null && clip.Clip != null) { var state = Anim.Play(clip); state.Events(this).OnEnd = OnClipEnd; } else if (AnimCfg?.AirAttack != null) { var state = Anim.Play(AnimCfg.AirAttack); state.Events(this).OnEnd = OnClipEnd; } else { OnClipEnd(); } } public override void OnStateExit() { Owner.Combat?.DisableAllWeaponHitBoxes(); } private void OnClipEnd() { Owner.TransitionTo(Owner.GetState()); } } }