예제 #1
0
        private ReturnCode ExecuteDefine(Interpreter interpreter, ArgumentList arguments,
                                         ref Result result)
        {
            var fsmArray     = arguments[2];
            var initialState = arguments[3];

            InternalLogger.Info($"Defining FSM with array {fsmArray} to initial state {initialState}");

            if (!TclUtils.ArrayExists(interpreter, fsmArray))
            {
                var fsmTransArrayError = $"Array of fsm states with name: {fsmArray} does not exist (is not defined).";

                ErrorLogger.Error(fsmTransArrayError);
                result = fsmTransArrayError;
                return(ReturnCode.Error);
            }

            InternalLogger.Debug($"Retrieving all FSM transitions from {fsmArray} FSM array.");
            IReadOnlyList <FsmTransition> fsmTransitions;

            if (!FsmUtils.TryGetFsmTransitions(interpreter, fsmArray, out fsmTransitions))
            {
                var transitionsFailed = $"Failed to retrieve FSM transition from {fsmArray} array.";

                ErrorLogger.Error(transitionsFailed);
                result = transitionsFailed;
                return(ReturnCode.Error);
            }

            InternalLogger.Info($"Assigning all {fsmTransitions.Count} into internal transitions set.");
            _transitions.Clear();
            foreach (var fsmTransition in fsmTransitions)
            {
                InternalLogger.Debug($"Adding FSM transition: {fsmTransition}");
                _transitions.Add(fsmTransition);
            }

            InternalLogger.Info($"Checking whether {initialState} state is defined in transition set.");
            if (!ContainsState(initialState))
            {
                var stateNotFound = $"State {initialState} was not found in defined transitions. Known states are:\n{string.Join(",", DumpStates())}";

                ErrorLogger.Error(stateNotFound);
                result = stateNotFound;
                return(ReturnCode.Error);
            }

            CurrentState = initialState;
            ResultLogger.Info($"FSM successfully defined to initial state: {initialState}");
            return(ReturnCode.Ok);
        }
 public static void SetReference(this PlayMakerFSM i_Target, string i_Name, GameObject i_Reference)
 {
     FsmUtils.SetReference(i_Target, i_Name, i_Reference);
 }