コード例 #1
0
        void ContinueDialogue(int selection)
        {
            Debug.Log("Dialogue Advance");
            int outputsCount = m_CurrentDialogueNode.m_outputs.Count;

            Debug.Log("just closed dialogue node: " + m_CurrentDialogueNode.m_characterDialogue);
            Debug.Log("selection: " + selection);
            if (outputsCount > 0 && selection < outputsCount)
            {
                m_CurrentDialogueNode = m_CurrentDialogue.m_dialogNodes[m_CurrentDialogueNode.m_outputs[selection].m_targetNode];
                Debug.Log("next dialogue node: " + m_CurrentDialogueNode.m_characterDialogue);
                outputsCount = m_CurrentDialogueNode.m_outputs.Count;
                if (outputsCount > 1)
                {
                    var dialogueChoices = new string[outputsCount];
                    Debug.Log("Outputs count: " + outputsCount);
                    for (int i = 0; i < outputsCount; i++)
                    {
                        Debug.Log("dialogChoices[" + i + "]: ");
                        Debug.Log(m_CurrentDialogueNode.m_outputDialogs[i]);
                        dialogueChoices[i] = m_CurrentDialogueNode.m_outputDialogs[i];
                    }
                    AdventureGameOverlayManager.Instance.DisplayDialogueOptions(dialogueChoices, m_CurrentDialogueNode.m_characterDialogue, ContinueDialogue);
                }
                else
                {
                    AdventureGameOverlayManager.Instance.DisplayCharacterDialogue(m_CurrentDialogueNode.m_characterDialogue, m_CurrentDialogueNode.m_speakingCharacterName, ContinueDialogue);
                }
            }
            else
            {
                EndDialogue();
            }
        }
コード例 #2
0
        DialogueNode DeserializeNode(SerializableDialogData.SerializableDialogNode graphNode)
        {
            DialogueNode node = graphNode.m_title == "START" ? CreateStartNode() : CreateDialogueNode(graphNode.m_title, 0, 0);
            Rect         temp = new Rect(graphNode.m_position, new Vector2(1, 1));

            node.SetPosition(temp);
            return(node);
        }
コード例 #3
0
 void EndDialogue()
 {
     Debug.Log("Dialogue End");
     m_CurrentDialogue     = null;
     m_CurrentDialogueNode = null;
     if (m_DialogueEnd != null)
     {
         m_DialogueEnd();
     }
     m_DialogueEnd = null;
 }
コード例 #4
0
 public void StartDialogue(SerializableDialogData dialogue, Action onDialogueEnd = null)
 {
     if (m_CurrentDialogue == null)
     {
         Debug.Log("Dialogue Start");
         m_CurrentDialogue = dialogue;
         int startIndex = 0;
         for (int i = 0; i < dialogue.m_dialogNodes.Count; ++i)
         {
             if (dialogue.m_dialogNodes[i].m_title == "START")
             {
                 startIndex = i;
                 break;
             }
         }
         m_CurrentDialogueNode = dialogue.m_dialogNodes[startIndex];
         m_DialogueEnd         = onDialogueEnd;
         ContinueDialogue();
     }
 }
コード例 #5
0
        public void SaveGraphData()
        {
            if (m_DialogData == null)
            {
                return;
            }

            List <Node> nodes = m_GraphView.nodes.ToList();

            SerializableDialogData dialogGraphData = ScriptableObject.CreateInstance <SerializableDialogData>();

            dialogGraphData.m_dialogNodes = new List <SerializableDialogData.SerializableDialogNode>();

            string outPutString = string.Empty;

            for (int i = 0; i < nodes.Count; ++i)
            {
                SerializableDialogData.SerializableDialogNode dialogGraphNode =
                    new SerializableDialogData.SerializableDialogNode();
                Node currentNode = nodes[i];

                dialogGraphNode.inputNodeCount  = currentNode.inputContainer.childCount;
                dialogGraphNode.outputNodeCount = currentNode.outputContainer.childCount;

                dialogGraphNode.m_title         = currentNode.title;
                dialogGraphNode.m_position      = currentNode.GetPosition().position;
                dialogGraphNode.m_outputs       = new List <SerializableDialogData.SerializableDialogEdge>();
                dialogGraphNode.m_outputDialogs = new List <string>();

                foreach (VisualElement element in currentNode.mainContainer)
                {
                    if (element is TextField)
                    {
                        if (((TextField)element).name == "characterName")
                        {
                            dialogGraphNode.m_speakingCharacterName = ((TextField)element).value;
                        }
                        else if (((TextField)element).name == "characterDialogue")
                        {
                            dialogGraphNode.m_characterDialogue = ((TextField)element).value;
                        }
                    }
                }

                foreach (VisualElement element in currentNode.outputContainer)
                {
                    if (element.childCount > 1 && element[0] is TextField)
                    {
                        outPutString = ((TextField)element[0]).value;
                        dialogGraphNode.m_outputDialogs.Add(outPutString);
                    }

                    if (element.childCount > 1 && element[1] is Port)
                    {
                        foreach (Edge edge in ((Port)element[1]).connections)
                        {
                            SerializableDialogData.SerializableDialogEdge serializedEdge =
                                new SerializableDialogData.SerializableDialogEdge();

                            var sourceContainer = currentNode.outputContainer.First(e => e[1] == edge.output);
                            serializedEdge.m_sourcePort = sourceContainer == null ? -1 : currentNode.outputContainer.IndexOf(sourceContainer);
                            serializedEdge.m_targetPort = edge.input.node.inputContainer.IndexOf(edge.input);
                            serializedEdge.m_targetNode = nodes.IndexOf(edge.input.node);
                            if (serializedEdge.m_sourcePort == -1 || serializedEdge.m_targetPort == -1)
                            {
                                continue;
                            }

                            dialogGraphNode.m_outputs.Add(serializedEdge);
                        }
                    }
                }

                dialogGraphData.m_dialogNodes.Add(dialogGraphNode);
            }

            EditorUtility.CopySerialized(dialogGraphData, m_DialogData);
            AssetDatabase.SaveAssets();
        }