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);
    }
Beispiel #4
0
    //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;
                }
            }
        }
    }