godot-karrot-starter-theme/Common/AnimNotifies/AnimNotify.cs
2024-11-12 18:09:47 +01:00

61 lines
1.4 KiB
C#

using System;
using Godot;
namespace KarrotStarterTemplate.Common.AnimNotifies;
[GlobalClass]
public partial class AnimNotify : Node
{
// Called when the node enters the scene tree for the first time.
[Export] public AnimationMixer animationPlayer { get; set; }
[Export] public AnimationTree animationTree { get; set; }
public Action<string, string> AnimationNotify;
public override void _Ready()
{
if (animationPlayer != null)
{
animationPlayer.AnimationStarted += OnAnimationStarted;
animationPlayer.AnimationFinished += OnAnimationFinished;
}
if (animationTree != null)
{
animationTree.AnimationStarted += OnAnimationStarted;
animationTree.AnimationFinished += OnAnimationFinished;
}
}
public override void _ExitTree()
{
if (animationPlayer != null)
{
animationPlayer.AnimationStarted -= OnAnimationStarted;
animationPlayer.AnimationFinished -= OnAnimationFinished;
}
if (animationTree != null)
{
animationTree.AnimationStarted -= OnAnimationStarted;
animationTree.AnimationFinished -= OnAnimationFinished;
}
}
private void OnAnimationFinished(StringName animname)
{
Notify("_" + animname, "finish");
}
private void OnAnimationStarted(StringName animname)
{
Notify("_" + animname, "start");
}
public void Notify(string id, string action)
{
AnimationNotify?.Invoke(id, action);
}
}