//waits to go to new branch
    IEnumerator WaitForBranch(int chosen)
    {
        yield return(new WaitForSeconds(waitTime));

        audioSource.clip = currDialogue.GetAudioDialogue();
        audioSource.Play();


        ActivateButtons(chosen, true);
        SetAll();
    }
    //activate buttons, set dialogue from root of tree
    public void InitDialogue(DialogueReader givenReader, AudioSource givenAudioSource)
    {
        dialogueReader = givenReader;
        audioSource    = givenAudioSource;
        dialogueTree   = dialogueReader.GetTree();

        if (dialogueTree != null)
        {
            currDialogue = dialogueTree.GoToRoot();
            speaker.text = dialogueTree.GetSpeaker();

            ActivateButtons(-1, true);
            SetAll();

            audioSource.clip = currDialogue.GetAudioDialogue();
            audioSource.Play();
        }
    }
Exemplo n.º 3
0
    void DrawNodeForm(float startX, float startY, int boxNum, DialogueNode givenNode, DialogueNode[] followNodes)
    {
        //strings to save text boxed to
        string dialogue  = "";
        string response1 = "";
        string response2 = "";
        string response3 = "";

        //convenience
        DialogueNode givenR1 = followNodes[0];
        DialogueNode givenR2 = followNodes[1];
        DialogueNode givenR3 = followNodes[2];


        if (givenNode.GetDialogue() != null)
        {
            dialogue = givenNode.GetDialogue();
        }

        //set position of node graphic
        r.x = startX;
        r.y = startY;

        GUI.color = Color.cyan;
        dialogue  = GUI.TextArea(r, dialogue);
        givenNode.SetDialogue(dialogue);

        //set position of follow node graphics
        r1.x = startX;
        r1.y = startY + 50 + 16 - 10;

        r2.x = startX;
        r2.y = startY + 100 + 32 - 20;

        r3.x = startX;
        r3.y = startY + 150 + 48 - 30;

        ra.x = startX + 50;
        ra.y = startY - 16;

        ra1.x = r1.x + 50;
        ra1.y = r1.y - 16;

        ra2.x = r2.x + 50;
        ra2.y = r2.y - 16;

        ra3.x = r3.x + 50;
        ra3.y = r3.y - 16;

        rab.x = startX;
        rab.y = startY - 16;

        rab1.x = r1.x;
        rab1.y = r1.y - 16;

        rab2.x = r2.x;
        rab2.y = r2.y - 16;

        rab3.x = r3.x;
        rab3.y = r3.y - 16;

        //DIALOGUE AUDIO
        EditorGUI.BeginChangeCheck();

        if (audioObjects[boxNum][0] == null)
        {
            audioObjects[boxNum][0] = EditorGUI.ObjectField(ra, givenNode.GetAudioDialogue(), typeof(UnityEngine.Object), true);
        }
        else
        {
            audioObjects[boxNum][0] = EditorGUI.ObjectField(ra, audioObjects[boxNum][0], typeof(UnityEngine.Object), true);
        }

        if (EditorGUI.EndChangeCheck())
        {
            givenNode.SetAudioDialogue(((AudioClip)audioObjects[boxNum][0]).name);
        }

        if (GUI.Button(rab, "Play") && audioObjects[boxNum][0] != null)
        {
            PlayAudioClip((AudioClip)audioObjects[boxNum][0]);
        }


        //set responses to saved response (null checks might not be necessary anymore)
        if (givenR1 != null && givenR1.GetResponse() != null)
        {
            response1 = givenR1.GetResponse();
        }

        if (givenR2 != null && givenR2.GetResponse() != null)
        {
            response2 = givenR2.GetResponse();
        }

        if (givenR3 != null && givenR3.GetResponse() != null)
        {
            response3 = givenR3.GetResponse();
        }

        //get user updates to responses
        GUI.color = Color.grey;
        response1 = GUI.TextArea(r1, response1);
        response2 = GUI.TextArea(r2, response2);
        response3 = GUI.TextArea(r3, response3);

        //RESPONSE 1 AUDIO OBJ
        EditorGUI.BeginChangeCheck();
        //Debug.Log(givenR1.GetAudioResponse());
        if (audioObjects[boxNum][1] == null && givenR1 != null)
        {
            audioObjects[boxNum][1] = EditorGUI.ObjectField(ra1, givenR1.GetAudioResponse(), typeof(UnityEngine.Object), true);
        }
        else
        {
            audioObjects[boxNum][1] = EditorGUI.ObjectField(ra1, audioObjects[boxNum][1], typeof(UnityEngine.Object), true);
        }

        if (EditorGUI.EndChangeCheck())
        {
            givenR1.SetAudioResponse(((AudioClip)audioObjects[boxNum][1]).name);
        }

        if (GUI.Button(rab1, "Play") && audioObjects[boxNum][1] != null)
        {
            PlayAudioClip((AudioClip)audioObjects[boxNum][1]);
        }

        //RESPONSE 2 AUDIO OBJ
        EditorGUI.BeginChangeCheck();
        if (audioObjects[boxNum][2] == null && givenR2 != null)
        {
            audioObjects[boxNum][2] = EditorGUI.ObjectField(ra2, givenR2.GetAudioResponse(), typeof(UnityEngine.Object), true);
        }
        else
        {
            audioObjects[boxNum][2] = EditorGUI.ObjectField(ra2, audioObjects[boxNum][2], typeof(UnityEngine.Object), true);
        }

        if (EditorGUI.EndChangeCheck())
        {
            givenR2.SetAudioResponse(((AudioClip)audioObjects[boxNum][2]).name);
        }

        if (GUI.Button(rab2, "Play") && audioObjects[boxNum][2] != null)
        {
            PlayAudioClip((AudioClip)audioObjects[boxNum][2]);
        }

        //RESPONSE 3 AUDIO OBJ
        EditorGUI.BeginChangeCheck();
        if (audioObjects[boxNum][3] == null && givenR3 != null)
        {
            audioObjects[boxNum][3] = EditorGUI.ObjectField(ra3, givenR3.GetAudioResponse(), typeof(UnityEngine.Object), true);
        }
        else
        {
            audioObjects[boxNum][3] = EditorGUI.ObjectField(ra3, audioObjects[boxNum][3], typeof(UnityEngine.Object), true);
        }

        if (EditorGUI.EndChangeCheck())
        {
            givenR3.SetAudioResponse(((AudioClip)audioObjects[boxNum][3]).name);
        }

        if (GUI.Button(rab3, "Play") && audioObjects[boxNum][3] != null)
        {
            PlayAudioClip((AudioClip)audioObjects[boxNum][3]);
        }


        //set response to user updated values (null checks may not be necessary anymore)
        if (givenR1 != null)
        {
            givenR1.SetResponse(response1);
        }

        if (givenR2 != null)
        {
            givenR2.SetResponse(response2);
        }

        if (givenR3 != null)
        {
            givenR3.SetResponse(response3);
        }

        //if dialogue exists, check if we need to add follow nodes to tree
        if (givenNode.GetDialogue() != null && givenNode.GetDialogue() != "")
        {
            if (givenR1 == null)
            {
                tree.Add(response1, null, givenNode, 0);
            }

            if (givenR2 == null)
            {
                tree.Add(response2, null, givenNode, 1);
            }

            if (givenR3 == null)
            {
                tree.Add(response3, null, givenNode, 2);
            }
        }

        //draw connecting lines
        if (givenR1 != null && response1 != "")
        {
            DrawLine(0);
        }

        if (givenR2 != null && response2 != "")
        {
            DrawLine(1);
        }

        if (givenR3 != null && response3 != "")
        {
            DrawLine(2);
        }
    }