private NovelAsset Parse(Parser <VsnRow> parser, string csvData, NovelAsset asset, List <string> languages) { var enumerator = parser.Parse(csvData).GetEnumerator(); var row = 0; var error = string.Empty; var logger = new StringBuilder(); var goToList = new List <string>(); ConversationRow conversation = null; DialogueRow dialogue = null; while (enumerator.MoveNext()) { if (!enumerator.Current.IsValid) { error = enumerator.Current.Error.ToString(); break; } var vsnRow = enumerator.Current.Result; row = enumerator.Current.RowIndex + 1; (conversation, dialogue) = vsnRow.Parse(asset, conversation, dialogue, languages, row, goToList, this.commandParser, this.intArrayParser, logger); if (vsnRow.IsError) { error = vsnRow.Error; break; } } if (!string.IsNullOrEmpty(error)) { Debug.LogError($"Vsn row {row}: {error}"); return(null); } if (logger.Length > 0) { Debug.LogError(logger); } return(asset); }
public (ConversationRow, DialogueRow) Parse(INovelData data, ConversationRow conversation, DialogueRow dialogue, in Segment <string> languages, int row,
private DialogueElement CreateDialogueGUI(VisualElement root, ConversationRow conversation, DialogueRow dialogue, IList <ContentElement> contents, string language) { var dialogueElem = new DialogueElement(); var idElem = new IdElement { value = dialogue.Id }; dialogueElem.Header.Add(idElem); var defaultChoiceData = dialogue.GetChoice(0); if (defaultChoiceData != null) { CreateDefaultChoiceGUI(dialogueElem, conversation, defaultChoiceData, contents, language); } if (dialogue.Choices.Count > 1) { var choiceContainer = new ChoiceContainer(); choiceContainer.Add(new Label("Choices")); var first = true; foreach (var kv in dialogue.Choices) { if (kv.Value.Id == 0) { continue; } var choiceElem = CreateChoiceGUI(choiceContainer, conversation, kv.Value, contents, language); if (first) { first = false; choiceElem.style.marginTop = 0; } } dialogueElem.Add(choiceContainer); } if (!dialogue.IsEnd()) { var sb = new StringBuilder(); var delayElem = new DelayElement("Delay") { value = dialogue.Delay.ToString() }; dialogueElem.Add(delayElem); var speakerElem = new SpeakerElement("Speaker") { value = dialogue.Speaker }; dialogueElem.Add(speakerElem); if (HasActors(dialogue)) { CreateCharacterTableGUI(dialogueElem, out var columnContainerElem); CreateCharacterList <ActorColumnElement>(columnContainerElem, "Actor", dialogue.Actor1, dialogue.Actor2, dialogue.Actor3, dialogue.Actor4); CreateCharacterList <ActionColumnElement>(columnContainerElem, "Actions", dialogue.Actions1.BuildString(sb), dialogue.Actions2.BuildString(sb), dialogue.Actions3.BuildString(sb), dialogue.Actions4.BuildString(sb)); } var highlightElem = new HighlightElement("Highlight") { value = dialogue.Highlight.BuildString(sb) }; dialogueElem.Add(highlightElem); } if (dialogue.CommandsOnStart.Count > 0 || dialogue.CommandsOnEnd.Count > 0) { CreateCommandTableGUI(dialogueElem, dialogue.CommandsOnStart, dialogue.CommandsOnEnd); } root.Add(dialogueElem); return(dialogueElem); }
private bool HasActors(DialogueRow dialogue) => !(string.IsNullOrEmpty(dialogue.Actor1) && string.IsNullOrEmpty(dialogue.Actor2) && string.IsNullOrEmpty(dialogue.Actor3) && string.IsNullOrEmpty(dialogue.Actor4));