ParameterDictionaryDrawer.cs 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. // Animancer // https://kybernetik.com.au/animancer // Copyright 2018-2024 Kybernetik //
  2. #if UNITY_EDITOR && UNITY_IMGUI
  3. using UnityEditor;
  4. using UnityEngine;
  5. namespace Animancer.Editor
  6. {
  7. /// <summary>[Editor-Only] Draws the Inspector GUI for an <see cref="ParameterDictionary"/>.</summary>
  8. /// https://kybernetik.com.au/animancer/api/Animancer.Editor/ParameterDictionaryDrawer
  9. ///
  10. public static class ParameterDictionaryDrawer
  11. {
  12. /************************************************************************************************************************/
  13. private const string
  14. KeyPrefix = AnimancerGraphDrawer.KeyPrefix;
  15. private static readonly BoolPref
  16. AreParametersExpanded = new(KeyPrefix + nameof(AreParametersExpanded), false);
  17. /************************************************************************************************************************/
  18. /// <summary>Draws the <see cref="AnimancerGraph.Parameters"/>.</summary>
  19. public static void DoParametersGUI(AnimancerGraph graph)
  20. {
  21. if (!graph.HasParameters)
  22. return;
  23. EditorGUI.indentLevel++;
  24. var parameters = graph.Parameters;
  25. AreParametersExpanded.Value = AnimancerGUI.DoLabelFoldoutFieldGUI(
  26. "Parameters",
  27. parameters.Count.ToStringCached(),
  28. AreParametersExpanded);
  29. if (AreParametersExpanded)
  30. {
  31. EditorGUI.indentLevel++;
  32. var sortedParameters = ListPool.Acquire<IParameter>();
  33. sortedParameters.AddRange(parameters);
  34. sortedParameters.Sort();
  35. foreach (var item in sortedParameters)
  36. DoParameterGUI(item);
  37. ListPool.Release(sortedParameters);
  38. EditorGUI.indentLevel--;
  39. }
  40. EditorGUI.indentLevel--;
  41. }
  42. /************************************************************************************************************************/
  43. /// <summary>Draws the `parameter`.</summary>
  44. private static void DoParameterGUI(IParameter parameter)
  45. {
  46. var gui = CustomGUIFactory.GetOrCreateForObject(parameter);
  47. if (gui == null)
  48. {
  49. EditorGUILayout.LabelField(parameter.Key, parameter.Value.ToString());
  50. return;
  51. }
  52. gui.SetLabel(parameter.Key);
  53. gui.DoGUI();
  54. }
  55. /************************************************************************************************************************/
  56. }
  57. }
  58. #endif