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