Example #1
0
        /// <summary>
        /// 状态Update回调
        /// </summary>
        /// <param Name="deltaTime">延迟时间</param>
        public override void OnUpdateCallBack(float deltaTime)
        {
            if (m_CurrentState == null)
            {
                return;
            }

            List <ITransition> trans_List = m_CurrentState.Transition_List;
            ITransition        transTemp  = null;

            foreach (ITransition trans in trans_List)
            {
                if (trans.OnCheckTrans())
                {
                    //转换状态
                    transTemp = trans;
                    break;
                }
            }
            //转换状态
            if (transTemp != null)
            {
                //转换中
                transTemp.OnTransition();
                //当前状态退出
                m_CurrentState.OnExitState(transTemp.ToState);
                m_CurrentState = transTemp.ToState;
                //进入下一状态
                m_CurrentState.OnEnterState(transTemp.FromState);
            }

            //当天状态更新
            m_CurrentState.OnUpdateCallBack(deltaTime);
        }
Example #2
0
 private void SetStateWithEntryExitActions(IStateMachine <S, E, C> machine, S fromState, S toState, ITransition <S, E, C> transition, E evt, C context)
 {
     if (ShouldExecuteEntryAndExitActions(transition))
     {
         var actions = (ActionCollection)null;
         m_ExitActions.TryGetValue(fromState, out actions);
         InvokeActions(actions, fromState, toState, evt, context, machine);
     }
     machine.SetStateNoActions(toState);
     if (transition != null)
     {
         transition.OnTransition(fromState, toState, evt, context, machine);
     }
     if (ShouldExecuteEntryAndExitActions(transition))
     {
         var actions = (ActionCollection)null;
         m_EnterActions.TryGetValue(toState, out actions);
         InvokeActions(actions, fromState, toState, evt, context, machine);
     }
 }