Exemple #1
0
        /// <summary>
        /// 删除映射对
        /// </summary>
        public void RemoveTransition(FSMTransitionID transitionID)
        {
            // 判空
            if (transitionID == FSMTransitionID.NullTransition)
            {
                Debug.LogError("FSMState ERROR: NullTransition is not allowed");
                return;
            }

            // 确实存在
            if (map.ContainsKey(transitionID))
            {
                map.Remove(transitionID);
                RemoveTransitionObject(transitionID);
                return;
            }
            Debug.LogError("FSMState ERROR: Transition " + transitionID.ToString() + " passed to " + stateID.ToString() +
                           " was not on the state's transition list");
        }
Exemple #2
0
        /// <summary>
        /// 执行状态转换,当前+条件->下一个
        /// </summary>
        public void PerformTransition(FSMTransitionID trans)
        {
            // 判空
            if (trans == FSMTransitionID.NullTransition)
            {
                Debug.LogError("FSM ERROR: NullTransition is not allowed for a real transition");
                return;
            }

            // 尝试获取下一个状态ID
            FSMStateID nextStateID = currentState.GetOutputState(trans);

            if (nextStateID == FSMStateID.NullState)
            {
                Debug.LogError("FSM ERROR: State " + currentStateID.ToString() + " does not have a target state " +
                               " for transition " + trans.ToString());
                return;
            }

            // 获取下一个状态
            FSMState nextState = null;

            if (nextStateID == FSMStateID.Default)
            {
                nextState = defaultState;
            }
            else
            {
                nextState = states.Find(s => s.StateID == nextStateID);
            }

            // 更新状态
            currentState.DoBeforeLeaving();

            if (!currentState.isFinished)
            {
                SavePreviousState();
            }

            currentState   = nextState;
            currentStateID = nextState.StateID;
            currentState.DoBeforeEntering();
        }
Exemple #3
0
        /// <summary>
        /// 增加映射对
        /// </summary>
        /// <param name="transitionID">转换条件ID</param>
        /// <param name="stateID">下一个转台ID</param>
        public void AddTransition(FSMTransitionID transitionID, FSMStateID stateID)
        {
            // 判空
            if (transitionID == FSMTransitionID.NullTransition)
            {
                Debug.LogError("FSMState ERROR: NullTransition is not allowed for a real transition");
                return;
            }

            if (stateID == FSMStateID.NullState)
            {
                Debug.LogError("FSMState ERROR: NullStateID is not allowed for a real ID");
                return;
            }

            // 已经存在
            if (map.ContainsKey(transitionID))
            {
                Debug.LogError("FSMState ERROR: State " + this.stateID.ToString() + " already has transition " + transitionID.ToString() +
                               "Impossible to assign to another state");
                return;
            }

            map.Add(transitionID, stateID);
            AddTransitionObject(transitionID);
        }