public static void DrawAddFilterSelector(GameObject parent, Action addedFilterCallback) { GUILayout.BeginHorizontal(); GUILayout.FlexibleSpace(); GUILayout.Label("Add Filter:", GUILayout.ExpandWidth(false)); Type selectedFilterType = null; selectedFilterType = TriggerGUILayout.DrawFilterSelector(selectedFilterType); if (selectedFilterType != null) { int ordinal = GetLastExecutionTime(parent) + 1; GameObject filterGameObject = new GameObject(selectedFilterType.Name); filterGameObject.transform.parent = parent.transform; EventFilter filter = (EventFilter)filterGameObject.AddComponent(selectedFilterType); filter.Ordinal = ordinal; addedFilterCallback(); } GUILayout.EndHorizontal(); }
public static bool DrawCustomFilterInspectorBar(bool expanded, EventFilter filter, out EventFilter newFilter) { EditorGUILayout.BeginHorizontal(); EditorGUILayoutExt.BeginLabelStyle(12, FontStyle.Bold, new Color(0.45f, 0.45f, 0.45f), null); expanded = GUILayout.Button(expanded ? "▼" : "►", GUI.skin.label, GUILayout.ExpandWidth(false)) ? !expanded : expanded; bool newEnabled = GUILayout.Toggle(filter.enabled, "", GUILayout.ExpandWidth(false)); if (newEnabled != filter.enabled) { filter.enabled = newEnabled; } EditorGUILayoutExt.BeginLabelStyle(null, null, new Color(1f, 1f, 0.72f), null); expanded = GUILayout.Button(filter.GetType().Name, GUI.skin.label, GUILayout.ExpandHeight(false), GUILayout.ExpandWidth(false)) ? !expanded : expanded; GUILayout.FlexibleSpace(); EditorGUILayoutExt.EndLabelStyle(); EditorGUILayoutExt.EndLabelStyle(); if (GUILayout.Button("▲", GUILayout.ExpandWidth(false))) { MoveOrderableUp(filter); } if (GUILayout.Button("▼", GUILayout.ExpandWidth(false))) { MoveOrderableDown(filter); } Type eventType = TriggerGUILayout.DrawFilterSelector(filter.GetType()); if (eventType != null) { if (eventType != filter.GetType()) { GameObject filterGameObject = filter.gameObject; int executionTime = filter.Ordinal; GameObject.DestroyImmediate(filter); filter = (EventFilter)filterGameObject.AddComponent(eventType); filter.Ordinal = executionTime; filterGameObject.name = filter.GetType().Name; } } else { IOrderable next; int time = filter.Ordinal + 1; while ((next = GetOrderableAtTime(filter.gameObject.transform.parent.gameObject, time)) != null) { next.Ordinal -= 1; time++; } GameObject.DestroyImmediate(filter.gameObject); filter = null; } EditorGUILayout.EndHorizontal(); newFilter = filter; return(expanded); }