コード例 #1
0
        /// <summary>
        /// Builds the state machine functions
        /// </summary>
        /// <param name="inputNpc">Npc</param>
        /// <param name="stateMachine">State machine</param>
        /// <returns>Function list</returns>
        private async Task <List <ScribanExportState> > BuildStateMachineFunctions(KortistoNpc inputNpc, StateMachine stateMachine)
        {
            if (stateMachine == null || stateMachine.State == null || !stateMachine.State.Any())
            {
                return(new List <ScribanExportState>());
            }

            _stateMachineFunctionRenderer.SetErrorCollection(_errorCollection);
            _stateMachineFunctionRenderer.SetExportTemplatePlaceholderResolver(_templatePlaceholderResolver);

            List <StateTransition>      transitions = stateMachine.Link != null ? stateMachine.Link : new List <StateTransition>();
            List <StateMachineStartEnd> endNodes    = stateMachine.End != null ? stateMachine.End : new List <StateMachineStartEnd>();
            string startId = stateMachine.Start.Any() ? stateMachine.Start.FirstOrDefault().Id : string.Empty;

            List <ScribanExportState> exportStates = new List <ScribanExportState>();

            foreach (StateMachineState curState in stateMachine.State)
            {
                if (curState.DontExportToScript)
                {
                    continue;
                }

                ScribanExportState exportState = ConvertState(curState, transitions, endNodes, startId);
                await GenerateStateFunctions(exportState, inputNpc, curState);

                exportState.OriginalState = curState;

                exportStates.Add(exportState);
            }

            SetTransitions(transitions, exportStates, endNodes);

            return(exportStates);
        }
コード例 #2
0
        /// <summary>
        /// Generates the state functions
        /// </summary>
        /// <param name="exportState">Export state to fill</param>
        /// <param name="inputNpc">Input npcs</param>
        /// <param name="state">State</param>
        /// <returns>Task</returns>
        private async Task GenerateStateFunctions(ScribanExportState exportState, KortistoNpc inputNpc, StateMachineState state)
        {
            List <ScribanExportStateFunction> functions = (await _stateMachineFunctionRenderer.RenderStateFunctions(state, inputNpc)).Select(f => new ScribanExportStateFunction(f)).ToList();

            exportState.InitialFunction     = functions.FirstOrDefault();
            exportState.AdditionalFunctions = functions.Skip(1).ToList();
            exportState.AllFunctions        = functions;
        }
コード例 #3
0
        /// <summary>
        /// Converts a state for scriban
        /// </summary>
        /// <param name="state">State</param>
        /// <param name="transitions">Transitions</param>
        /// <param name="endNodes">End nodes</param>
        /// <param name="startId">Id of the start node</param>
        /// <returns>Converted state</returns>
        private static ScribanExportState ConvertState(StateMachineState state, List <StateTransition> transitions, List <StateMachineStartEnd> endNodes, string startId)
        {
            ScribanExportState exportState = new ScribanExportState();

            exportState.Id               = state.Id;
            exportState.Name             = state.Name;
            exportState.Description      = state.Description;
            exportState.IsInitialState   = transitions.Any(l => l.TargetNodeId == state.Id && l.SourceNodeId == startId);
            exportState.HasEndConnection = transitions.Any(l => l.SourceNodeId == state.Id && endNodes.Any(e => e.Id == l.TargetNodeId));
            exportState.ScriptType       = ScribanScriptUtil.ConvertScriptType(state.ScriptType);
            exportState.ScriptName       = state.ScriptName;
            return(exportState);
        }