private void RenderLinks(float scale, NodeEditorField highlightedField) { foreach (NodeEditorGUI node in _editableObjects) { if (node.HasOutput()) { RenderLinkIcon(node.GetOutputField()._position, kOutputLinkIconColor, scale, false); } foreach (NodeEditorField nodeInputField in node.GetInputFields()) { Color color; if (_dragMode == eDragType.Custom && (nodeInputField._type != _draggingNodeFieldFrom._type && !_draggingNodeFieldFrom._type.IsAssignableFrom(nodeInputField._type))) { color = kUnusableLinkIconColor; } else { color = kInputLinkIconColor; } RenderStaticValueBox(nodeInputField, nodeInputField._position, kUnusableLinkIconColor, scale); RenderLinkIcon(nodeInputField._position, color, scale, nodeInputField == highlightedField); } } foreach (NodeEditorGUI node in _editableObjects) { foreach (NodeEditorField nodeInputField in node.GetInputFields()) { if (_dragMode != eDragType.Custom || _draggingNodeFieldTo != nodeInputField) { int linkedOutputNodeId = GetNodeInputFieldLinkNodeId(nodeInputField); if (linkedOutputNodeId != -1) { NodeEditorGUI outputNode = GetEditableObject(linkedOutputNodeId); if (outputNode != null && outputNode.HasOutput()) { RenderLink(outputNode.GetOutputField()._position, nodeInputField._position, _dragMode == eDragType.Custom ? Color.Lerp(kLinkLineColor, Color.black, 0.3f) : kLinkLineColor, scale); } } } } } if (_dragMode == eDragType.Custom) { //Instead of rendering current dragging link, render it to mouse position RenderLink(_draggingNodeFieldFrom._position, Event.current.mousePosition, kLinkLineColor, scale, true); } }