WeightedMaskLayersDefinitionDrawer.cs 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. // Animancer // https://kybernetik.com.au/animancer // Copyright 2018-2024 Kybernetik //
  2. #if UNITY_EDITOR
  3. using System;
  4. using UnityEditor;
  5. using UnityEngine;
  6. namespace Animancer.Editor
  7. {
  8. /// <summary>[Editor-Only] A <see cref="PropertyDrawer"/> for <see cref="WeightedMaskLayersDefinition"/> fields.</summary>
  9. /// https://kybernetik.com.au/animancer/api/Animancer.Editor/WeightedMaskLayersDefinitionDrawer
  10. [CustomPropertyDrawer(typeof(WeightedMaskLayersDefinition), true)]
  11. public class WeightedMaskLayersDefinitionDrawer : EditableFieldDrawer
  12. {
  13. /************************************************************************************************************************/
  14. private static readonly Action<SerializedProperty> OnEditTarget = property =>
  15. WeightedMaskLayersDefinitionWindow.Open<WeightedMaskLayersDefinitionWindow>(
  16. (WeightedMaskLayers)property.serializedObject.targetObject, false);
  17. /************************************************************************************************************************/
  18. /// <inheritdoc/>
  19. public override void OnGUI(Rect area, SerializedProperty property, GUIContent label)
  20. {
  21. try
  22. {
  23. if (property.serializedObject.targetObject is WeightedMaskLayers)
  24. OnEdit += OnEditTarget;
  25. base.OnGUI(area, property, label);
  26. }
  27. finally
  28. {
  29. OnEdit -= OnEditTarget;
  30. }
  31. }
  32. /************************************************************************************************************************/
  33. /// <inheritdoc/>
  34. public override void GetEditButtonLabel(SerializedProperty property, GUIContent label)
  35. {
  36. var transforms = property.FindPropertyRelative(WeightedMaskLayersDefinition.TransformsField);
  37. var weights = property.FindPropertyRelative(WeightedMaskLayersDefinition.WeightsField);
  38. var transformCount = transforms.arraySize;
  39. var groupCount = transformCount > 0
  40. ? weights.arraySize / transformCount
  41. : 0;
  42. label.text = $"Edit [{transformCount} Transforms] x [{groupCount} Groups]";
  43. }
  44. /************************************************************************************************************************/
  45. }
  46. }
  47. #endif