namespace BaseGames.Enemies.States { /// /// 受击状态。播放受击动画,动画结束后自动回到 Controlled。 /// 无受击动画时按 (来自攻击方的硬直时长)恢复—— /// 二者必须都安排恢复,否则敌人会永久停在本态,决策层被 IsControllable 门永久挂起。 /// public sealed class EnemyHurtState : IEnemyState { public EnemyStateType StateType => EnemyStateType.Hurt; public void Enter(EnemyBase owner) { if (owner.Animancer != null && owner.AnimConfig?.Hurt != null) { var animState = owner.Animancer.Play(owner.AnimConfig.Hurt); animState.Events(owner).OnEnd = () => { // 只在仍处于 Hurt 时才回 Controlled,避免 Die 时被覆盖 if (owner.CurrentState == EnemyStateType.Hurt) owner.ForceState(EnemyStateType.Controlled); }; } else { // 无受击动画:按本次攻击的硬直时长恢复。 // 时长为 0 是合法的"不硬直",由 ScheduleStateRecovery 处理为下一帧恢复。 owner.ScheduleStateRecovery(EnemyStateType.Hurt, owner.PendingHitStun); } } public void Exit(EnemyBase owner) { } } }