/// <summary>
        /// Builds the action content
        /// </summary>
        /// <param name="actionRenderer">Action Renderer</param>
        /// <param name="actionNode">Action Node</param>
        /// <param name="data">Dialog data</param>
        /// <param name="flexFieldObject">Flex field object to which the dialog belongs</param>
        /// <returns>Action content</returns>
        private async Task <string> BuildActionContent(IActionRenderer actionRenderer, ActionNode actionNode, ExportDialogData data, FlexFieldObject flexFieldObject)
        {
            if (actionRenderer == null)
            {
                return(string.Empty);
            }

            return(await actionRenderer.BuildActionElement(actionNode, data, _project, _errorCollection, flexFieldObject, _exportSettings));
        }
Exemplo n.º 2
0
 public DelayedActionRenderer(
     IActionRenderer <T> renderer,
     IComparer <BlockPerception> canonicalChainComparer,
     IStore store,
     int confirmations,
     long reorgResistantHeight = 0)
     : base(renderer, canonicalChainComparer, store, confirmations)
 {
     ActionRenderer           = renderer;
     _bufferedActionRenders   = new ConcurrentDictionary <BlockHash, List <ActionEvaluation> >();
     _bufferedActionUnrenders =
         new ConcurrentDictionary <BlockHash, List <ActionEvaluation> >();
     _reorgResistantHeight = reorgResistantHeight;
 }
Exemplo n.º 3
0
        /// <summary>
        /// 添加动作渲染
        /// </summary>
        /// <param name="renderer"></param>
        public virtual void AddRenderer(IActionRenderer renderer)
        {
            if (_rendererDict.ContainsKey(renderer.type))
            {
                return;
            }

            renderer.sortingIndex = _sortingIndex;
            renderer.sortingOrder = _sortingOrder;
            renderer.frames       = _frames;
            if (_alpha != 1f)
            {
                renderer.alpha = _alpha;
            }
            if (_colorFilter != null)
            {
                renderer.colorFilter = _colorFilter;
            }

            // 设置动作渲染当前动作
            if (renderer.lockActionAndDirection == false)
            {
                renderer.action    = _action;
                renderer.direction = _direction;
            }

            // 设置动作渲染当前帧
            if (renderer.loop == false)
            {
                renderer.maxFrameIndex = _maxFrameIndex;
                renderer.frameIndex    = _frameIndex;
            }

            renderer.transform.SetParent(_transform, false);
            _rendererDict[renderer.type] = renderer;
        }
        /// <summary>
        /// Renders a dialog step
        /// </summary>
        /// <param name="data">Dialog Step Data</param>
        /// <param name="flexFieldObject">Flex Field to which the dialog belongs</param>
        /// <returns>Dialog Step Render Result</returns>
        public async Task <ExportDialogStepRenderResult> RenderDialogStep(ExportDialogData data, FlexFieldObject flexFieldObject)
        {
            ActionNode actionNode = data.Action;

            if (actionNode == null)
            {
                return(null);
            }

            IActionRenderer actionRenderer = GetActionRenderForNode(actionNode);

            ExportDialogDataChild nextStep = null;

            if (data.Children != null)
            {
                if (actionRenderer != null)
                {
                    nextStep = actionRenderer.GetNextStep(data.Children);
                }
                else
                {
                    nextStep = data.Children.FirstOrDefault();
                }
            }

            string actionContent = await BuildActionContent(actionRenderer, actionNode, data, flexFieldObject);

            ExportTemplate template = await _defaultTemplateProvider.GetDefaultTemplateByType(_project.Id, TemplateType.TaleAction);

            ExportDialogStepRenderResult renderResult = new ExportDialogStepRenderResult();

            renderResult.StepCode = ExportUtil.BuildPlaceholderRegex(Placeholder_ActionContent).Replace(template.Code, actionContent);
            renderResult.StepCode = ReplaceBaseStepPlaceholders(renderResult.StepCode, data, nextStep != null ? nextStep.Child : null);

            return(renderResult);
        }
Exemplo n.º 5
0
 /// <summary>
 /// 移除动作渲染
 /// </summary>
 /// <param name="renderer"></param>
 public virtual void RemoveRenderer(IActionRenderer renderer)
 {
     RemoveRenderer(renderer.type);
 }
Exemplo n.º 6
0
        /// <summary>
        /// Constructor
        /// </summary>
        /// <param name="templateType">Template type that is used for the dispatching</param>
        /// <param name="templateProvider">Export template provider</param>
        /// <param name="legacyRenderer">Legacy action renderer</param>
        /// <param name="scribanRenderer">Scriban action renderer</param>
        public ActionRendererDispatcher(TemplateType templateType, ICachedExportDefaultTemplateProvider templateProvider, IActionRenderer legacyRenderer, IActionRenderer scribanRenderer)
        {
            _templateType     = templateType;
            _templateProvider = templateProvider;

            _renderers = new Dictionary <ExportTemplateRenderingEngine, IActionRenderer> {
                { ExportTemplateRenderingEngine.Legacy, legacyRenderer },
                { ExportTemplateRenderingEngine.Scriban, scribanRenderer }
            };
        }