void IEdgeConnectorListener.OnDrop(GraphView graphView, Edge edge) { VFXView view = graphView as VFXView; VFXFlowEdge flowEdge = edge as VFXFlowEdge; VFXFlowEdgeController edgeController = new VFXFlowEdgeController(flowEdge.input.controller, flowEdge.output.controller); if (flowEdge.controller != null) { view.controller.RemoveElement(flowEdge.controller); } view.controller.AddElement(edgeController); }
void IEdgeConnectorListener.OnDropOutsidePort(Edge edge, Vector2 position) { VFXView view = this.GetFirstAncestorOfType <VFXView>(); VFXViewController viewController = view.controller; VFXContextUI endContext = null; foreach (var node in view.GetAllContexts()) { if (node.worldBound.Contains(position)) { endContext = node; } } VFXFlowEdge flowEdge = edge as VFXFlowEdge; bool exists = false; if (flowEdge.controller != null) { view.controller.RemoveElement(flowEdge.controller); exists = true; } if (endContext != null) { VFXContextController nodeController = endContext.controller; var compatibleAnchors = viewController.GetCompatiblePorts(controller, null); if (controller.direction == Direction.Input) { foreach (var outputAnchor in nodeController.flowOutputAnchors) { if (compatibleAnchors.Contains(outputAnchor)) { VFXFlowEdgeController edgeController = new VFXFlowEdgeController(controller, outputAnchor); viewController.AddElement(edgeController); break; } } } else { foreach (var inputAnchor in nodeController.flowInputAnchors) { if (compatibleAnchors.Contains(inputAnchor)) { VFXFlowEdgeController edgeController = new VFXFlowEdgeController(inputAnchor, controller); viewController.AddElement(edgeController); break; } } } } else if (!exists) { VFXFilterWindow.Show(VFXViewWindow.currentWindow, Event.current.mousePosition - new Vector2(376 * 0.5f * VFXViewWindow.currentWindow.graphView.scale, 0), view.ViewToScreenPosition(Event.current.mousePosition), new VFXNodeProvider(viewController, AddLinkedContext, ProviderFilter, new Type[] { typeof(VFXContext) })); } }