using UnityEngine; namespace Invector.Utils { [vClassHeader("Set Animator Value", useHelpBox = true, helpBoxText = "Use this component to set animator value using events")] public class vSetAnimatorValue : vMonoBehaviour { [vSelectableString("Set Float exemple", "ParamenterName,Float,1.0")] [vSelectableString("Set Integer exemple", "ParamenterName,Int,1")] [vSelectableString("Set Bool exemple", "ParamenterName,Bool,true")] [vSelectableString("Set Trigger exemple", "ParamenterName,Trigger,Set")] [vSelectableString("Reset Trigger exemple", "ParamenterName,Trigger,Reset")] [vHelpBox("SetValueByExpression examples", vHelpBoxAttribute.MessageType.Info)] [Tooltip("Target Animator to set value")] public Animator targetAnimator; [Tooltip("Target paramenter for normal methods\nDon't will be used when using SetValueByExpression method")] public string targetParamenter; [SerializeField, vReadOnly] protected int paramenterHash; enum ValueType { Float, Int, Bool, Trigger } public void SetTargetAnimator(Animator animator) { targetAnimator = animator; } public void SetTrigger() { targetAnimator.SetTrigger(paramenterHash); } public void ResetTrigger() { targetAnimator.ResetTrigger(paramenterHash); } public void SetBoolean(bool value) { targetAnimator.SetBool(paramenterHash, value); } public void SetInteger(int value) { targetAnimator.SetInteger(paramenterHash, value); } public void SetFloat(float value) { targetAnimator.SetFloat(paramenterHash, value); } public void SetTargetParamenter(string targetParamenter) { this.targetParamenter = targetParamenter; } public void SetValueByExpression(string expression) { string[] splited = expression.Split(','); if (splited.Length < 3) { Debug.LogWarning($"Expression :{expression} does't match any valid expression"); return; } string parameterName = splited[0]; if (System.Enum.TryParse(splited[1], out ValueType valueType)) { var value = splited[2]; bool setFail = false; switch (valueType) { case ValueType.Bool: if (System.Boolean.TryParse(value, out bool boolValue)) { targetAnimator.SetBool(parameterName, boolValue); } else { setFail = true; } break; case ValueType.Int: if (System.Int32.TryParse(value, out int intValue)) { targetAnimator.SetInteger(targetParamenter, intValue); } else { setFail = true; } break; case ValueType.Float: if (System.Double.TryParse(value, out double doubleValue)) { targetAnimator.SetFloat(parameterName, (float)doubleValue); } else { setFail = true; } break; case ValueType.Trigger: if (value == "Set") { targetAnimator.SetTrigger(parameterName); } else if (value == "Reset") { targetAnimator.ResetTrigger(parameterName); } else { setFail = true; } break; } if (setFail) { Debug.LogWarning($"Expression :{value} does't match any valid value"); } } else { Debug.LogWarning($"Expression :{splited[0]} does't match any animator value"); } } } }