AnimancerEventDispatcherDrawer.cs 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. // Animancer // https://kybernetik.com.au/animancer // Copyright 2018-2024 Kybernetik //
  2. #if UNITY_EDITOR
  3. using UnityEditor;
  4. using UnityEngine;
  5. namespace Animancer.Editor
  6. {
  7. /// <summary>[Editor-Only] A custom GUI for an <see cref="AnimancerEvent.Dispatcher"/>.</summary>
  8. /// https://kybernetik.com.au/animancer/api/Animancer.Editor/AnimancerEventDispatcherDrawer
  9. [CustomGUI(typeof(AnimancerEvent.Dispatcher))]
  10. public class AnimancerEventDispatcherDrawer : CustomGUI<AnimancerEvent.Dispatcher>
  11. {
  12. /************************************************************************************************************************/
  13. /// <inheritdoc/>
  14. public override void DoGUI()
  15. {
  16. var state = Value.State;
  17. var events = state?.SharedEvents;
  18. if (events == null)
  19. {
  20. EditorGUILayout.LabelField("Event Dispatcher", "Null");
  21. return;
  22. }
  23. var targetPath = state != null
  24. ? state.GetPath()
  25. : "Null";
  26. var eventSequenceDrawer = EventSequenceDrawer.Get(events);
  27. var area = AnimancerGUI.LayoutRect(eventSequenceDrawer.CalculateHeight(events));
  28. using (var label = PooledGUIContent.Acquire("Event Dispatcher"))
  29. using (var summary = PooledGUIContent.Acquire(targetPath))
  30. eventSequenceDrawer.DoGUI(ref area, events, label, summary);
  31. if (eventSequenceDrawer.IsExpanded && state != null)
  32. {
  33. EditorGUI.indentLevel++;
  34. var enabled = GUI.enabled;
  35. GUI.enabled = false;
  36. EditorGUILayout.Toggle("Has Owned Events", state.HasOwnedEvents);
  37. GUI.enabled = enabled;
  38. EditorGUI.indentLevel--;
  39. }
  40. }
  41. /************************************************************************************************************************/
  42. }
  43. }
  44. #endif