Exemplo n.º 1
0
        /// <summary>状态切换</summary>
        public void ChangeActiveState(FSMTriggerID triggerId)
        {
            if (currentState == null)
            {
                return;
            }
            //根据条件编号,在当前状态查找输出状态
            var stateId = currentState.GetOutPutState(triggerId);

            //可能得到的3个结果
            //1.None : 不处理
            if (stateId == FSMStateID.None)
            {
                return;
            }
            //退出当前状态
            currentState.ExitState(this);
            //2.默认状态: 将原默认状态设为当前状态
            if (stateId == FSMStateID.Default)
            {
                currentState = defaultState;
            }
            else //3.具体状态: 将具体状态设为当前状态
            {
                currentState = allState.Find(p => p.stateId == stateId);
            }

            currentSateId = currentState.stateId;
            //进入新状态
            currentState.EnterState(this);
        }
Exemplo n.º 2
0
 /// <summary>
 /// 切换状态
 /// </summary>
 /// <param name="stateID"></param>
 public void ChangeActiveState(FSMStateID stateID)
 {
     //离开上一个状态
     currentState.ExitState(this);
     //如果切换的状态是默认状态
     currentState = stateID == FSMStateID.Default ? defaultState : states.Find(s => s.stateID == stateID);
     //进入下一个状态
     currentState.EnterState(this);
 }
Exemplo n.º 3
0
        /// <summary>
        /// 切换状态
        /// </summary>
        /// <param name="nextStateID"></param>
        public void ChangeState(FSMStateID nextStateID)
        {
            //计算需要切换的目标状态
            //如果需要切换的是默认状态,则直接返回;否则在状态列表中查找。
            var nextState = nextStateID == FSMStateID.Default ? defaultState   :  stateList.Find(s => s.StateID == nextStateID);

            currentState.ExitState(this);
            currentState = nextState;
            currentState.EnterState(this);
        }
Exemplo n.º 4
0
        /// <summary>切换状态</summary>
        public void ChangActiveState(FSMStateID nextStateId)
        {
            //查找状态对象
            FSMState nextState = nextStateId == FSMStateID.Default ? defaultState : states.Find(p => p.stateid == nextStateId);

            //当前状态 --- 出
            currentState.ExitState(this);
            //做出下步的安排
            currentState = nextState;
            //下一个状态--- 进
            currentState.EnterState(this);
        }
Exemplo n.º 5
0
        /// <summary>
        /// 切换状态
        /// </summary>
        /// <param name="stateID">需要切换的状态编号</param>
        public void ChanageState(FSMStateID stateID)
        {
            //如果需要切换的状态是默认状态,则
            //FSMState targetState = stateList.Find(s => s.StateID == stateID);
            //if (stateID == FSMStateID.Default)
            //    targetState = defaultState;
            FSMState targetState = stateID == FSMStateID.Default? defaultState: stateList.Find(s => s.StateID == stateID);

            //切换状态
            currentState.ExitState(this);
            currentState = targetState;
            currentState.EnterState(this);
        }
Exemplo n.º 6
0
        /// <summary>
        /// 切换状态
        /// </summary>
        /// <param name="stateID">状态ID</param>
        public void ChangeActiveState(FSMStateID stateID)
        {
            currentState.ExitState(this); //离开上一个状态

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

            currentState.EnterState(this);
        }
Exemplo n.º 7
0
        //切换状态(状态类调用)
        public void ChangeState(FSMStateID stateID)
        {
            FSMState targetState;

            //如果需要切换的是默认状态 则
            //FSMStateID.Default
            if (stateID == FSMStateID.Default)
            {
                targetState = defaultState;
            }
            else
            {
                targetState = states.Find(s => s.StateID == stateID);
            }

            //退出之前状态
            currentState.ExitState(this);
            //切换状态
            currentState = targetState;
            //进入当前状态
            currentState.EnterState(this);
        }
Exemplo n.º 8
0
        /// <summary>切换状态</summary>
        public void ChangeActiveState(FSMTriggerID triggerId)
        {
            //1 现在是什么情况 --当前状态 当前条件 --> 下一个状态是谁
            var nextStateId = currentState.GetOutputState(triggerId);

            if (nextStateId == FSMStateID.None)
            {
                return;
            }

            FSMState nextState = null;


            if (nextStateId != FSMStateID.Default)
            {
                nextState = states.Find(p => p.stateId == nextStateId);
            }
            else
            {
                // 默认状态
                currentState = defaultState;
            }
            //2 当前状态 -- 出
            currentState.ExitState(this);

            //3 做出下一步的安排
            if (null != nextState)
            {
                currentState = nextState;
            }
            else
            {
                currentState = defaultState;
            }

            //4 下一个状态 -- 进
            currentStateID = currentState.stateId;
            currentState.EnterState(this);
        }
Exemplo n.º 9
0
 //切换状态
 public void ChangeActiveState(FSMStateID stateID)
 {
     currentState.ExitState(this);
     currentState = stateID == FSMStateID.Default ? defaultState : states.Find(s => s.StateID == stateID);
     currentState.EnterState(this);
 }