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()); } } }