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(); } }
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); }
void EndDialogue() { Debug.Log("Dialogue End"); m_CurrentDialogue = null; m_CurrentDialogueNode = null; if (m_DialogueEnd != null) { m_DialogueEnd(); } m_DialogueEnd = null; }
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(); } }
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(); }