// Animancer // https://kybernetik.com.au/animancer // Copyright 2018-2023 Kybernetik // #if UNITY_EDITOR using System.Collections.Generic; using UnityEngine; namespace Animancer { /// https://kybernetik.com.au/animancer/api/Animancer/ControllerState partial class ControllerState { /************************************************************************************************************************/ /// [Editor-Only] Returns a for this state. protected internal override Editor.IAnimancerNodeDrawer CreateDrawer() => new Drawer(this); /************************************************************************************************************************/ /// public class Drawer : Editor.ParametizedAnimancerStateDrawer { /************************************************************************************************************************/ /// Creates a new to manage the Inspector GUI for the `state`. public Drawer(ControllerState state) : base(state) { } /************************************************************************************************************************/ /// protected override void DoDetailsGUI() { GatherParameters(); base.DoDetailsGUI(); } /************************************************************************************************************************/ private readonly List Parameters = new List(); /// Fills the list with the current parameter details. private void GatherParameters() { Parameters.Clear(); var count = Target.ParameterCount; if (count == 0) return; for (int i = 0; i < count; i++) { var hash = Target.GetParameterHash(i); Parameters.Add(GetParameter(hash)); } } /************************************************************************************************************************/ private AnimatorControllerParameter GetParameter(int hash) { Validate.AssertPlayable(Target); var parameterCount = Target._Playable.GetParameterCount(); for (int i = 0; i < parameterCount; i++) { var parameter = Target._Playable.GetParameter(i); if (parameter.nameHash == hash) return parameter; } return null; } /************************************************************************************************************************/ /// public override int ParameterCount => Parameters.Count; /// public override string GetParameterName(int index) => Parameters[index].name; /// public override AnimatorControllerParameterType GetParameterType(int index) => Parameters[index].type; /// public override object GetParameterValue(int index) { Validate.AssertPlayable(Target); return AnimancerUtilities.GetParameterValue(Target._Playable, Parameters[index]); } /// public override void SetParameterValue(int index, object value) { Validate.AssertPlayable(Target); AnimancerUtilities.SetParameterValue(Target._Playable, Parameters[index], value); } /************************************************************************************************************************/ } /************************************************************************************************************************/ } } #endif