protected override void OnLeftMouseDown(UnityEngine.Event inputEvent) { //Dragging state links for (int i = 0; i < _editableObjects.Count; i++) { StateEditorGUI state = (StateEditorGUI)_editableObjects[i]; StateMachineEditorLink[] links = state.GetEditableObject().GetEditorLinks(); if (links != null) { float scale = 1.0f; float linkRadius = Mathf.Round(kLinkIconWidth * 0.5f * scale) + 2.0f; for (int j = 0; j < links.Length; j++) { Vector3 startPos = GetLinkStartPosition(state, j); Vector2 toField = inputEvent.mousePosition - new Vector2(startPos.x, startPos.y); if (toField.magnitude < linkRadius) { _dragMode = eDragType.Custom; _draggingState = state; _draggingStateLink = links[j]; _draggingStateLinkIndex = j; _dragPos = inputEvent.mousePosition; _dragAreaRect = new Rect(-1.0f, -1.0f, 0.0f, 0.0f); _selectedObjects.Clear(); return; } } } } //Normal input base.OnLeftMouseDown(inputEvent); //Double clicking StateEditorGUI clickedOnState = _draggedObject as StateEditorGUI; if (clickedOnState != null) { if (_lastClickedState == clickedOnState && (EditorApplication.timeSinceStartup - _lastClickTime) < kDoubleClickTime) { OnDoubleClickState(clickedOnState as StateEditorGUI); } _lastClickedState = clickedOnState; _lastClickTime = EditorApplication.timeSinceStartup; } }
public override StateMachineEditorLink[] GetEditorLinks() { if (_branches != null) { StateMachineEditorLink[] links = new StateMachineEditorLink[_branches.Length]; for (int i = 0; i < _branches.Length; i++) { ConditionalStateBranch branch = _branches[i]; links[i] = new StateMachineEditorLink(branch, "goToState", branch.GetTakenText()); } return(links); } return(null); }
protected override void OnStopDragging(UnityEngine.Event inputEvent, bool cancelled) { if (_dragMode == eDragType.Custom) { if (!cancelled) { Vector2 gridPos = GetEditorPosition(UnityEngine.Event.current.mousePosition); StateEditorGUI draggedOnToState = null; //Check mouse is over a state foreach (StateEditorGUI editorGUI in _editableObjects) { if (editorGUI.GetBounds().Contains(gridPos)) { draggedOnToState = editorGUI; // Check its moved more than break; } } if (draggedOnToState != null) { _draggingStateLink.SetStateRef(new StateRef(draggedOnToState.GetStateId())); } else { _draggingStateLink.SetStateRef(new StateRef()); } } inputEvent.Use(); _dragMode = eDragType.NotDragging; _draggingState = null; _draggingStateLink = new StateMachineEditorLink(); _draggingStateLinkIndex = 0; } else { base.OnStopDragging(inputEvent, cancelled); } }
private void RenderExternalLink(StateMachineEditorLink link, StateEditorGUI fromState, int linkIndex) { StateMachineExternalStateEditorGUI externalState = null; StateRef stateRef = link.GetStateRef(); //Find external link for this state foreach (StateEditorGUI state in _editableObjects) { StateMachineExternalStateEditorGUI extState = state as StateMachineExternalStateEditorGUI; if (extState != null) { StateRef extStateRef = extState.ExternalStateRef.GetStateRef(); if (extStateRef.GetStateID() == stateRef.GetStateID() && extStateRef.GetExternalFile().GetFileGUID() == stateRef.GetExternalFile().GetFileGUID()) { externalState = extState; break; } } } //If none exists, create a new one if (externalState == null) { externalState = (StateMachineExternalStateEditorGUI)AddNewObject(new StateMachineExternalState()); externalState.ExternalStateRef = link; _editableObjects.Add(externalState); } if (!externalState.ExternalHasRendered) { externalState.CalcBounds(_style); bool selected = _selectedObjects.Contains(externalState); Color borderColor = selected ? _style._stateBackgroundSelected : _style._stateBackground; Rect renderedRect = GetScreenRect(externalState.GetBounds()); externalState.Render(renderedRect, borderColor, _style._externalStateColor, _style, selected ? 2.0f : 1.0f); externalState.ExternalHasRendered = true; } RenderLink(link.GetDescription(), fromState, externalState, linkIndex); }
public override StateMachineEditorLink[] GetEditorLinks() { StateMachineEditorLink[] links = new StateMachineEditorLink[1]; links[0] = new StateMachineEditorLink(this, "goToState", "Coroutine Done"); return(links); }
public override StateMachineEditorLink[] GetEditorLinks() { StateMachineEditorLink[] links = new StateMachineEditorLink[1]; links[0] = new StateMachineEditorLink(this, "goToState", "Playable Graph Finished"); return(links); }
public StateMachineEditorLink[] GetEditorLinks() { StateMachineEditorLink[] links = new StateMachineEditorLink[1]; links[0] = new StateMachineEditorLink(this, "goToState", "Go To"); return(links); }