2025-05-09 15:40:34 +08:00

82 lines
2.6 KiB
C#

// Animancer // https://kybernetik.com.au/animancer // Copyright 2018-2024 Kybernetik //
#if UNITY_EDITOR && UNITY_IMGUI
using System;
using UnityEditor;
using UnityEngine;
namespace Animancer.Editor
{
/// <summary>[Editor-Only] Draws the Inspector GUI for an <see cref="NamedEventDictionary"/>.</summary>
/// https://kybernetik.com.au/animancer/api/Animancer.Editor/NamedEventDictionaryDrawer
///
public static class NamedEventDictionaryDrawer
{
/************************************************************************************************************************/
private const string
KeyPrefix = AnimancerGraphDrawer.KeyPrefix;
private static readonly BoolPref
AreEventsExpanded = new(KeyPrefix + nameof(AreEventsExpanded), false);
/************************************************************************************************************************/
/// <summary>Draws the <see cref="AnimancerGraph.Events"/>.</summary>
public static void DoEventsGUI(AnimancerGraph graph)
{
if (!graph.HasEvents)
return;
EditorGUI.indentLevel++;
var events = graph.Events;
AreEventsExpanded.Value = AnimancerGUI.DoLabelFoldoutFieldGUI(
"Events",
events.Count.ToStringCached(),
AreEventsExpanded);
if (AreEventsExpanded)
{
EditorGUI.indentLevel++;
var sortedEvents = ListPool.Acquire<StringReference>();
sortedEvents.AddRange(events.Keys);
sortedEvents.Sort();
foreach (var item in sortedEvents)
DoEventGUI(item, events[item]);
ListPool.Release(sortedEvents);
EditorGUI.indentLevel--;
}
EditorGUI.indentLevel--;
}
/************************************************************************************************************************/
/// <summary>Draws an event.</summary>
public static void DoEventGUI(string name, Action action)
{
var gui = CustomGUIFactory.GetOrCreateForObject(action);
if (gui == null)
{
EditorGUILayout.LabelField(name, action.ToStringDetailed());
return;
}
gui.SetLabel(name);
gui.DoGUI();
}
/************************************************************************************************************************/
}
}
#endif