using Cirno.Scripts.Components.Actors._3D; using Godot; namespace Cirno.Scripts.Components.FSM._3DPlayer; public partial class Drowning : BaseState { public override PlayerState StateId => PlayerState.Drowning; private PlayerAnimationProvider3D _animationProvider; public override void Init(IStateMachine machine) { base.Init(machine); _animationProvider ??= StateMachine.GetModule(); } public override void EnterState() { _animationProvider.PlayDrowningAnimation(); // Wait for animation to be over and switch to death _animationProvider.OnAnimationEnded += AnimationProviderOnOnAnimationEnded; } private void AnimationProviderOnOnAnimationEnded(StringName animationName) { if (animationName != _animationProvider.DrowningAnimationName) return; _animationProvider.OnAnimationEnded -= AnimationProviderOnOnAnimationEnded; StateMachine.SetState(PlayerState.Dead); } }