// 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