public static void DrawNodeConnectionSmooth(ConnectionDrawData data) { Handles.BeginGUI(); Color shadowCol = new Color(0.2f, 0.2f, 0.2f, 0.06f) * Color.black; var from_diff = (data.from - data.fromOrigin).normalized; var to_diff = (data.to - data.toOrigin).normalized; var from_dir = new Vector3(from_diff.x, from_diff.y, 0); var to_dir = new Vector3(to_diff.x, to_diff.y, 0); Vector3 startPos = new Vector3(data.from.x, data.from.y, 0.0f); Vector3 endPos = new Vector3(data.to.x, data.to.y, 0.0f); var angle = Mathf.Lerp(10, 90, Vector2.Distance(startPos, endPos) / 300); Vector3 startTan = startPos + from_dir * angle; Vector3 endTan = endPos + to_dir * angle; for (int i = 0; i < 3; i++) { Handles.DrawBezier(startPos, endPos, startTan, endTan, shadowCol, null, (i + 1) * 5); } Handles.DrawBezier(startPos, endPos, startTan, endTan, data.color, null, 2.0f); Handles.EndGUI(); }
// void HandleConnectionMenu(GraphNode action, int index) // { // GenericMenu menu = new GenericMenu(); // // if (index > 0) // { // int i = 0; // foreach (GraphNode.ConnectionInfo connection in action.connectedTo.Where(c => c.IndexFrom == index)) // { // menu.AddItem(new GUIContent(++i + ") Remove connection to '" + connection.Node.Name + "' ..."), false, CreateRemoveConnectionCallback(action, connection)); // } // } // // menu.ShowAsContext(); // } /*[Obsolete("Deprecated, use StartConnection(BaseNode node)")] * void HandleConnection(GraphNode actionNode, int result) * { * if (result == 0) * return; * * switch (Event.current.button) * { * case 0: * if (!IsConnecting) * { * connectIndex = result; * IsConnecting = true; * SelectedNode = actionNode; * } * else if ((int)Mathf.Sign(connectIndex) != (int)Mathf.Sign(result)) * { * if (connectIndex > 0 && GraphNode.CanMakeConnection(SelectedNode, connectIndex, actionNode, result)) * { * GraphNode.MakeConnection(SelectedNode, connectIndex, actionNode, result); * } * else if (connectIndex < 0 && GraphNode.CanMakeConnection(actionNode, result, SelectedNode, connectIndex)) * { * GraphNode.MakeConnection(actionNode, result, SelectedNode, connectIndex); * } * * connectIndex = 0; * IsConnecting = false; * SelectedNode = null; * } * break; * case 1: * HandleConnectionMenu(actionNode, result); * break; * default: * break; * } * }*/ public void DrawNodeConnectionStyled(ConnectionDrawData data) { switch (ConnectionLineStyle) { case ConnectionStyle.BezierVertical: DrawNodeConnectionBezierVertical(data.from, data.to, data.color); break; case ConnectionStyle.BezierHorizontal: DrawNodeConnectionBezierHorizontal(data.from, data.to, data.color); break; case ConnectionStyle.Smooth: DrawNodeConnectionSmooth(data); break; default: DrawNodeConnectionLine(data.from, data.to, data.color); break; } }