/// <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));
        }
예제 #2
0
        /// <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));
        }
예제 #5
0
        /// <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);
        }