Пример #1
0
        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();
        }
Пример #2
0
        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);
                }
            }
        }
Пример #4
0
 public void VisitNodeResponseDialogue(NodeResponseDialogue nrd)
 {
     UsedCharacters.Add(nrd.Character);
 }