cirnogodot/Scripts/Actors/3D/OpenCloseActorAnimationManager3D.cs
2025-10-09 09:11:25 +02:00

67 lines
No EOL
1.8 KiB
C#

using Godot;
namespace Cirno.Scripts.Actors._3D;
public partial class OpenCloseActorAnimationManager3D : Node
{
[Export] public AnimationPlayer AnimationPlayer { get; set; }
[Export] public StringName OpeningAnimationName { get; set; } = "Opening";
[Export] public StringName ClosingAnimationName { get; set; } = "Closing";
[Export] public StringName OpenAnimationName { get; set; } = "Open";
[Export] public StringName ClosedAnimationName { get; set; } = "Closed";
private bool _isAnimating = false;
[Signal]
public delegate void ClosedAnimationCompletedEventHandler();
[Signal]
public delegate void OpenAnimationCompletedEventHandler();
public override void _Ready()
{
AnimationPlayer.AnimationFinished += AnimationPlayerOnAnimationFinished;
}
private void AnimationPlayerOnAnimationFinished(StringName animName)
{
if (animName == OpenAnimationName || animName == OpeningAnimationName)
{
EmitSignalOpenAnimationCompleted();
}
else if (animName == ClosedAnimationName || animName == ClosingAnimationName)
{
EmitSignalClosedAnimationCompleted();
}
}
public void Toggle(bool state)
{
AnimationPlayer.Play(state ? OpeningAnimationName : ClosingAnimationName);
}
public void PlayOpening()
{
AnimationPlayer.Play(OpeningAnimationName);
AnimationPlayer.SetSpeedScale(1);
}
public void PlayClosing()
{
AnimationPlayer.Play(ClosingAnimationName);
AnimationPlayer.SetSpeedScale(1);
}
public void SkipToOpen()
{
AnimationPlayer.Play(OpenAnimationName);
}
public void SkipToClose()
{
AnimationPlayer.Play(ClosedAnimationName);
}
}