private static void saveNode(DialogNode node, ref XmlElement xmlEl, ref XmlDocument xmlDoc) { XmlElement xmlChildEl = xmlDoc.CreateElement("dialogNode"); xmlChildEl.SetAttribute("id", node.id); xmlChildEl.SetAttribute("npcPhrase", node.npcDialog); xmlChildEl.SetAttribute("voiceFile", node.npcVoiceFile); DialogResponse[] responses = node.getResponses(); for (int j = 0; j < responses.Length; j++) { DialogResponse response = responses[j]; XmlElement responseXE = xmlDoc.CreateElement("response"); responseXE.SetAttribute("pcPhrase", response.response); responseXE.SetAttribute("link", response.link); responseXE.SetAttribute("linkType", response.linkType.ToString()); responseXE.SetAttribute("switchConversation", response.switchConversation); responseXE.SetAttribute("onlyAllowOnce", response.onlyAllowOnce.ToString()); xmlChildEl.AppendChild(responseXE); if (response.childNode != null) saveNode(response.childNode, ref responseXE, ref xmlDoc); } xmlEl.AppendChild(xmlChildEl); }
public NPCPhrase(ref DialogNode npcMsg) { InitializeComponent(); this.npcMsg = npcMsg; this.CancelButton = cancelButton; }
private static DialogNode loadNode(XmlElement xmlEl, ref Conversation conversation) { string id = xmlEl.GetAttribute("id"); string npcPhrase = xmlEl.GetAttribute("npcPhrase"); string voiceFile = xmlEl.GetAttribute("voiceFile"); DialogNode node = new DialogNode(id, npcPhrase, voiceFile); XmlNodeList responsesXNL = xmlEl.ChildNodes; for (int j = 0; j < responsesXNL.Count; j++) { XmlElement responseXE = (XmlElement)responsesXNL[j]; string pcPhrase = responseXE.GetAttribute("pcPhrase"); string link = responseXE.GetAttribute("link"); ResponseLinkType linkType = ResponseLinkType.dialogNode; if (responseXE.GetAttribute("linkType"). Equals("dialogNode")) linkType = ResponseLinkType.dialogNode; else if (responseXE.GetAttribute("linkType"). Equals("endConversation")) linkType = ResponseLinkType.endConversation; else linkType = ResponseLinkType.endAndChangeConversation; string switchConv = responseXE. GetAttribute("switchConversation"); bool onlyAllowOnce = bool.Parse(responseXE. GetAttribute("onlyAllowOnce")); DialogResponse response = new DialogResponse(pcPhrase, link, onlyAllowOnce, linkType, switchConv); node.addResponse(response); if (responseXE.HasChildNodes) { XmlElement childNode = (XmlElement)responseXE.FirstChild; DialogNode dn = loadNode(childNode, ref conversation); response.childNode = dn; conversation.addDialogNode(dn); } } return node; }
private void addNPCPhraseMiClicked(Object sender, EventArgs e) { DialogResponse selectedResponse = null; if (treeListView.SelectedObject != null && treeListView.SelectedObject is DialogResponse) { selectedResponse = (DialogResponse)treeListView.SelectedObject; if (selectedResponse.childNode != null) { DialogResult result; result = MessageBox.Show("PC phrase already contains NPC"+ " phrase. Do you want to replace it?", "Replacement", MessageBoxButtons.YesNo, MessageBoxIcon.Question); if (result != DialogResult.Yes) return; } } DialogNode npcMsg = new DialogNode("", ""); Form addNPCPhraseForm = new NPCPhrase(ref npcMsg); addNPCPhraseForm.ShowDialog(this); if (npcMsg.npcDialog.Equals("")) return; if (selectedResponse == null) { conversation.addRootNode(npcMsg); treeListView.AddObject(npcMsg); } else { selectedResponse.childNode = npcMsg; selectedResponse.link = npcMsg.id; conversation.addDialogNode(npcMsg); treeListView.RefreshObject(selectedResponse); treeListView.Expand(selectedResponse); } if (!changesMade) this.Text = this.Text + "*"; changesMade = true; }
private List<DialogResponse> getResponses(DialogNode node) { List<DialogResponse> responses = new List<DialogResponse>(); foreach (DialogResponse r in node.getResponses()) { responses.Add(r); if (r.childNode != null) responses.AddRange(getResponses(r.childNode)); } return responses; }
public void removeRootNode(DialogNode dialogNode) { rootNodes.Remove(dialogNode); dialog.Remove(dialogNode); }
public void removeNode(DialogNode dialogNode) { dialog.Remove(dialogNode); }
public void addDialogNode(DialogNode dialogNode) { dialog.Add(dialogNode); }
public void addRootNode(DialogNode dialogNode) { rootNodes.Add(dialogNode); dialog.Add(dialogNode); }
public Conversation(String npcName, DialogNode[] dialogNodes): this(npcName) { //dialog.AddRange(dialogNodes); rootNodes.AddRange(dialogNodes); }