/// <summary> /// Fills the placeholders of a code /// </summary> /// <param name="templateType">Template Type</param> /// <param name="code">Code to fill</param> /// <param name="data">Export Data</param> /// <returns>Filled Code</returns> public async Task <ExportPlaceholderFillResult> FillPlaceholders(TemplateType templateType, string code, ExportObjectData data) { ExportPlaceholderErrorCollection errorCollection = new ExportPlaceholderErrorCollection(_localizerFactory); Template parsedTemplate = ScribanParsingUtil.ParseTemplate(code, errorCollection); if (parsedTemplate != null) { ScriptObject exportObject = await BuildScriptObject(templateType, parsedTemplate, data, errorCollection); TemplateContext context = BuildTemplateContext(exportObject, errorCollection); try { code = await parsedTemplate.RenderAsync(context); } catch (Exception ex) { errorCollection.AddException(ex); } } ExportPlaceholderFillResult result = new ExportPlaceholderFillResult(); result.Code = code; result.Errors = errorCollection; return(result); }
/// <summary> /// Constructor /// </summary> /// <param name="errorValue">Error value</param> /// <param name="missingFieldName">Missing field name for the error collection</param> /// <param name="parentObject">Parent scriban object</param> /// <param name="errorCollection">Error collection</param> public ScribanMissingFlexFieldField(string errorValue, string missingFieldName, ScribanFlexFieldObject parentObject, ExportPlaceholderErrorCollection errorCollection) : base(parentObject) { ErrorValue = errorValue; _missingFieldName = missingFieldName; _errorCollection = errorCollection; Exists = false; }
/// <summary> /// Constructor /// </summary> /// <param name="nodeGraphParser">Node graph parser</param> public NodeGraphExporter(INodeGraphParser nodeGraphParser) { _nodeGraphParser = nodeGraphParser; _nodeGraphFunctionGenerator = null; _nodeGraphRenderer = null; _errorCollection = null; }
/// <summary> /// Constructor /// </summary> /// <param name="errorCollection">Error Collection</param> /// <param name="defaultTemplateProvider">Default Template Provider</param> /// <param name="cachedDbAccess">Cached Db Access</param> /// <param name="languageKeyGenerator">Language Key Generator</param> /// <param name="localizerFactory">Localizer Factory</param> /// <param name="exportSettings">Export Settings</param> /// <param name="project">Project</param> public ExportDialogActionRenderer(ExportPlaceholderErrorCollection errorCollection, ICachedExportDefaultTemplateProvider defaultTemplateProvider, IExportCachedDbAccess cachedDbAccess, ILanguageKeyGenerator languageKeyGenerator, IStringLocalizerFactory localizerFactory, ExportSettings exportSettings, GoNorthProject project) : base(errorCollection, localizerFactory) { _defaultTemplateProvider = defaultTemplateProvider; _languageKeyGenerator = languageKeyGenerator; _localizer = localizerFactory.Create(typeof(ExportDialogActionRenderer)); _exportSettings = exportSettings; _project = project; _actionRenderes = new Dictionary <ActionType, IActionRenderer>(); _actionRenderes.Add(ActionType.ChangePlayerValue, new NpcValueChangeRenderer(defaultTemplateProvider, cachedDbAccess, languageKeyGenerator, localizerFactory, true)); _actionRenderes.Add(ActionType.ChangeNpcValue, new NpcValueChangeRenderer(defaultTemplateProvider, cachedDbAccess, languageKeyGenerator, localizerFactory, false)); _actionRenderes.Add(ActionType.SpawnItemInPlayerInventory, new InventoryActionRenderer(defaultTemplateProvider, cachedDbAccess, languageKeyGenerator, localizerFactory, true, false)); _actionRenderes.Add(ActionType.TransferItemToPlayerInventory, new InventoryActionRenderer(defaultTemplateProvider, cachedDbAccess, languageKeyGenerator, localizerFactory, true, true)); _actionRenderes.Add(ActionType.SpawnItemInNpcInventory, new InventoryActionRenderer(defaultTemplateProvider, cachedDbAccess, languageKeyGenerator, localizerFactory, false, false)); _actionRenderes.Add(ActionType.TransferItemToNpcInventory, new InventoryActionRenderer(defaultTemplateProvider, cachedDbAccess, languageKeyGenerator, localizerFactory, false, true)); _actionRenderes.Add(ActionType.ChangeQuestValue, new QuestValueChangeRenderer(defaultTemplateProvider, cachedDbAccess, languageKeyGenerator, localizerFactory)); _actionRenderes.Add(ActionType.ChangeQuestState, new SetQuestStateActionRenderer(defaultTemplateProvider, cachedDbAccess, languageKeyGenerator, localizerFactory)); _actionRenderes.Add(ActionType.AddQuestText, new AddQuestTextRenderer(defaultTemplateProvider, cachedDbAccess, languageKeyGenerator, localizerFactory)); _actionRenderes.Add(ActionType.Wait, new WaitActionRenderer(defaultTemplateProvider, localizerFactory)); _actionRenderes.Add(ActionType.ChangePlayerState, new ChangeNpcStateActionRenderer(defaultTemplateProvider, cachedDbAccess, languageKeyGenerator, localizerFactory, true)); _actionRenderes.Add(ActionType.ChangeNpcState, new ChangeNpcStateActionRenderer(defaultTemplateProvider, cachedDbAccess, languageKeyGenerator, localizerFactory, false)); _actionRenderes.Add(ActionType.PlayerLearnSkill, new LearnForgetSkillActionRenderer(defaultTemplateProvider, cachedDbAccess, languageKeyGenerator, localizerFactory, true, true)); _actionRenderes.Add(ActionType.PlayerForgetSkill, new LearnForgetSkillActionRenderer(defaultTemplateProvider, cachedDbAccess, languageKeyGenerator, localizerFactory, true, false)); _actionRenderes.Add(ActionType.NpcLearnSkill, new LearnForgetSkillActionRenderer(defaultTemplateProvider, cachedDbAccess, languageKeyGenerator, localizerFactory, false, true)); _actionRenderes.Add(ActionType.NpcForgetSkill, new LearnForgetSkillActionRenderer(defaultTemplateProvider, cachedDbAccess, languageKeyGenerator, localizerFactory, false, false)); _actionRenderes.Add(ActionType.ChangePlayerSkillValue, new SkillValueChangeRenderer(defaultTemplateProvider, cachedDbAccess, languageKeyGenerator, localizerFactory, true)); _actionRenderes.Add(ActionType.ChangeNpcSkillValue, new SkillValueChangeRenderer(defaultTemplateProvider, cachedDbAccess, languageKeyGenerator, localizerFactory, false)); _actionRenderes.Add(ActionType.PersistDialogState, new PersistDialogStateActionRenderer(defaultTemplateProvider)); _actionRenderes.Add(ActionType.OpenShop, new OpenShopActionRenderer(defaultTemplateProvider)); }
/// <summary> /// Sets the error collection /// </summary> /// <param name="errorCollection">Error Collection</param> public void SetErrorCollection(ExportPlaceholderErrorCollection errorCollection) { // Ensure to use most outer error collection if (_errorCollection == null) { _errorCollection = errorCollection; } }
/// <summary> /// Constructor /// </summary> /// <param name="templatePlaceholderResolver">Template placeholder resolver</param> /// <param name="exportCachedDbAccess">Export cached database access</param> /// <param name="defaultTemplateProvider">Default template provider</param> /// <param name="errorCollection">Error collection</param> public DailyRoutineEventFunctionListRenderer(IExportTemplatePlaceholderResolver templatePlaceholderResolver, IExportCachedDbAccess exportCachedDbAccess, ICachedExportDefaultTemplateProvider defaultTemplateProvider, ExportPlaceholderErrorCollection errorCollection) { _templatePlaceholderResolver = templatePlaceholderResolver; _exportCachedDbAccess = exportCachedDbAccess; _defaultTemplateProvider = defaultTemplateProvider; _errorCollection = errorCollection; }
/// <summary> /// Constructor /// </summary> /// <param name="templatePlaceholderResolver">Template placeholder resolver</param> /// <param name="exportCachedDbAccess">Export cached database access</param> /// <param name="defaultTemplateProvider">Default template provider</param> /// <param name="errorCollection">Error collection</param> public StateMachineFunctionPipeRenderer(IExportTemplatePlaceholderResolver templatePlaceholderResolver, IExportCachedDbAccess exportCachedDbAccess, ICachedExportDefaultTemplateProvider defaultTemplateProvider, ExportPlaceholderErrorCollection errorCollection) { _templatePlaceholderResolver = templatePlaceholderResolver; _exportCachedDbAccess = exportCachedDbAccess; _defaultTemplateProvider = defaultTemplateProvider; _errorCollection = errorCollection; }
/// <summary> /// Builds the template context /// </summary> /// <param name="exportObject">Export script object</param> /// <param name="errorCollection">Error collection</param> /// <returns>Template context</returns> private TemplateContext BuildTemplateContext(ScriptObject exportObject, ExportPlaceholderErrorCollection errorCollection) { TemplateContext context = new TemplateContext(); context.TemplateLoader = new ScribanIncludeTemplateLoader(_exportCachedDbAccess, errorCollection); context.PushGlobal(exportObject); return(context); }
/// <summary> /// Returns true if a node is of a certain type /// </summary> /// <param name="dialogData">Dialog Data</param> /// <param name="nodeType">Node Type</param> /// <param name="errorCollection">Error Collection to send errors to</param> /// <returns>true if node is of searched type</returns> private bool IsNodeOfType(ExportDialogData dialogData, string nodeType, ExportPlaceholderErrorCollection errorCollection) { if (string.IsNullOrEmpty(nodeType)) { return(false); } return(nodeType.ToLowerInvariant() == GetNodeType(dialogData, errorCollection).ToLowerInvariant()); }
/// <summary> /// Constructor /// </summary> /// <param name="templatePlaceholderResolver">Template placeholder resolver</param> /// <param name="exportCachedDbAccess">Export cached database access</param> /// <param name="defaultTemplateProvider">Default template provider</param> /// <param name="errorCollection">Error collection</param> /// <param name="exportObjectData">Export object data</param> public DialogFunctionRenderer(IExportTemplatePlaceholderResolver templatePlaceholderResolver, IExportCachedDbAccess exportCachedDbAccess, ICachedExportDefaultTemplateProvider defaultTemplateProvider, ExportPlaceholderErrorCollection errorCollection, ExportObjectData exportObjectData) { _templatePlaceholderResolver = templatePlaceholderResolver; _exportCachedDbAccess = exportCachedDbAccess; _defaultTemplateProvider = defaultTemplateProvider; _errorCollection = errorCollection; _exportObjectData = exportObjectData; }
/// <summary> /// Constructor /// </summary> /// <param name="errorCollection">Error Collection</param> /// <param name="defaultTemplateProvider">Default Template Provider</param> /// <param name="cachedDbAccess">Cached Db Access</param> /// <param name="dailyRoutineEventPlaceholderResolver">Daily routine event placeholder resolver</param> /// <param name="languageKeyGenerator">Language Key Generator</param> /// <param name="localizerFactory">Localizer Factory</param> /// <param name="exportSettings">Export Settings</param> /// <param name="project">Project</param> public ExportDialogActionRenderer(ExportPlaceholderErrorCollection errorCollection, ICachedExportDefaultTemplateProvider defaultTemplateProvider, IExportCachedDbAccess cachedDbAccess, IDailyRoutineEventPlaceholderResolver dailyRoutineEventPlaceholderResolver, ILanguageKeyGenerator languageKeyGenerator, IStringLocalizerFactory localizerFactory, ExportSettings exportSettings, GoNorthProject project) : base(errorCollection, localizerFactory) { _defaultTemplateProvider = defaultTemplateProvider; _languageKeyGenerator = languageKeyGenerator; _localizer = localizerFactory.Create(typeof(ExportDialogActionRenderer)); _exportSettings = exportSettings; _project = project; _actionRenderes = new Dictionary <ActionType, IActionRenderer>(); _actionRenderes.Add(ActionType.ChangePlayerValue, new NpcValueChangeRenderer(defaultTemplateProvider, cachedDbAccess, languageKeyGenerator, localizerFactory, true)); _actionRenderes.Add(ActionType.ChangeNpcValue, new NpcValueChangeRenderer(defaultTemplateProvider, cachedDbAccess, languageKeyGenerator, localizerFactory, false)); _actionRenderes.Add(ActionType.SpawnItemInPlayerInventory, new InventoryActionRenderer(defaultTemplateProvider, cachedDbAccess, languageKeyGenerator, localizerFactory, true, false, false)); _actionRenderes.Add(ActionType.TransferItemToPlayerInventory, new InventoryActionRenderer(defaultTemplateProvider, cachedDbAccess, languageKeyGenerator, localizerFactory, true, true, false)); _actionRenderes.Add(ActionType.RemoveItemFromPlayerInventory, new InventoryActionRenderer(defaultTemplateProvider, cachedDbAccess, languageKeyGenerator, localizerFactory, true, false, true)); _actionRenderes.Add(ActionType.SpawnItemInNpcInventory, new InventoryActionRenderer(defaultTemplateProvider, cachedDbAccess, languageKeyGenerator, localizerFactory, false, false, false)); _actionRenderes.Add(ActionType.TransferItemToNpcInventory, new InventoryActionRenderer(defaultTemplateProvider, cachedDbAccess, languageKeyGenerator, localizerFactory, false, true, false)); _actionRenderes.Add(ActionType.RemoveItemFromNpcInventory, new InventoryActionRenderer(defaultTemplateProvider, cachedDbAccess, languageKeyGenerator, localizerFactory, false, false, true)); _actionRenderes.Add(ActionType.ChangeQuestValue, new QuestValueChangeRenderer(defaultTemplateProvider, cachedDbAccess, languageKeyGenerator, localizerFactory)); _actionRenderes.Add(ActionType.ChangeQuestState, new SetQuestStateActionRenderer(defaultTemplateProvider, cachedDbAccess, languageKeyGenerator, localizerFactory)); _actionRenderes.Add(ActionType.AddQuestText, new AddQuestTextRenderer(defaultTemplateProvider, cachedDbAccess, languageKeyGenerator, localizerFactory)); _actionRenderes.Add(ActionType.Wait, new WaitActionRenderer(defaultTemplateProvider, localizerFactory)); _actionRenderes.Add(ActionType.ChangePlayerState, new ChangeNpcStateActionRenderer(defaultTemplateProvider, cachedDbAccess, languageKeyGenerator, localizerFactory, true)); _actionRenderes.Add(ActionType.ChangeNpcState, new ChangeNpcStateActionRenderer(defaultTemplateProvider, cachedDbAccess, languageKeyGenerator, localizerFactory, false)); _actionRenderes.Add(ActionType.PlayerLearnSkill, new LearnForgetSkillActionRenderer(defaultTemplateProvider, cachedDbAccess, languageKeyGenerator, localizerFactory, true, true)); _actionRenderes.Add(ActionType.PlayerForgetSkill, new LearnForgetSkillActionRenderer(defaultTemplateProvider, cachedDbAccess, languageKeyGenerator, localizerFactory, true, false)); _actionRenderes.Add(ActionType.NpcLearnSkill, new LearnForgetSkillActionRenderer(defaultTemplateProvider, cachedDbAccess, languageKeyGenerator, localizerFactory, false, true)); _actionRenderes.Add(ActionType.NpcForgetSkill, new LearnForgetSkillActionRenderer(defaultTemplateProvider, cachedDbAccess, languageKeyGenerator, localizerFactory, false, false)); _actionRenderes.Add(ActionType.ChangePlayerSkillValue, new SkillValueChangeRenderer(defaultTemplateProvider, cachedDbAccess, languageKeyGenerator, localizerFactory, true)); _actionRenderes.Add(ActionType.ChangeNpcSkillValue, new SkillValueChangeRenderer(defaultTemplateProvider, cachedDbAccess, languageKeyGenerator, localizerFactory, false)); _actionRenderes.Add(ActionType.PersistDialogState, new PersistDialogStateActionRenderer(defaultTemplateProvider)); _actionRenderes.Add(ActionType.OpenShop, new OpenShopActionRenderer(defaultTemplateProvider)); _actionRenderes.Add(ActionType.PlayNpcAnimation, new PlayAnimationActionRenderer(defaultTemplateProvider, cachedDbAccess, languageKeyGenerator, localizerFactory, false)); _actionRenderes.Add(ActionType.PlayPlayerAnimation, new PlayAnimationActionRenderer(defaultTemplateProvider, cachedDbAccess, languageKeyGenerator, localizerFactory, true)); _actionRenderes.Add(ActionType.CodeAction, new CodeActionRenderer(defaultTemplateProvider, localizerFactory)); _actionRenderes.Add(ActionType.ShowFloatingTextAboveNpc, new ShowFloatingTextAboveNpcActionRenderer(defaultTemplateProvider, cachedDbAccess, languageKeyGenerator, localizerFactory, false)); _actionRenderes.Add(ActionType.ShowFloatingTextAbovePlayer, new ShowFloatingTextAboveNpcActionRenderer(defaultTemplateProvider, cachedDbAccess, languageKeyGenerator, localizerFactory, true)); _actionRenderes.Add(ActionType.ShowFloatingTextAboveChooseNpc, new ShowFloatingTextAboveChooseNpcActionRenderer(defaultTemplateProvider, cachedDbAccess, languageKeyGenerator, localizerFactory)); _actionRenderes.Add(ActionType.FadeToBlack, new FadeToFromBlackRenderer(defaultTemplateProvider, localizerFactory, true)); _actionRenderes.Add(ActionType.FadeFromBlack, new FadeToFromBlackRenderer(defaultTemplateProvider, localizerFactory, false)); _actionRenderes.Add(ActionType.SetGameTime, new SetGameTimeActionRenderer(defaultTemplateProvider, cachedDbAccess, localizerFactory)); _actionRenderes.Add(ActionType.DisableDailyRoutineEvent, new SetDailyRoutineEventState(defaultTemplateProvider, cachedDbAccess, dailyRoutineEventPlaceholderResolver, languageKeyGenerator, localizerFactory, true)); _actionRenderes.Add(ActionType.EnableDailyRoutineEvent, new SetDailyRoutineEventState(defaultTemplateProvider, cachedDbAccess, dailyRoutineEventPlaceholderResolver, languageKeyGenerator, localizerFactory, false)); _actionRenderes.Add(ActionType.TeleportNpc, new MoveNpcActionRenderer(defaultTemplateProvider, cachedDbAccess, languageKeyGenerator, localizerFactory, true, false, false)); _actionRenderes.Add(ActionType.TeleportPlayer, new MoveNpcActionRenderer(defaultTemplateProvider, cachedDbAccess, languageKeyGenerator, localizerFactory, true, true, false)); _actionRenderes.Add(ActionType.TeleportChooseNpc, new MoveNpcActionRenderer(defaultTemplateProvider, cachedDbAccess, languageKeyGenerator, localizerFactory, true, false, true)); _actionRenderes.Add(ActionType.WalkNpcToMarker, new MoveNpcActionRenderer(defaultTemplateProvider, cachedDbAccess, languageKeyGenerator, localizerFactory, false, false, false)); _actionRenderes.Add(ActionType.WalkChooseNpcToMarker, new MoveNpcActionRenderer(defaultTemplateProvider, cachedDbAccess, languageKeyGenerator, localizerFactory, false, false, true)); _actionRenderes.Add(ActionType.TeleportNpcToNpc, new MoveNpcToNpcActionRenderer(defaultTemplateProvider, cachedDbAccess, languageKeyGenerator, localizerFactory, true, false)); _actionRenderes.Add(ActionType.TeleportChooseNpcToNpc, new MoveNpcToNpcActionRenderer(defaultTemplateProvider, cachedDbAccess, languageKeyGenerator, localizerFactory, true, true)); _actionRenderes.Add(ActionType.WalkNpcToNpc, new MoveNpcToNpcActionRenderer(defaultTemplateProvider, cachedDbAccess, languageKeyGenerator, localizerFactory, false, false)); _actionRenderes.Add(ActionType.WalkChooseNpcToNpc, new MoveNpcToNpcActionRenderer(defaultTemplateProvider, cachedDbAccess, languageKeyGenerator, localizerFactory, false, true)); }
/// <summary> /// Constructor /// </summary> /// <param name="errorCollection">Error Collection</param> /// <param name="defaultTemplateProvider">Default Template Provider</param> /// <param name="languageKeyGenerator">Language Key Generator</param> /// <param name="conditionRenderer">Condition Renderer</param> /// <param name="localizerFactory">Localizer Factory</param> /// <param name="exportSettings">Export Settings</param> /// <param name="project">Project</param> public ExportDialogConditionRenderer(ExportPlaceholderErrorCollection errorCollection, ICachedExportDefaultTemplateProvider defaultTemplateProvider, ILanguageKeyGenerator languageKeyGenerator, IConditionRenderer conditionRenderer, IStringLocalizerFactory localizerFactory, ExportSettings exportSettings, GoNorthProject project) : base(errorCollection, localizerFactory) { _defaultTemplateProvider = defaultTemplateProvider; _languageKeyGenerator = languageKeyGenerator; _conditionRenderer = conditionRenderer; _localizer = localizerFactory.Create(typeof(ExportDialogConditionRenderer)); _exportSettings = exportSettings; _project = project; }
/// <summary> /// Returns the node type of dailog step /// </summary> /// <param name="dialogData">Dialog data to check</param> /// <param name="errorCollection">Error Collection to send errors to</param> /// <returns>Node type</returns> private string GetNodeType(ExportDialogData dialogData, ExportPlaceholderErrorCollection errorCollection) { string nodeType = dialogData.GetNodeType(); if (!string.IsNullOrEmpty(nodeType)) { return(nodeType); } errorCollection.AddUnknownDialogStepError(); return("unknown"); }
/// <summary> /// Parses a template /// </summary> /// <param name="code">Code of the template</param> /// <param name="errorCollection">Error collection</param> /// <returns>Parsed template</returns> public static Template ParseTemplate(string code, ExportPlaceholderErrorCollection errorCollection) { Template parsedTemplate = Template.Parse(code, ""); if (parsedTemplate.HasErrors) { errorCollection.AddTemplateHasErrors(); return(null); } return(parsedTemplate); }
/// <summary> /// Constructor /// </summary> /// <param name="exportCachedDbAccess">Export cached Db access</param> /// <param name="errorCollection">Error Collection</param> /// <param name="defaultTemplateProvider">Default Template Provider</param> /// <param name="dailyRoutineFunctionNameGenerator">Daily routine function name generator</param> /// <param name="scribanLanguageKeyGenerator">Scriban Language key generator</param> /// <param name="localizerFactory">Localizer Factory</param> /// <param name="exportSettings">Export Settings</param> /// <param name="project">Project</param> public ExportReferenceRenderer(IExportCachedDbAccess exportCachedDbAccess, ExportPlaceholderErrorCollection errorCollection, ICachedExportDefaultTemplateProvider defaultTemplateProvider, IDailyRoutineFunctionNameGenerator dailyRoutineFunctionNameGenerator, IScribanLanguageKeyGenerator scribanLanguageKeyGenerator, IStringLocalizerFactory localizerFactory, ExportSettings exportSettings, GoNorthProject project) { _errorCollection = errorCollection; _defaultTemplateProvider = defaultTemplateProvider; _exportCachedDbAccess = exportCachedDbAccess; _localizer = localizerFactory.Create(typeof(ExportReferenceRenderer)); _project = project; _renderers = new Dictionary <ExportTemplateRenderingEngine, IReferenceStepRenderer> { { ExportTemplateRenderingEngine.Scriban, new ScribanReferenceStepRenderer(exportCachedDbAccess, dailyRoutineFunctionNameGenerator, exportSettings, errorCollection, scribanLanguageKeyGenerator, localizerFactory) } }; }
/// <summary> /// Replaces the base placeholders /// </summary> /// <param name="errorCollection">Error collection</param> /// <param name="code">Code to fill</param> /// <param name="data">Dialog Step Data</param> /// <param name="nextStep">Next step in the dialog</param> /// <param name="flexFieldObject">Flex field object to which the dialog belongs</param> /// <returns>Base placeholders</returns> public async Task <string> ReplaceBasePlaceholders(ExportPlaceholderErrorCollection errorCollection, string code, ExportDialogData data, ExportDialogData nextStep, FlexFieldObject flexFieldObject) { Template parsedTemplate = ScribanParsingUtil.ParseTemplate(code, _errorCollection); if (parsedTemplate == null) { return(code); } ScribanDialogStepBaseDataWithNextNode nodeData = GetBaseNodeData(data, nextStep, flexFieldObject); TemplateContext context = BuildTemplateContext(nodeData); return(await parsedTemplate.RenderAsync(context)); }
/// <summary> /// Constructor /// </summary> /// <param name="exportCachedDbAccess">Export cached Db access</param> /// <param name="errorCollection">Error Collection</param> /// <param name="defaultTemplateProvider">Default Template Provider</param> /// <param name="languageKeyGenerator">Language Key Generator</param> /// <param name="conditionRenderer">Condition Renderer</param> /// <param name="localizerFactory">Localizer Factory</param> /// <param name="exportSettings">Export Settings</param> /// <param name="project">Project</param> public ExportDialogConditionRenderer(IExportCachedDbAccess exportCachedDbAccess, ExportPlaceholderErrorCollection errorCollection, ICachedExportDefaultTemplateProvider defaultTemplateProvider, ILanguageKeyGenerator languageKeyGenerator, IConditionRenderer conditionRenderer, IStringLocalizerFactory localizerFactory, ExportSettings exportSettings, GoNorthProject project) { _errorCollection = errorCollection; _defaultTemplateProvider = defaultTemplateProvider; _conditionRenderer = conditionRenderer; _exportSettings = exportSettings; _localizer = localizerFactory.Create(typeof(ExportDialogConditionRenderer)); _project = project; _renderers = new Dictionary <ExportTemplateRenderingEngine, IConditionStepRenderer> { { ExportTemplateRenderingEngine.Legacy, new LegacyConditionStepRenderer(languageKeyGenerator, exportSettings, errorCollection, conditionRenderer, localizerFactory, project) }, { ExportTemplateRenderingEngine.Scriban, new ScribanConditionStepRenderer(exportCachedDbAccess, exportSettings, errorCollection, conditionRenderer, localizerFactory, project) } }; }
/// <summary> /// Constructor /// </summary> /// <param name="exportCachedDbAccess">Export cached Db access</param> /// <param name="errorCollection">Error Collection</param> /// <param name="defaultTemplateProvider">Default Template Provider</param> /// <param name="languageKeyGenerator">Language Key Generator</param> /// <param name="scribanLanguageKeyGenerator">Scriban Language key generator</param> /// <param name="localizerFactory">Localizer Factory</param> /// <param name="exportSettings">Export Settings</param> /// <param name="project">Project</param> /// <param name="isPlayerLine">true if its a player line, else false</param> public ExportDialogTextLineRenderer(IExportCachedDbAccess exportCachedDbAccess, ExportPlaceholderErrorCollection errorCollection, ICachedExportDefaultTemplateProvider defaultTemplateProvider, ILanguageKeyGenerator languageKeyGenerator, IScribanLanguageKeyGenerator scribanLanguageKeyGenerator, IStringLocalizerFactory localizerFactory, ExportSettings exportSettings, GoNorthProject project, bool isPlayerLine) { _errorCollection = errorCollection; _defaultTemplateProvider = defaultTemplateProvider; _localizer = localizerFactory.Create(typeof(ExportDialogTextLineRenderer)); _project = project; _isPlayerLine = isPlayerLine; _renderers = new Dictionary <ExportTemplateRenderingEngine, ITextLineRenderer> { { ExportTemplateRenderingEngine.Legacy, new LegacyTextLineRenderer(languageKeyGenerator, exportSettings, errorCollection, localizerFactory, isPlayerLine) }, { ExportTemplateRenderingEngine.Scriban, new ScribanTextLineRenderer(exportCachedDbAccess, exportSettings, errorCollection, scribanLanguageKeyGenerator, localizerFactory, isPlayerLine) } }; }
/// <summary> /// Constructor /// </summary> /// <param name="defaultTemplateProvider">Default Template Provider</param> /// <param name="cachedDbAccess">Cached Db Access</param> /// <param name="languageKeyGenerator">Language Key Generator</param> /// <param name="scribanLanguageKeyGenerator">Scriban language key generator</param> /// <param name="conditionRenderer">Condition Renderer</param> /// <param name="legacyDailyRoutineEventPlaceholderResolver">Daily routine event placeholder resolver</param> /// <param name="dailyRoutineFunctionNameGenerator">Daily routine function name generator</param> /// <param name="actionTranslator">Action translator</param> /// <param name="stringLocalizerFactory">String Localizer Factor</param> public NodeGraphBaseRenderer(ICachedExportDefaultTemplateProvider defaultTemplateProvider, IExportCachedDbAccess cachedDbAccess, ILanguageKeyGenerator languageKeyGenerator, IScribanLanguageKeyGenerator scribanLanguageKeyGenerator, IConditionRenderer conditionRenderer, ILegacyDailyRoutineEventPlaceholderResolver legacyDailyRoutineEventPlaceholderResolver, IDailyRoutineFunctionNameGenerator dailyRoutineFunctionNameGenerator, IActionTranslator actionTranslator, IStringLocalizerFactory stringLocalizerFactory) { _defaultTemplateProvider = defaultTemplateProvider; _cachedDbAccess = cachedDbAccess; _languageKeyGenerator = languageKeyGenerator; _scribanLanguageKeyGenerator = scribanLanguageKeyGenerator; _conditionRenderer = conditionRenderer; _legacyDailyRoutineEventPlaceholderResolver = legacyDailyRoutineEventPlaceholderResolver; _dailyRoutineFunctionNameGenerator = dailyRoutineFunctionNameGenerator; _actionTranslator = actionTranslator; _stringLocalizerFactory = stringLocalizerFactory; _errorCollection = null; _stepRenderers = new List <IExportDialogStepRenderer>(); }
/// <summary> /// Returns true if any node in a list is of a certain type /// </summary> /// <param name="nodes">Dialog Nodes</param> /// <param name="nodeType">Node Type</param> /// <param name="errorCollection">Error Collection to send errors to</param> /// <returns>true if any node is of the searched type</returns> private bool IsAnyNodeOfType(List <ExportDialogData> nodes, string nodeType, ExportPlaceholderErrorCollection errorCollection) { if (nodes == null) { return(false); } foreach (ExportDialogData curNode in nodes) { if (IsNodeOfType(curNode, nodeType, errorCollection)) { return(true); } } return(false); }
/// <summary> /// Returns the npc to use /// </summary> /// <param name="npc">Npc to which the dialog belongs</param> /// <param name="errorCollection">Error Collection</param> /// <returns>Value Object</returns> private async Task <IFlexFieldExportable> GetNpc(KortistoNpc npc, ExportPlaceholderErrorCollection errorCollection) { if (_isPlayer) { GoNorthProject curProject = await _cachedDbAccess.GetDefaultProject(); npc = await _cachedDbAccess.GetPlayerNpc(curProject.Id); if (npc == null) { errorCollection.AddNoPlayerNpcExistsError(); return(null); } } return(npc); }
/// <summary> /// Fills the placeholders of a code /// </summary> /// <param name="templateType">Template Type</param> /// <param name="code">Code to fill</param> /// <param name="data">Export Data</param> /// <returns>Filled Code</returns> public async Task <ExportPlaceholderFillResult> FillPlaceholders(TemplateType templateType, string code, ExportObjectData data) { ExportPlaceholderErrorCollection errorCollection = new ExportPlaceholderErrorCollection(_localizerFactory); foreach (IExportTemplateTopicPlaceholderResolver curResolver in _exportTemplatePlaceholderResolvers) { if (curResolver.IsValidForTemplateType(templateType)) { curResolver.SetErrorMessageCollection(errorCollection); code = await curResolver.FillPlaceholders(code, data); } } ExportPlaceholderFillResult result = new ExportPlaceholderFillResult(); result.Code = code; result.Errors = errorCollection; return(result); }
/// <summary> /// Returns the value object to use /// </summary> /// <param name="parsedData">Parsed data</param> /// <param name="flexFieldObject">Flex field object</param> /// <param name="errorCollection">Error Collection</param> /// <returns>Value Object</returns> protected abstract Task <IFlexFieldExportable> GetValueObject(SpawnObjectActionData parsedData, FlexFieldObject flexFieldObject, ExportPlaceholderErrorCollection errorCollection);
/// <summary> /// Builds a preview text from parsed data /// </summary> /// <param name="parsedData">Parsed data</param> /// <param name="flexFieldObject">Flex field object to which the dialog belongs</param> /// <param name="errorCollection">Error Collection</param> /// <param name="child">Child node</param> /// <param name="parent">Parent</param> /// <returns>Preview text</returns> public override async Task <string> BuildPreviewTextFromParsedData(SpawnObjectAtMarkerRendererBase.SpawnObjectActionData parsedData, FlexFieldObject flexFieldObject, ExportPlaceholderErrorCollection errorCollection, ExportDialogData child, ExportDialogData parent) { IFlexFieldExportable valueObject = await GetValueObject(parsedData, flexFieldObject, errorCollection); if (valueObject == null) { return(string.Empty); } KartaMapNamedMarkerQueryResult markerResult = await GetMarker(parsedData); if (markerResult == null) { return(string.Empty); } return(GetPreviewPrefixText(valueObject.Name, markerResult.MarkerName)); }
/// <summary> /// Builds an action from parsed data /// </summary> /// <param name="parsedData">Parsed data</param> /// <param name="data">Dialog data</param> /// <param name="project">Project</param> /// <param name="errorCollection">Error Collection</param> /// <param name="flexFieldObject">Flex field object to which the dialog belongs</param> /// <param name="exportSettings">Export Settings</param> /// <returns>Action string</returns> public override async Task <string> BuildActionFromParsedData(SpawnObjectAtMarkerRendererBase.SpawnObjectActionData parsedData, ExportDialogData data, GoNorthProject project, ExportPlaceholderErrorCollection errorCollection, FlexFieldObject flexFieldObject, ExportSettings exportSettings) { ExportTemplate actionTemplate = await GetExportTemplate(project); IFlexFieldExportable valueObject = await GetValueObject(parsedData, flexFieldObject, errorCollection); if (valueObject == null) { return(string.Empty); } KartaMapNamedMarkerQueryResult markerResult = await GetMarker(parsedData); if (markerResult == null) { errorCollection.AddDialogMarkerNotFoundError(); return(string.Empty); } string actionCode = ExportUtil.BuildPlaceholderRegex(Placeholder_TargetMarker_Name).Replace(actionTemplate.Code, markerResult.MarkerName); actionCode = ExportUtil.BuildPlaceholderRegex(Placeholder_Rotation_Pitch).Replace(actionCode, parsedData.Pitch.ToString()); actionCode = ExportUtil.BuildPlaceholderRegex(Placeholder_Rotation_Yaw).Replace(actionCode, parsedData.Yaw.ToString()); actionCode = ExportUtil.BuildPlaceholderRegex(Placeholder_Rotation_Roll).Replace(actionCode, parsedData.Roll.ToString()); ExportObjectData flexFieldExportData = new ExportObjectData(); flexFieldExportData.ExportData.Add(ExportConstants.ExportDataObject, valueObject); flexFieldExportData.ExportData.Add(ExportConstants.ExportDataObjectType, GetFlexFieldExportObjectType()); _flexFieldPlaceholderResolver.SetErrorMessageCollection(errorCollection); actionCode = _flexFieldPlaceholderResolver.FillPlaceholders(actionCode, flexFieldExportData).Result; return(actionCode); }
/// <summary> /// Builds a preview text from parsed data /// </summary> /// <param name="parsedData">Parsed data</param> /// <param name="flexFieldObject">Flex field object to which the dialog belongs</param> /// <param name="errorCollection">Error Collection</param> /// <param name="child">Child node</param> /// <param name="parent">Parent</param> /// <returns>Preview text</returns> public override Task <string> BuildPreviewTextFromParsedData(ScribanOpenShopActionRenderer.OpenShopActionData parsedData, FlexFieldObject flexFieldObject, ExportPlaceholderErrorCollection errorCollection, ExportDialogData child, ExportDialogData parent) { return(Task.FromResult("Open shop")); }
/// <summary> /// Builds an action from parsed data /// </summary> /// <param name="template">Template to export</param> /// <param name="parsedData">Parsed data</param> /// <param name="data">Dialog data</param> /// <param name="nextStep">Next step in the dialog</param> /// <param name="project">Project</param> /// <param name="errorCollection">Error Collection</param> /// <param name="flexFieldObject">Flex field object to which the dialog belongs</param> /// <param name="exportSettings">Export Settings</param> /// <param name="stepRenderer">Action Step renderer</param> /// <returns>Action string</returns> public override async Task <string> BuildActionFromParsedData(ExportTemplate template, ScribanOpenShopActionRenderer.OpenShopActionData parsedData, ExportDialogData data, ExportDialogData nextStep, GoNorthProject project, ExportPlaceholderErrorCollection errorCollection, FlexFieldObject flexFieldObject, ExportSettings exportSettings, IActionStepRenderer stepRenderer) { return(await ScribanActionRenderingUtil.FillPlaceholders(_cachedDbAccess, errorCollection, template.Code, parsedData, flexFieldObject, data, nextStep, null, stepRenderer)); }
/// <summary> /// Returns the quest use /// </summary> /// <param name="parsedData">Parsed data</param> /// <param name="errorCollection">Error Collection</param> /// <returns>Value Object</returns> private async Task <IFlexFieldExportable> GetQuest(AddQuestTextRenderer.AddQuestTextData parsedData, ExportPlaceholderErrorCollection errorCollection) { AikaQuest quest = await _cachedDbAccess.GetQuestById(parsedData.QuestId); if (quest == null) { errorCollection.AddDialogQuestNotFoundError(); return(null); } return(quest); }
/// <summary> /// Builds a preview text from parsed data /// </summary> /// <param name="parsedData">Parsed data</param> /// <param name="npc">Npc to which the dialog belongs</param> /// <param name="errorCollection">Error Collection</param> /// <returns>Preview text</returns> public override async Task <string> BuildPreviewTextFromParsedData(AddQuestTextRenderer.AddQuestTextData parsedData, KortistoNpc npc, ExportPlaceholderErrorCollection errorCollection) { IFlexFieldExportable valueObject = await GetQuest(parsedData, errorCollection); if (valueObject == null) { return(string.Empty); } return("AddQuestText (" + valueObject.Name + ", " + ExportUtil.BuildTextPreview(parsedData.QuestText) + ")"); }
/// <summary> /// Builds an action from parsed data /// </summary> /// <param name="parsedData">Parsed data</param> /// <param name="data">Dialog data</param> /// <param name="project">Project</param> /// <param name="errorCollection">Error Collection</param> /// <param name="npc">Npc to which the dialog belongs</param> /// <param name="exportSettings">Export Settings</param> /// <returns>Action string</returns> public override async Task <string> BuildActionFromParsedData(AddQuestTextRenderer.AddQuestTextData parsedData, ExportDialogData data, GoNorthProject project, ExportPlaceholderErrorCollection errorCollection, KortistoNpc npc, ExportSettings exportSettings) { ExportTemplate actionTemplate = await GetExportTemplate(project); IFlexFieldExportable valueObject = await GetQuest(parsedData, errorCollection); if (valueObject == null) { return(string.Empty); } string actionCode = ExportUtil.BuildPlaceholderRegex(Placeholder_QuestText).Replace(actionTemplate.Code, ExportUtil.EscapeCharacters(parsedData.QuestText, exportSettings.EscapeCharacter, exportSettings.CharactersNeedingEscaping, exportSettings.NewlineCharacter)); actionCode = ExportUtil.BuildPlaceholderRegex(Placeholder_QuestText_Preview).Replace(actionCode, ExportUtil.BuildTextPreview(parsedData.QuestText)); actionCode = ExportUtil.BuildPlaceholderRegex(Placeholder_QuestText_LangKey).Replace(actionCode, m => { return(_languageKeyGenerator.GetDialogTextLineKey(npc.Id, valueObject.Name, ExportConstants.LanguageKeyTypeQuest, data.Id, parsedData.QuestText).Result); }); ExportObjectData flexFieldExportData = new ExportObjectData(); flexFieldExportData.ExportData.Add(ExportConstants.ExportDataObject, valueObject); flexFieldExportData.ExportData.Add(ExportConstants.ExportDataObjectType, ExportConstants.ExportObjectTypeQuest); _flexFieldPlaceholderResolver.SetErrorMessageCollection(errorCollection); actionCode = _flexFieldPlaceholderResolver.FillPlaceholders(actionCode, flexFieldExportData).Result; return(actionCode); }