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;
                    }
                }
Esempio n. 2
0
            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);
                }
Esempio n. 5
0
 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);
 }