canto/Assets/Scripts/Event/TriggerAnimation.cs
2025-10-02 15:28:03 -04:00

123 lines
3.6 KiB
C#

using System;
using KitsuneCafe.Extension;
using KitsuneCafe.Sys.Attributes;
using UnityEngine;
using UnityForge.PropertyDrawers;
namespace KitsuneCafe.Event
{
public class TriggerAnimation : MonoBehaviour
{
[SerializeField]
private Animator animator;
[SerializeField]
private AnimatorControllerParameterType parameterType = AnimatorControllerParameterType.Bool;
[SerializeField]
[DrawIf(nameof(parameterType), AnimatorControllerParameterType.Float)]
[AnimatorParameterName(AnimatorControllerParameterType.Float, nameof(animator))]
private string floatParameter;
[SerializeField]
[DrawIf(nameof(parameterType), AnimatorControllerParameterType.Int)]
[AnimatorParameterName(AnimatorControllerParameterType.Int, nameof(animator))]
private string intParameter;
[SerializeField]
[DrawIf(nameof(parameterType), AnimatorControllerParameterType.Bool)]
[AnimatorParameterName(AnimatorControllerParameterType.Bool, nameof(animator))]
private string boolParameter;
[SerializeField]
[DrawIf(nameof(parameterType), AnimatorControllerParameterType.Trigger)]
[AnimatorParameterName(AnimatorControllerParameterType.Trigger, nameof(animator))]
private string triggerParameter;
private void OnValidate()
{
this.TryGetComponentIfNull(ref animator);
}
private void Awake()
{
if (!Enum.IsDefined(typeof(AnimatorControllerParameterType), parameterType))
{
enabled = false;
Debug.LogWarning($"{nameof(parameterType)} is not set for a valid {nameof(AnimatorControllerParameterType)}");
}
}
private string GetParameterName()
{
return parameterType switch
{
AnimatorControllerParameterType.Float => floatParameter,
AnimatorControllerParameterType.Int => intParameter,
AnimatorControllerParameterType.Bool => boolParameter,
AnimatorControllerParameterType.Trigger => triggerParameter,
_ => throw new ArgumentOutOfRangeException()
};
}
public void SetValue(int parameter, bool value)
{
animator.SetBool(parameter, value);
}
public void SetValue(string parameter, bool value)
{
SetValue(Animator.StringToHash(parameter), value);
}
public void SetValue(bool value)
{
SetValue(GetParameterName(), value);
}
public void SetValue(int parameter, int value)
{
animator.SetInteger(parameter, value);
}
public void SetValue(string parameter, int value)
{
SetValue(Animator.StringToHash(parameter), value);
}
public void SetValue(int value)
{
SetValue(GetParameterName(), value);
}
public void SetValue(int parameter, float value)
{
animator.SetFloat(GetParameterName(), value);
}
public void SetValue(string parameter, float value)
{
SetValue(Animator.StringToHash(parameter), value);
}
public void SetValue(float value)
{
SetValue(GetParameterName(), value);
}
public void Trigger(string parameter)
{
Trigger(Animator.StringToHash(parameter));
}
public void Trigger(int parameter)
{
animator.SetTrigger(parameter);
}
public void Trigger()
{
Trigger(GetParameterName());
}
}
}