4 using System.Collections.Generic;
14 [CustomPropertyDrawer(typeof(AudioEventAttribute))]
20 private static GUIContent[] AudioEventNames;
25 private static readonly
string NoEventName =
"-- None --";
30 private static bool ShowBankNames;
35 private class EventNameComparer : IComparer<GUIContent>
37 public int Compare(GUIContent x, GUIContent y)
39 return x.text.ToLower().CompareTo( y.text.ToLower() );
43 public override void OnGUI(Rect position, SerializedProperty property, GUIContent label)
47 if (Event.current.type == EventType.ContextClick)
49 GenericMenu menu =
new GenericMenu();
50 menu.AddItem(
new GUIContent(
"Show Banks",
"Show bank names in the dropdown"), ShowBankNames, () => ShowBankNames = !ShowBankNames);
57 var currentId = OptionToId(property.stringValue);
58 EditorGUI.BeginProperty(position,
new GUIContent(property.name), property);
59 var newId = EditorGUI.Popup(position, label, currentId, AudioEventNames);
62 if (newId != currentId)
64 if (AudioEventNames[newId].text == NoEventName)
66 property.stringValue =
string.Empty;
73 int skip = AudioEventNames[newId].text.IndexOf(
'/') + 1;
74 property.stringValue = AudioEventNames[newId].text.Substring(skip);
78 property.stringValue = AudioEventNames[newId].text;
83 EditorGUI.EndProperty();
89 private static void GetAllEventNames()
91 List<GUIContent> eventNames =
new List<GUIContent>(200);
93 var assets = AssetDatabase.FindAssets(
"t:AudioEventBank");
98 if (audioBanks.Length != assets.Length)
100 List<AudioEventBank> tmpBanks =
new List<AudioEventBank>(assets.Length);
101 for(
int i=0; i<assets.Length; i++)
103 tmpBanks.Add(AssetDatabase.LoadAssetAtPath<
AudioEventBank>(AssetDatabase.GUIDToAssetPath(assets[i])));
105 audioBanks = tmpBanks.ToArray();
108 for (
int bankIndex = 0; bankIndex < audioBanks.Length; bankIndex++)
110 var bank = audioBanks[bankIndex];
111 for (
int eventIndex = 0; eventIndex < bank.Events.Length; eventIndex++)
117 eventNames.Add(
new GUIContent(bank.name +
"/" + bank.Events[eventIndex].Name));
121 eventNames.Add(
new GUIContent(bank.Events[eventIndex].Name));
126 eventNames.Sort(
new EventNameComparer());
129 eventNames.Insert(0,
new GUIContent(NoEventName));
131 AudioEventNames = eventNames.ToArray();
139 private static int OptionToId(
string option)
143 if (AudioEventNames != null)
145 for(
int i=0; i<AudioEventNames.Length; i++)
149 if (AudioEventNames[i].text.EndsWith(option))
157 if (AudioEventNames[i].text == option)