public void BeginEdit(TransitionProfile profile) { statePanelView = paramPanelView = tagsPanelView = null; transitionPanelView = null; OnEnable(); this.profile = profile; }
void OnGUI() { if (!profile) { return; } if (Selection.activeObject != profile && Selection.activeObject is TransitionProfile) { BeginEdit(Selection.activeObject as TransitionProfile); } globalPanel = (GlobalPanelType)GL.Toolbar((int)globalPanel, new string[] { "States", "Params", "Tags", "Transitions" }, EditorStyles.toolbarButton); switch (globalPanel) { case GlobalPanelType.States: { profile.controller = (AnimatorController)EGL.ObjectField("Controller", profile.controller, typeof(AnimatorController), allowSceneObjects: false); if (profile.controller) { EGL.BeginHorizontal(); EGL.PrefixLabel("Layer"); profile.controllerLayer = EGL.IntField(profile.controllerLayer); // GL.FlexibleSpace(); if (GL.Button("Sync", EditorStyles.miniButtonRight, GL.Width(40)) && profile.controller) { SyncControllerStates(); statePanelView.Reload(); } EGL.EndHorizontal(); } EGL.Space(); if (statePanelView == null) { statePanelView = new StatesTreeView(statePanelState, profile); statePanelView.searchString = ""; searchFieldState.downOrUpArrowKeyPressed += statePanelView.SetFocusAndEnsureSelectedItem; } statePanelView.searchString = ToolbarSearchField(statePanelView.searchString, searchFieldState); statePanelView.OnGUI(GUILayoutUtility.GetRect(0, 10000, 0, 10000)); } break; case GlobalPanelType.Parameters: { if (paramPanelView == null) { paramPanelView = new ParamsTreeView(paramPanelState, profile); paramPanelView.searchString = ""; } paramPanelView.searchString = ToolbarSearchField(paramPanelView.searchString, searchFieldParam); paramPanelView.OnGUI(GUILayoutUtility.GetRect(0, 10000, 0, 10000)); } break; case GlobalPanelType.Tags: { if (tagsPanelView == null) { tagsPanelView = new TagsTreeView(tagsPanelState, profile); } tagsPanelView.searchString = ToolbarSearchField(tagsPanelView.searchString, searchFieldTag); tagsPanelView.OnGUI(GUILayoutUtility.GetRect(0, 10000, 0, 10000)); var selection = tagsPanelView.GetSelection(); if (selection.Any()) { string selectedTag = profile.tags[selection.First()]; var relatedStates = profile.states.Where(state => state.HasTagAnyFrame(Animator.StringToHash(selectedTag))).Select(it => it.stateName); string statesStr = string.Join(",", relatedStates.ToArray()); GL.Label(statesStr, EditorStyles.textArea); } } break; default: { // Transitions if (transitionPanelView == null) { transitionPanelView = new TransitionTreeView(transitionPanelState, profile); } EditorGUI.BeginChangeCheck(); transitionPanelView.fromStateFilter = searchFieldFromState.OnGUI("From State", transitionPanelView.fromStateFilter); transitionPanelView.targetStateFilter = searchFieldTargetState.OnGUI("Target State", transitionPanelView.targetStateFilter); if (EditorGUI.EndChangeCheck()) { transitionPanelView.Reload(); } EGL.Space(); transitionPanelView.OnGUI(GUILayoutUtility.GetRect(0, 10000, 0, 10000)); Repaint(); } break; } }