public void Pack(DialogueNode n) { //just in case if (root == null || n == null) { return; } //pack else { //add node to list values.Add(n); //recursion ends if (n.EndNode) { return; } //pack node branches for (int i = 0; i < 3; i++) { Pack(n.Branch(i)); } } }
//sets void SetAll() { if (currDialogue.Branch(0) != null && currDialogue.Branch(0).GetResponse() != "") { dialogue[0].text = currDialogue.GetDialogue(); for (int i = 1; i < 4; i++) { DialogueNode d; if (currDialogue.Branch(i - 1) != null) { d = currDialogue.Branch(i - 1); dialogue[i].text = d.GetResponse(); } } } else { DialogueEnding(); } }
//getter: branches (used to traverse tree) public DialogueNode Branch(int branch) { currNode = currNode.Branch(branch); return(currNode); }
//make graphical representation of tree void GenerateTree() { //nodes following reference node (responses) DialogueNode r1 = refNode.Branch(0); DialogueNode r2 = refNode.Branch(1); DialogueNode r3 = refNode.Branch(2); DialogueNode[] giveNodes = new DialogueNode[3]; giveNodes[0] = r1; giveNodes[1] = r2; giveNodes[2] = r3; //get nodes following follow nodes DialogueNode[][] followResponses = new DialogueNode[3][]; for (int i = 0; i < 3; i++) { followResponses[i] = new DialogueNode[3]; for (int j = 0; j < 3; j++) { if (i == 0 && r1 != null) { followResponses[i][j] = r1.Branch(j); } else if (i == 1 && r2 != null) { followResponses[i][j] = r2.Branch(j); } else if (i == 2 && r3 != null) { followResponses[i][j] = r3.Branch(j); } } } //draw reference node DrawNodeForm(startPosX, startPosY, 0, refNode, giveNodes); //back button GUI.color = Color.white; //change if (GUI.Button(new Rect(startPosX, startPosY - 25 - 16, 282, 25), new GUIContent("<"))) { if (refNode != null && refNode.Branch(-1) != null) { refNode = refNode.Branch(-1); clearAudio = true; } } //draw top follow node if (r1 != null && r1.GetResponse() != "") { DrawNodeForm(startPosX + 500, startPosY - 235, 1, r1, followResponses[0]); //forward from button GUI.color = Color.white; if (GUI.Button(new Rect(startPosX + 500, startPosY - 260 - 16, 282, 25), new GUIContent(">"))) { if (refNode != null && refNode.Branch(0) != null) { refNode = refNode.Branch(0); clearAudio = true; } } } //draw middle follow node if (r2 != null && r2.GetResponse() != "") { DrawNodeForm(startPosX + 500, startPosY + 17, 2, r2, followResponses[1]); //forward from button GUI.color = Color.white; if (GUI.Button(new Rect(startPosX + 500, startPosY - 25 + 32 - 30, 282, 25), new GUIContent(">"))) { if (refNode != null && refNode.Branch(1) != null) { refNode = refNode.Branch(1); clearAudio = true; } } } //draw bottom follow node if (r3 != null && r3.GetResponse() != "") { DrawNodeForm(startPosX + 500, startPosY + 235 + 36, 3, r3, followResponses[2]); //forward from button GUI.color = Color.white; if (GUI.Button(new Rect(startPosX + 500, startPosY + 210 - 16 + 36, 282, 25), new GUIContent(">"))) { if (refNode != null && refNode.Branch(2) != null) { refNode = refNode.Branch(2); clearAudio = true; } } } }