Ejemplo n.º 1
0
        public EItemAction HandleEvents(Event e)
        {
            EItemAction result = EItemAction.None;

            if (Box != null)
            {
                switch (e.type)
                {
                case EventType.MouseDown:
                    // Right click
                    if (e.button == 1)
                    {
                        if (Box.Contains(e.mousePosition))
                        {
                            result = EItemAction.ContextMenuEdge;
                        }
                    }
                    break;
                }
            }
            return(result);
        }
        private void HandleEvents(Event e)
        {
            EItemAction itemAction = EItemAction.None;
            int         i          = 0;

            foreach (ConversationItem item in mConversation.Items)
            {
                itemAction = item.HandleEvents(e);

                if (itemAction == EItemAction.ContextMenuItem)
                {
                    OpenContextMenuForNode(item, e.mousePosition, i == 0);
                    break;
                }
                else if (itemAction == EItemAction.Select)
                {
                    // TODO: Make object selectable in inspector?
                    //ConversationItemSO so = ScriptableObject.CreateInstance<ConversationItemSO>();
                    //so.Item = item;
                    //Selection.activeObject = so;

                    if (mPendingConnection != null)
                    {
                        mPendingConnection.ToId = item.ID;
                        mConversation.Edges.Add(mPendingConnection);
                        mPendingConnection.InitByIds(mConversation);
                        mPendingConnection = null;
                    }
                    break;
                }
                else if (itemAction == EItemAction.Drag)
                {
                    if (mCurrentDragItem == null)
                    {
                        mCurrentDragItem = item;
                    }

                    mCurrentDragItem.Drag(e);
                    break;
                }

                i++;
            }

            // Handle edge events
            if (itemAction == EItemAction.None)
            {
                foreach (var edge in mConversation.Edges)
                {
                    itemAction = edge.HandleEvents(e);
                    if (itemAction == EItemAction.ContextMenuEdge)
                    {
                        OpenContextMenuForEdge(edge, e.mousePosition);
                        break;
                    }
                }
            }

            // No item or edge action
            if (itemAction == EItemAction.None)
            {
                switch (e.type)
                {
                case EventType.MouseDrag:
                    if (mCurrentDragItem != null)
                    {
                        mCurrentDragItem.Drag(e);
                    }
                    break;

                case EventType.MouseUp:
                    mCurrentDragItem = null;
                    break;

                case EventType.MouseDown:

                    // Right mouse button
                    if (e.button == 1)
                    {
                        OpenContextMenu(e.mousePosition);
                    }
                    // Left mouse button
                    else if (e.button == 0)
                    {
                        DeletePendingConnection();
                    }
                    break;

                case EventType.KeyDown:

                    if (e.keyCode == KeyCode.Escape)
                    {
                        DeletePendingConnection();
                    }
                    break;
                }
            }
        }