Пример #1
0
        /// <summary>
        /// ウィンドウ内のGUI(接続点等)の描画
        /// </summary>
        void WindowCallback(int id)
        {
            //ユーザーからの処理(各ジャンクション)
            for (int i = 0; i < junctionList.Count; i++)
            {
                JunctionPosition position = junctionList[i];
                var style = position.side == JunctionSide.Left ? "LargeButtonRight" : "LargeButtonLeft";
                if (ConnectorManager.HasCurrent)
                {
                    // 決定中の接続がある場合は始点となっている場合, 既に接続済みである場合,決定中の接続と同じサイドに非アクティブ
                    GUI.enabled = !ConnectorManager.IsConnected(this, position) &&
                                  !ConnectorManager.IsCurrent(this, position) && ConnectorManager.Current.StartPosition.side != position.side;

                    if (GUI.Button(CalculateJunctionRect(position), string.Empty, style))
                    {
                        // クリックされたら接続
                        ConnectorManager.Connect(this, position);
                    }
                    GUI.enabled = true;
                }
                else
                {
                    Event currentEvent = Event.current;
                    Rect  junctionRect = CalculateJunctionRect(position);
                    EditorGUI.DrawRect(junctionRect, Color.gray);

                    //右クリック
                    if (EditorWindow.Instance.MouseIsInGraphArea &&
                        currentEvent.type == EventType.MouseDown && currentEvent.button == 1)
                    {
                        Vector2 mousePos = currentEvent.mousePosition;
                        if (junctionRect.Contains(mousePos))
                        {
                            GenericMenu menu = new GenericMenu();
                            if (!EditorApplication.isPlaying)
                            {
                                menu.AddItem(new GUIContent("MakeTransition"), false, MakeTransition, position);
                                menu.AddItem(new GUIContent("EditTransition"), false, EditTransition, position);
                                menu.AddItem(new GUIContent("DeleteTransition"), false, DeleteTransition, position);
                                menu.AddSeparator("");
                                menu.AddItem(new GUIContent("DeleteJunction"), false, DeleteJunction, position);
                            }
                            else
                            {
                                menu.AddDisabledItem(new GUIContent("MakeTransition"));
                                menu.AddDisabledItem(new GUIContent("EditTransition"));
                                menu.AddDisabledItem(new GUIContent("DeleteTransition"));
                                menu.AddSeparator("");
                                menu.AddDisabledItem(new GUIContent("DeleteJunction"));
                            }

                            menu.ShowAsContext();
                            currentEvent.Use();
                        }
                    }

                    //左クリック
                    if (EditorWindow.Instance.MouseIsInGraphArea &&
                        currentEvent.type == EventType.MouseDown && currentEvent.button == 0)
                    {
                        Vector2 mousePos = currentEvent.mousePosition;
                        if (junctionRect.Contains(mousePos))
                        {
                            EditTransition(position);
                            currentEvent.Use();
                        }
                    }
                }
            }


            //ユーザーからの処理(Node全体)
            {
                Event currentEvent = Event.current;
                Rect  contextRect  = new Rect(0.0f, 0.0f, rect.width, rect.height);

                //右クリック
                if (EditorWindow.Instance.MouseIsInGraphArea &&
                    currentEvent.type == EventType.MouseDown && currentEvent.button == 1)
                {
                    Vector2 mousePos = currentEvent.mousePosition;
                    if (contextRect.Contains(mousePos))
                    {
                        GenericMenu menu = new GenericMenu();

                        if (!EditorApplication.isPlaying)
                        {
                            menu.AddItem(new GUIContent("NewEntrance"), false, NodeMenu, "NewEntrance");
                            menu.AddItem(new GUIContent("NewExit"), false, NodeMenu, "NewExit");
                            menu.AddSeparator("");
                            menu.AddItem(new GUIContent("Edit"), false, NodeMenu, "Edit");
                            menu.AddItem(new GUIContent("SetAsEntry"), false, NodeMenu, "SetAsEntry");
                            menu.AddItem(new GUIContent("Delete"), false, NodeMenu, "Delete");
                        }
                        else
                        {
                            menu.AddDisabledItem(new GUIContent("NewEntrance"));
                            menu.AddDisabledItem(new GUIContent("NewExit"));
                            menu.AddSeparator("");
                            menu.AddDisabledItem(new GUIContent("Edit"));
                            menu.AddDisabledItem(new GUIContent("SetAsEntry"));
                            menu.AddDisabledItem(new GUIContent("Delete"));
                        }

                        menu.ShowAsContext();
                        currentEvent.Use();
                    }
                }

                //左クリック
                //Debug.Log(currentEvent.mousePosition);
                if (EditorWindow.Instance.MouseIsInGraphArea &&
                    currentEvent.type == EventType.MouseDown && currentEvent.button == 0)
                {
                    Vector2 mousePos = currentEvent.mousePosition;
                    if (contextRect.Contains(mousePos))
                    {
                        NodeMenu("Edit");
                        //ここで'currentEvent.Use()'を使わない;もし使うとノードを移動できなくなる
                        //Eventが消費されてしまう
                    }
                }
            }

            OnGUI();

            //Debug.Log("12");

            if (EditorWindow.Instance.MouseIsInGraphArea)
            {
                GUI.DragWindow();
            }
        }
Пример #2
0
    public void Update()
    {
        position_x = (int)(rect.x);
        position_y = (int)(rect.y);

        rect = GUI.Window(id, rect, WindowCallback, String.Empty);
        Vector2 btnRect = new Vector2(25, 20);

        if (GUI.Button(new Rect(rect.x + rect.width - btnRect.x - 3, rect.y - btnRect.y, btnRect.x, btnRect.y), "×"))
        {
            NodeArrow.cs.SlideOut();
            NodeArrow.ps.SlideOut();

            // 曲線削除
            for (int i = 0; i < clickCount; i++)
            {
                if (ConnectorManager.IsConnected(this, i))
                {
                    ConnectorManager.Disconnect(this, i);
                }
            }

            // Node削除
            GameObject.Find("Node").GetComponent <NodeArrow>().Delete(this.id);
        }


        for (int element = 0; element < clickCount; element++)
        {
            if (ConnectorManager.HasCurrent)
            {
                // 決定中の接続がある場合は始点となっている場合, 既に接続済みである場合に非アクティブ
                // GUI.enabled = !ConnectorManager.IsConnected(this, position) && !ConnectorManager.IsCurrent(this, position);
                GUI.enabled = !ConnectorManager.IsCurrent(this, element);
                if (element == 0)
                {
                    if (GUI.Button(new Rect(rect.x - btnRect.x, rect.y + 40 + element * 25, btnRect.x, btnRect.y), ">"))
                    {
                        NodeArrow.cs.SlideOut();
                        NodeArrow.ps.SlideOut();
                        ConnectorManager.Connect(this, element);
                    }

                    /*
                     * if (GUI.Button(new Rect(rect.x + rect.width , rect.y + 40 + position*25, btnRect.x, btnRect.y), "<")){
                     *  Debug.Log("終点");
                     *  // クリックされたら接続
                     *  ConnectorManager.Connect(this, position);
                     * }*/
                }
                else
                {
                    if (GUI.Button(new Rect(rect.x + rect.width, rect.y + 40 + element * 25, btnRect.x, btnRect.y), ">"))
                    {
                        NodeArrow.cs.SlideOut();
                        NodeArrow.ps.SlideOut();
                        // クリックされたら取得
                        // 直前の始点と終点を結ぶ
                        ConnectorManager.StartConnecting(this, element);
                        // ConnectorManager.Connect(this, position);
                    }
                }
                GUI.enabled = true;
            }
            else
            {
                if (element == 0)
                {
                    if (GUI.Button(new Rect(rect.x - btnRect.x, rect.y + 40 + element * 25, btnRect.x, btnRect.y), ">"))
                    {
                        NodeArrow.cs.SlideOut();
                        NodeArrow.ps.SlideOut();
                        if (ConnectorManager.IsConnected(this, element))
                        {
                            ConnectorManager.Disconnect(this, element);
                        }
                        else
                        {
                            // Debug.Log("StartConnecting");
                            //ConnectorManager.Connect(this, position);
                            // ConnectorManager.StartConnecting(this, position);
                        }
                    }

                    /*
                     * if (GUI.Button(new Rect(rect.x + rect.width , rect.y + 40 + position*25, btnRect.x, btnRect.y), "<")){
                     * if (ConnectorManager.IsConnected(this, position))
                     * {
                     * Debug.Log("Disconnect");
                     * ConnectorManager.Disconnect(this, position);
                     * }
                     * else
                     * {
                     * Debug.Log("StartConnecting");
                     * //ConnectorManager.Connect(this, position);
                     * // ConnectorManager.StartConnecting(this, position);
                     * }
                     * }*/
                }
                else
                {
                    if (GUI.Button(new Rect(rect.x + rect.width, rect.y + 40 + element * 25, btnRect.x, btnRect.y), ">"))
                    {
                        NodeArrow.cs.SlideOut();
                        NodeArrow.ps.SlideOut();
                        if (ConnectorManager.IsConnected(this, element))
                        {
                            ConnectorManager.Disconnect(this, element);
                        }
                        else
                        {
                            ConnectorManager.StartConnecting(this, element);
                        }
                    }
                }
            }
        }
    }