private string ParseDialogueElement(JsonTextReader reader) { string id = null, optionText = null; bool entrypoint = false; DialoguePrecondition pre = null; ICollection <string> options = null, body = null; DialoguePostcondition post = null; while (reader.Read()) { Spit(reader); if (reader.TokenType == JsonToken.PropertyName) { string propertyValue = reader.Value.ToString().ToLower(); reader.Read(); Spit(reader); switch (propertyValue) { case "id": if (reader.TokenType == JsonToken.String) { id = (string)reader.Value; } else { throw new JsonReaderException("Unexpected element when parsing dialogue element id: " + reader.TokenType); } break; case "option_text": if (reader.TokenType == JsonToken.String) { optionText = (string)reader.Value; } else { throw new JsonReaderException("Unexpected element when parsing dialogue element option text: " + reader.TokenType); } break; case "entrypoint": if (reader.TokenType == JsonToken.Boolean) { entrypoint = (bool)reader.Value; } else { throw new JsonReaderException("Unexpected element when parsing dialogue element option text: " + reader.TokenType); } break; case "pre": if (reader.TokenType == JsonToken.StartObject) { pre = ParsePrecondition(reader); } else { throw new JsonReaderException("Unexpected element when parsing dialogue element precondition: " + reader.TokenType); } break; case "body": if (reader.TokenType == JsonToken.StartArray) { List <string> bodyElements = new List <string>(); reader.Read(); Spit(reader); while (reader.TokenType != JsonToken.EndArray) { if (reader.TokenType == JsonToken.String) { bodyElements.Add((string)reader.Value); } else { throw new JsonReaderException("Unexpected element when parsing dialogue element body: " + reader.TokenType); } reader.Read(); Spit(reader); } body = bodyElements.ToArray(); } else if (reader.TokenType == JsonToken.String) { body = new string[] { (string)reader.Value }; } else { throw new JsonReaderException("Unexpected element when parsing dialogue element body: " + reader.TokenType); } break; case "options": if (reader.TokenType == JsonToken.StartArray) { options = ParseOptions(reader); } else { throw new JsonReaderException("Unexpected element when parsing dialogue element options: " + reader.TokenType); } break; case "post": if (reader.TokenType == JsonToken.StartObject) { post = ParsePostcondition(reader); } else { throw new JsonReaderException("Unexpected element when parsing dialogue element postcondition: " + JsonToken.PropertyName); } break; default: throw new JsonReaderException("Unexpected property name when parsing dialogue element: " + propertyValue); } } else if (reader.TokenType == JsonToken.EndObject) { if (null == id) { throw new JsonReaderException("No id found when parsing dialogue element"); } if (null == body) { throw new JsonReaderException("No body elements found for dialogue element " + id); } dialogueElements.Add( id, new UnresolvedDialogueElement( id, entrypoint, optionText, pre, body.ToArray(), options == null ? null : options.ToArray(), post)); return(id); } else { throw new JsonReaderException("Unexpected element when parsing dialogue element: " + reader.TokenType); } } throw new JsonReaderException("Unexpected EOF when parsing dialogue element"); }
public UnresolvedDialogueElement(string id, bool entrypoint, string optionText, DialoguePrecondition pre, string[] body, string[] unresolvedOptions, DialoguePostcondition post) { this.id = id; this.entrypoint = entrypoint; this.optionText = optionText; this.pre = pre; this.body = body; this.unresolvedOptions = unresolvedOptions; this.post = post; }