47 lines
1.3 KiB
C#
47 lines
1.3 KiB
C#
using BaseGames.Combat;
|
||
|
||
namespace BaseGames.Player.States
|
||
{
|
||
/// <summary>
|
||
/// 空中攻击状态(架构 05_PlayerModule §2)。
|
||
/// 由 FallState / JumpState 接收攻击输入后转入;
|
||
/// Animancer 帧事件驱动 HitBoxAir 激活;结束后回到 FallState。
|
||
/// </summary>
|
||
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<FallState>());
|
||
}
|
||
}
|
||
}
|