123 lines
3.6 KiB
C#
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());
|
|
}
|
|
}
|
|
}
|