/// <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); }
/// <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); }