public void VisitNodeResponseDialogue(NodeResponseDialogue nrd) { _writer.WriteStartElement("NodeResponseDialogue"); if (nrd.Character != null) { _writer.WriteAttributeString("Character", _projectService.Characters.IndexOf(nrd.Character).ToString()); } _writer.WriteStartElement("Dialogue"); _writer.WriteString(nrd.Dialogue ?? string.Empty); _writer.WriteEndElement(); _writer.WriteStartElement("ResponseMap"); foreach (var keyPair in nrd.ResponseMap) { _writer.WriteStartElement("Response"); if (keyPair.Target != null && _nodeMapping.ContainsKey(keyPair.Target)) { var nodeId = _nodeMapping[keyPair.Target]; _writer.WriteAttributeString("TargetNode", nodeId.ToString()); } _writer.WriteString(keyPair.Text ?? string.Empty); _writer.WriteEndElement(); } _writer.WriteEndElement(); _writer.WriteEndElement(); }
public void VisitNodeResponseDialogue(NodeResponseDialogue nrd) { UsedCharacters.Add(nrd.Character); var targetIndex = _scene.Nodes.IndexOf(nrd.ResponseMap[0].Target); if (targetIndex == -1) { Report.AddMessage(ProjectReportMessage.MessageSeverity.Error, "Extra ferocious raptors dispatched.", nrd); Running = false; } Position = targetIndex; foreach (var response in nrd.ResponseMap.Skip(1)) { var target = _scene.Nodes.IndexOf(response.Target); if (target == -1) { Report.AddMessage(ProjectReportMessage.MessageSeverity.Error, "Extra ferocious raptors dispatched.", nrd); continue; } var clone = Clone(); clone.Position = target; _parent.AddInterpreter(clone); } }
public void VisitNodeResponseDialogue(NodeResponseDialogue nrd) { if (nrd.Character == null) { _report.AddMessage(ProjectReportMessage.MessageSeverity.Error, "A response dialogue node has no assigned character.", nrd); } if (string.IsNullOrWhiteSpace(nrd.Dialogue)) { _report.AddMessage(ProjectReportMessage.MessageSeverity.Warning, "A response dialogue node has no assigned text.", nrd); } if (Regex.IsMatch(nrd.Dialogue, @"[^\x00-\x7F]")) { _report.AddMessage(ProjectReportMessage.MessageSeverity.Error, "A response dialogue node contains non-ASCII characters.", nrd); } if (nrd.Dialogue?.Length > 180) { _report.AddMessage(ProjectReportMessage.MessageSeverity.Warning, "A response dialogue node has more than 180 characters of text.", nrd); } if (nrd.Dialogue?.Split('\n').Length > 3) { _report.AddMessage(ProjectReportMessage.MessageSeverity.Warning, "A response dialogue node has more than 3 lines of text.", nrd); } if (nrd.ResponseMap.Count == 0) { _report.AddMessage(ProjectReportMessage.MessageSeverity.Error, "A response dialogue node has no options.", nrd); } foreach (var keyPair in nrd.ResponseMap) { if (keyPair.Target == null || !_nodeMap.ContainsKey(keyPair.Target)) { _report.AddMessage(ProjectReportMessage.MessageSeverity.Error, "A response dialogue node has an invalid target.", nrd); } else if (keyPair.Target == nrd) { _report.AddMessage(ProjectReportMessage.MessageSeverity.Error, "A response dialogue node has itself as the target.", nrd); } else { var responseOriginScene = _nodeMap[keyPair.Target].SceneId; var responseTargetScene = _nodeMap[keyPair.Target].SceneId; if (responseOriginScene != responseTargetScene) { _report.AddMessage(ProjectReportMessage.MessageSeverity.Error, "Please refer to https://xkcd.com/292/ for additional help.", nrd); } } if (string.IsNullOrWhiteSpace(keyPair.Text)) { _report.AddMessage(ProjectReportMessage.MessageSeverity.Warning, "A response dialogue node has no assigned text.", nrd); } } }
public void VisitNodeResponseDialogue(NodeResponseDialogue nrd) { UsedCharacters.Add(nrd.Character); }