Exemplo n.º 1
0
 /// <summary>
 /// Processes events for the transitions
 /// </summary>
 /// <param name="e"></param>
 /// <param name="transition"></param>
 /// <returns></returns>
 public void ProcessTransitionEvents(Event e, StateMachineEditor stateMachine)
 {
     for (int i = 0; i < connectedStates.Count; i++)
     {
         switch (e.type)
         {
         case EventType.MouseDown:
             if (stateTransitionInfo[connectedStates[i]].ClickableArea.Contains(e.mousePosition))
             {
                 if (e.button == 0)
                 {
                     stateTransitionInfo[connectedStates[i]].Selected = true;
                     if (OnTransitionClicked != null)
                     {
                         OnTransitionClicked(stateTransitionInfo[connectedStates[i]]);
                     }
                 }
                 else if (e.button == 1)
                 {
                     stateMachine.CreatingTransition = false;
                     ProcessTransitionContextMenu(stateTransitionInfo[connectedStates[i]]);
                     e.Use();
                 }
             }
             else
             {
                 stateTransitionInfo[connectedStates[i]].Selected = false;
             }
             break;
         }
     }
 }
        /// <summary>
        /// Opens a StateMachine scriptable object when it is double clicked in inspector
        /// </summary>
        /// <param name="openedSM"></param>
        public static void OpenWindow(StateMachine openedSM)
        {
            currentSM = openedSM;
            StateMachineEditor window = GetWindow <StateMachineEditor>();

            window.titleContent = new GUIContent("State Machine Editor");
        }
        public static bool PullUpNodeEditor(int instanceID, int line)
        {
            StateMachine stateMachine = EditorUtility.InstanceIDToObject(instanceID) as StateMachine;

            if (stateMachine != null)
            {
                StateMachineEditor.OpenWindow(stateMachine);
                return(true);
            }

            return(false);
        }
Exemplo n.º 4
0
        /// <summary>
        /// Handles mouse input
        /// </summary>
        /// <param name="e"></param>
        /// <returns></returns>
        public bool ProcessEvent(Event e, StateMachineEditor stateMachine)
        {
            switch (e.type)
            {
            case EventType.MouseDown:
                if (e.button == 0)
                {
                    if (state.Rectangle.Contains(e.mousePosition))
                    {
                        isDragged   = true;
                        GUI.changed = true;
                        stateStyle  = StateMachineEditor.SelectedStyle;

                        if (Clicked != null)
                        {
                            Clicked(this);
                        }
                    }
                    else
                    {
                        GUI.changed = true;
                        stateStyle  = StateMachineEditor.DefaultStyle;
                    }
                }
                if (e.button == 1)
                {
                    if (state.Rectangle.Contains(e.mousePosition))
                    {
                        GUI.changed = true;
                        stateStyle  = StateMachineEditor.SelectedStyle;

                        // Stop the state machine from transitioning
                        stateMachine.CreatingTransition = false;

                        ProcessContextMenu();
                        e.Use();
                    }
                    else
                    {
                        GUI.changed = true;
                        stateStyle  = StateMachineEditor.DefaultStyle;
                    }
                }
                break;

            case EventType.MouseUp:
                isDragged = false;
                break;

            case EventType.MouseDrag:
                if (e.button == 0 && isDragged)
                {
                    DragState(e.delta);
                    e.Use();
                    OnNodeChange();
                    return(true);
                }
                break;
            }

            return(false);
        }