void MyDragLine() { if (startLineNode != null) { if (bDragingInputLine) { Vector2 lineEnd = startLineNode.getInputPortRect(startLinePort).center; drawBezier(Event.current.mousePosition, lineEnd, new Color(0.8f, 0.8f, 0.8f), true); } else if (bDragingOutputLine) { Vector2 lineStart = startLineNode.getOutputPortRect().center; drawBezier(lineStart, Event.current.mousePosition, new Color(0.8f, 0.8f, 0.8f), true); } } nodeManager.forEachNodes((n) => { for (int i = 0; i < n.getInputNum(); i++) { var inputNode = nodeManager.findNodeWindow(n.getInputGuid(i)); if (inputNode != null) { var endPos = n.getInputPortRect(i).center; var startPos = inputNode.getOutputPortRect().center; drawBezier(startPos, endPos, new Color(0.8f, 0.8f, 0.8f), true); } } }); if (Event.current.type == EventType.MouseDrag) { if (bDragingInputLine) { } } if (Event.current.type == EventType.MouseDown) { if (Event.current.button == 0) { nodeManager.forEachNodes((n) => { for (int i = 0; i < n.getInputNum(); i++) { if (n.getInputPortRect(i).Contains(Event.current.mousePosition)) { if (nodeManager.findNodeWindow(n.getInputGuid(i)) != null) { bDragingOutputLine = true; startLineNode = nodeManager.findNodeWindow(n.getInputGuid(i)); n.setInput(i, ""); } else { bDragingInputLine = true; startLineNode = n; startLinePort = i; } } } if (n.hasOutput()) { if (n.getOutputPortRect().Contains(Event.current.mousePosition)) { bDragingOutputLine = true; startLineNode = n; } } }); } } if (Event.current.type == EventType.MouseUp) { if (Event.current.button == 0) { if (bDragingInputLine) { nodeManager.forEachNodes((n) => { if (n != startLineNode) { if (n.hasOutput() && n.getOutputPortRect().Contains(Event.current.mousePosition)) { startLineNode.setInput(startLinePort, n.getGuid()); } } }); } else if (bDragingOutputLine) { nodeManager.forEachNodes((n) => { if (n != startLineNode) { for (int i = 0; i < n.getInputNum(); i++) { if (n.getInputPortRect(i).Contains(Event.current.mousePosition)) { n.setInput(i, startLineNode.getGuid()); } } } }); } bDragingInputLine = false; bDragingOutputLine = false; this.Repaint(); } } }