/// <summary> /// Create the a Node of the type specified by the nodeID at position /// Auto-connects the passed connectingOutput if not null to the first compatible input /// </summary> public static Node Create(string nodeID, Vector2 position, NodeOutput connectingOutput) { Node node = NodeTypes.getDefaultNode(nodeID); if (node == null) { throw new UnityException("Cannot create Node with id " + nodeID + " as no such Node type is registered!"); } node = node.Create(position); node.InitBase(); if (connectingOutput != null) { // Handle auto-connection and link the output to the first compatible input foreach (NodeInput input in node.Inputs) { if (input.TryApplyConnection(connectingOutput)) { break; } } } NodeEditorCallbacks.IssueOnAddNode(node); return(node); }
public static Node Create(string nodeID, Vector2 position) { Node node = NodeTypes.getDefaultNode(nodeID); if (node == null) { throw new UnityException("Cannot create Node with id " + nodeID + " as no such Node type is registered!"); } node = node.Create(position); node.InitBase(); NodeEditorCallbacks.IssueOnAddNode(node); return(node); }
public static Node Duplicate(Node _other, Vector2 position) { Node node = UnityEngine.Object.Instantiate(_other); node.rect.position += new Vector2(10, 10); node.InitBase(); if (!NodeEditor.curNodeCanvas.nodes.Contains(node)) { NodeEditor.curNodeCanvas.nodes.Add(node); } //NodeEditorCallbacks.IssueOnAddNode(node); return(node); }
/// <summary> /// Create the a Node of the type specified by the nodeID at position /// Auto-connects the passed connectingOutput if not null to the first compatible input /// </summary> public static Node Create(string nodeID, Vector2 position, NodeOutput connectingOutput) { if (!NodeCanvasManager.CheckCanvasCompability(nodeID, NodeEditor.curNodeCanvas)) { throw new UnityException("Cannot create Node with ID '" + nodeID + "' as it is not compatible with the current canavs type (" + NodeEditor.curNodeCanvas.GetType().ToString() + ")!"); } if (!NodeEditor.curNodeCanvas.CanAddNode(nodeID)) { throw new UnityException("Cannot create another Node with ID '" + nodeID + "' on the current canvas of type (" + NodeEditor.curNodeCanvas.GetType().ToString() + ")!"); } Node node = NodeTypes.getDefaultNode(nodeID); if (node == null) { throw new UnityException("Cannot create Node as ID '" + nodeID + "' is not registered!"); } node = node.Create(position); if (node == null) { return(null); } node.InitBase(); if (connectingOutput != null) { // Handle auto-connection and link the output to the first compatible input foreach (NodeInput input in node.Inputs) { if (input.TryApplyConnection(connectingOutput)) { break; } } } NodeEditorCallbacks.IssueOnAddNode(node); NodeEditor.curNodeCanvas.Validate(); return(node); }
public static Node Create(string nodeID, Vector2 position, NodeOutput connectingOutput) { Node defaultNode = NodeTypes.getDefaultNode(nodeID); if ((UnityEngine.Object)defaultNode == (UnityEngine.Object)null) { throw new UnityException("Cannot create Node with id " + nodeID + " as no such Node type is registered!"); } defaultNode = defaultNode.Create(position); defaultNode.InitBase(); if ((UnityEngine.Object)connectingOutput != (UnityEngine.Object)null) { foreach (NodeInput input in defaultNode.Inputs) { if (input.TryApplyConnection(connectingOutput)) { break; } } } NodeEditorCallbacks.IssueOnAddNode(defaultNode); return(defaultNode); }
/// <summary> /// Context Click selection. Here you'll need to register your own using a string identifier /// </summary> public static void ContextCallback(object obj) { callbackObject cbObj = obj as callbackObject; curNodeCanvas = cbObj.canvas; curEditorState = cbObj.editor; switch (cbObj.message) { case "deleteNode": if (curEditorState.focusedNode != null) { curEditorState.focusedNode.Delete(); } break; case "duplicateNode": if (curEditorState.focusedNode != null) { ContextCallback(new callbackObject(curEditorState.focusedNode.GetID, curNodeCanvas, curEditorState)); Node duplicatedNode = curNodeCanvas.nodes [curNodeCanvas.nodes.Count - 1]; curEditorState.focusedNode = duplicatedNode; curEditorState.dragNode = true; curEditorState.makeTransition = null; curEditorState.connectOutput = null; curEditorState.panWindow = false; } break; case "startTransition": if (curEditorState.focusedNode != null) { curEditorState.makeTransition = curEditorState.focusedNode; curEditorState.connectOutput = null; } curEditorState.dragNode = false; curEditorState.panWindow = false; break; default: Vector2 createPos = ScreenToGUIPos(mousePos); Node node = NodeTypes.getDefaultNode(cbObj.message); if (node == null) { break; } bool acceptTransitions = NodeTypes.nodes [node].transitions; node = node.Create(createPos); node.InitBase(); NodeEditorCallbacks.IssueOnAddNode(node); if (curEditorState.connectOutput != null) { // If nodeOutput is defined, link it to the first input of the same type foreach (NodeInput input in node.Inputs) { if (Node.CanApplyConnection(curEditorState.connectOutput, input)) { // If it can connect (type is equals, it does not cause recursion, ...) Node.ApplyConnection(curEditorState.connectOutput, input); break; } } } else if (acceptTransitions && curEditorState.makeTransition != null) { Node.CreateTransition(curEditorState.makeTransition, node); } curEditorState.makeTransition = null; curEditorState.connectOutput = null; curEditorState.dragNode = false; curEditorState.panWindow = false; break; } if (NodeEditor.Repaint != null) { NodeEditor.Repaint(); } }