Example #1
0
        public void BeginEdit(TransitionProfile profile)
        {
            statePanelView      = paramPanelView = tagsPanelView = null;
            transitionPanelView = null;
            OnEnable();

            this.profile = profile;
        }
Example #2
0
        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;
            }
        }