public static StartStepNode Create(Rect NodeRect) { StartStepNode node = ScriptableObject.CreateInstance <StartStepNode>(); node.name = "Start Step"; node.rect = NodeRect; NodeLinker.Create(node, "Link To", (int)Node.LinkType.To); NodeLinker.Create(node, "Link From", (int)Node.LinkType.From); node.Init(); if (node.LinkSaveId >= 0) { foreach (Node n in Node_Editor.editor.nodeCanvas.nodes) { if (n.ID == node.LinkSaveId) { node.LinkSave = n.Linkers[(int)Node.LinkType.From].connection; } } } return(node); }
/// <summary> /// Context Click selection. Here you'll need to register your own using a string identifier /// </summary> public void ContextCallback(object obj) { switch (obj.ToString()) { case "AI_actionNode": AI_ActionNode actionNode = AI_ActionNode.Create(new Rect(mousePos.x, mousePos.y, 100, 50)); break; case "Controller_actionNode": Controller_ActionNode.Create(new Rect(mousePos.x, mousePos.y, 100, 50)); break; case "AI_conditionNode": AI_ConditionNode conditionNode = AI_ConditionNode.Create(new Rect(mousePos.x, mousePos.y, 100, 50)); break; case "Controller_conditionNode": Controller_ConditionNode.Create(new Rect(mousePos.x, mousePos.y, 100, 50)); break; case "Start_StepNode": StartStepNode.Create(new Rect(mousePos.x, mousePos.y, 100, 50)); break; case "End_StepNode": EndStepNode.Create(new Rect(mousePos.x, mousePos.y, 100, 50)); break; case "deleteLinkTo": Node n = NodeAtPosition(mousePos); n.Linkers[(int)Node.LinkType.To].connection = null; n.Linkers[(int)Node.LinkType.To].connectionID = -1; break; case "deleteLinkToOK": Node n1 = NodeAtPosition(mousePos); n1.Linkers[(int)Node.LinkType.ToOK].connection = null; n1.Linkers[(int)Node.LinkType.ToOK].connectionID = -1; break; case "deleteLinkToKO": Node n2 = NodeAtPosition(mousePos); n2.Linkers[(int)Node.LinkType.ToKO].connection = null; n2.Linkers[(int)Node.LinkType.ToKO].connectionID = -1; break; case "deleteNode": Node node = NodeAtPosition(mousePos); if (node != null && (node.name != "Root" && node.name != "End")) { nodeCanvas.nodes.Remove(node); node.OnDelete(); } break; } }
/// <summary> /// Loads the a node canvas from an asset /// </summary> public void LoadNodeCanvas(string path) { XmlSerializer serializer = new XmlSerializer(typeof(Node_Canvas_Object)); StreamReader lecteur = new StreamReader(path); nodeCanvas = (Node_Canvas_Object)serializer.Deserialize(lecteur); foreach (Node n1 in nodeCanvas.nodes) { StartStepNode stepNode = n1 as StartStepNode; if (stepNode) { stepNode.InitCustom(); } if (n1.Linkers[0]) { n1.Linkers[0].body = n1; } for (int i = 1; i < 4; ++i) { if (n1.Linkers[i]) { n1.Linkers[i].body = n1; foreach (Node n2 in nodeCanvas.nodes) { if (n1.Linkers[i].connectionID == n2.ID) { n1.Linkers[i].connection = n2.Linkers[(int)Node.LinkType.From]; n2.Linkers[(int)Node.LinkType.From].connection = n1.Linkers[i]; } } } } } lecteur.Close(); Repaint(); }