protected override void OnLeftMouseDown(Event inputEvent) { //Check for clicking on a link NodeEditorField clickedOnNodeFromField = null; NodeEditorField clickedOnNodeToField = null; for (int i = 0; i < _editableObjects.Count && clickedOnNodeFromField == null; i++) { NodeEditorGUI node = (NodeEditorGUI)_editableObjects[i]; if (node.GetOutputField() != null) { Vector2 toField = inputEvent.mousePosition - node.GetOutputField()._position; if (toField.magnitude < kLinkIconWidth * 0.5f) { clickedOnNodeFromField = node.GetOutputField(); break; } } foreach (NodeEditorField nodeInputField in node.GetInputFields()) { //If has an link going into it we can drag it away int linkNodeId = GetNodeInputFieldLinkNodeId(nodeInputField); if (linkNodeId != -1) { NodeEditorGUI linkedNode = GetEditableObject(linkNodeId); if (linkedNode != null) { Vector2 toField = inputEvent.mousePosition - nodeInputField._position; if (toField.magnitude < kLinkIconWidth) { clickedOnNodeFromField = linkedNode.GetOutputField(); clickedOnNodeToField = nodeInputField; break; } } } } } if (clickedOnNodeFromField != null) { _draggingNodeFieldFrom = clickedOnNodeFromField; _draggingNodeFieldTo = clickedOnNodeToField; _dragMode = eDragType.Custom; _dragPos = inputEvent.mousePosition; _dragAreaRect = new Rect(-1.0f, -1.0f, 0.0f, 0.0f); } //Normal object clicking else { _dragMode = eDragType.LeftClick; base.OnLeftMouseDown(inputEvent); } }