/// <summary> /// Builds a parent text preview for the a dialog step /// </summary> /// <param name="child">Child node</param> /// <param name="parent">Parent</param> /// <param name="npc">Npc to which the dialog belongs</param> /// <param name="errorCollection">Error Collection</param> /// <returns>Parent text preview for the dialog step</returns> public async Task <string> BuildParentTextPreview(ExportDialogData child, ExportDialogData parent, KortistoNpc npc, ExportPlaceholderErrorCollection errorCollection) { ConditionNode conditionNode = parent.Condition; if (conditionNode == null) { return(null); } List <string> previewForConditions = new List <string>(); foreach (Condition curCondition in conditionNode.Conditions) { ExportDialogDataChild childObj = parent.Children.FirstOrDefault(c => c.NodeChildId == curCondition.Id); if (childObj == null || childObj.Child != child) { continue; } string conditionText = await _conditionRenderer.RenderCondition(_project, curCondition, _errorCollection, npc, _exportSettings); previewForConditions.Add(ExportUtil.BuildTextPreview(conditionText)); } if (parent.Children.Any(c => c.Child == child && c.NodeChildId == ExportConstants.ConditionElseNodeChildId)) { previewForConditions.Add("else"); } return(string.Join(", ", previewForConditions)); }
/// <summary> /// Maps a single choice /// </summary> /// <param name="data">Dialog Step Data</param> /// <param name="choice">Choice to map</param> /// <param name="npc">Npc object to which the dialog belongs</param> /// <param name="parentChoiceData">Choice data to which the choices belong</param> /// <returns>Mapped choice</returns> private async ValueTask <ScribanChoiceOption> MapSingleChoice(ExportDialogData data, TaleChoice choice, KortistoNpc npc, ScribanChoice parentChoiceData) { ExportDialogDataChild choiceData = data.Children.FirstOrDefault(c => c.NodeChildId == choice.Id); ScribanDialogStepBaseData childRenderData = null; if (choiceData != null && choiceData.Child != null) { childRenderData = new ScribanDialogStepBaseData(); SetRenderObjectBaseDataFromFlexFieldObject(childRenderData, choiceData.Child, npc); } ScribanChoiceOption choiceOption = new ScribanChoiceOption(); choiceOption.ChildNode = childRenderData; choiceOption.Id = choice.Id; choiceOption.Text = ExportUtil.EscapeCharacters(choice.Text, _exportSettings.EscapeCharacter, _exportSettings.CharactersNeedingEscaping, _exportSettings.NewlineCharacter); choiceOption.UnescapedText = choice.Text; choiceOption.TextPreview = ExportUtil.BuildTextPreview(choice.Text); choiceOption.IsRepeatable = choice.IsRepeatable; choiceOption.Condition = null; if (choice.Condition != null && !string.IsNullOrEmpty(choice.Condition.ConditionElements)) { choiceOption.Condition = await _conditionRenderer.RenderCondition(_project, choice.Condition, _errorCollection, npc, _exportSettings); } choiceOption.ParentChoice = parentChoiceData; return(choiceOption); }
/// <summary> /// Builds a condition string /// </summary> /// <param name="condition">Condition</param> /// <param name="npc">Npc to which the dialog belongs</param> /// <returns>Condition string</returns> private string BuildCondition(Condition condition, KortistoNpc npc) { if (condition == null || string.IsNullOrEmpty(condition.ConditionElements)) { _errorCollection.AddDialogConditionMissing(); return(string.Empty); } return(_conditionRenderer.RenderCondition(_project, condition, _errorCollection, npc, _exportSettings).Result); }
/// <summary> /// Builds a condition string /// </summary> /// <param name="condition">Condition</param> /// <param name="flexFieldObject">Flex field object to which the dialog belongs</param> /// <returns>Condition string</returns> private async Task <string> BuildCondition(Condition condition, FlexFieldObject flexFieldObject) { if (condition == null || string.IsNullOrEmpty(condition.ConditionElements)) { _errorCollection.AddDialogConditionMissing(); return(string.Empty); } return(await _conditionRenderer.RenderCondition(_project, condition, _errorCollection, flexFieldObject, _exportSettings)); }
/// <summary> /// Builds a condition entry /// </summary> /// <param name="childElement">Dialog child element</param> /// <param name="flexFieldObject">Flex field object to which the dialog belongs</param> /// <param name="condition">Condition to map</param> /// <returns>Mapped condition</returns> private async Task <ScribanConditionEntry> BuildConditionEntry(ExportDialogDataChild childElement, FlexFieldObject flexFieldObject, Condition condition) { ScribanConditionEntry conditionEntry = new ScribanConditionEntry(); conditionEntry.Id = condition.Id; conditionEntry.Condition = await _conditionRenderer.RenderCondition(_project, condition, _errorCollection, flexFieldObject, _exportSettings); conditionEntry.ChildNode = null; if (childElement != null && childElement.Child != null) { ScribanDialogStepBaseData childData = new ScribanDialogStepBaseData(); SetRenderObjectBaseDataFromFlexFieldObject(childData, childElement.Child, flexFieldObject); conditionEntry.ChildNode = childData; } return(conditionEntry); }