ControllerState.Drawer.cs 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. // Animancer // https://kybernetik.com.au/animancer // Copyright 2022 Kybernetik //
  2. #if UNITY_EDITOR
  3. using System.Collections.Generic;
  4. using UnityEngine;
  5. namespace Animancer
  6. {
  7. /// https://kybernetik.com.au/animancer/api/Animancer/ControllerState
  8. partial class ControllerState
  9. {
  10. /************************************************************************************************************************/
  11. /// <summary>[Editor-Only] Returns a <see cref="Drawer"/> for this state.</summary>
  12. protected internal override Editor.IAnimancerNodeDrawer CreateDrawer() => new Drawer(this);
  13. /************************************************************************************************************************/
  14. /// <inheritdoc/>
  15. public class Drawer : Editor.ParametizedAnimancerStateDrawer<ControllerState>
  16. {
  17. /************************************************************************************************************************/
  18. /// <summary>Creates a new <see cref="Drawer"/> to manage the Inspector GUI for the `state`.</summary>
  19. public Drawer(ControllerState state) : base(state) { }
  20. /************************************************************************************************************************/
  21. /// <inheritdoc/>
  22. protected override void DoDetailsGUI()
  23. {
  24. GatherParameters();
  25. base.DoDetailsGUI();
  26. }
  27. /************************************************************************************************************************/
  28. private readonly List<AnimatorControllerParameter>
  29. Parameters = new List<AnimatorControllerParameter>();
  30. /// <summary>Fills the <see cref="Parameters"/> list with the current parameter details.</summary>
  31. private void GatherParameters()
  32. {
  33. Parameters.Clear();
  34. var count = Target.ParameterCount;
  35. if (count == 0)
  36. return;
  37. for (int i = 0; i < count; i++)
  38. {
  39. var hash = Target.GetParameterHash(i);
  40. Parameters.Add(GetParameter(hash));
  41. }
  42. }
  43. /************************************************************************************************************************/
  44. private AnimatorControllerParameter GetParameter(int hash)
  45. {
  46. Validate.AssertPlayable(Target);
  47. var parameterCount = Target._Playable.GetParameterCount();
  48. for (int i = 0; i < parameterCount; i++)
  49. {
  50. var parameter = Target._Playable.GetParameter(i);
  51. if (parameter.nameHash == hash)
  52. return parameter;
  53. }
  54. return null;
  55. }
  56. /************************************************************************************************************************/
  57. /// <inheritdoc/>
  58. public override int ParameterCount => Parameters.Count;
  59. /// <inheritdoc/>
  60. public override string GetParameterName(int index) => Parameters[index].name;
  61. /// <inheritdoc/>
  62. public override AnimatorControllerParameterType GetParameterType(int index) => Parameters[index].type;
  63. /// <inheritdoc/>
  64. public override object GetParameterValue(int index)
  65. {
  66. Validate.AssertPlayable(Target);
  67. return AnimancerUtilities.GetParameterValue(Target._Playable, Parameters[index]);
  68. }
  69. /// <inheritdoc/>
  70. public override void SetParameterValue(int index, object value)
  71. {
  72. Validate.AssertPlayable(Target);
  73. AnimancerUtilities.SetParameterValue(Target._Playable, Parameters[index], value);
  74. }
  75. /************************************************************************************************************************/
  76. }
  77. /************************************************************************************************************************/
  78. }
  79. }
  80. #endif