Esempio n. 1
0
        /// <summary>
        /// 初始化游戏状态机
        /// </summary>
        /// <returns></returns>
        public xc.Machine.State InitFSM()
        {
            m_GameMachine = new xc.Machine();

            xc.Machine.State init_state = new xc.GameInitState(m_GameMachine);

            XLua.LuaFunction initFSMFunc = LuaScriptMgr.Instance.GetLuaFunction("Main_InitFSM");
            if (initFSMFunc != null)
            {
                initFSMFunc.Call(m_GameMachine, init_state);
            }

            m_GameMachine.SetCurState(init_state);
            return(init_state);
        }
Esempio n. 2
0
        /// <summary>
        /// 初始化状态机
        /// </summary>
        void InitMachine()
        {
            m_Machine        = new Machine();
            m_InitState      = new xc.Machine.State((uint)EFSMState.DS_Init, m_Machine);
            m_NormalState    = new xc.Machine.State((uint)EFSMState.DS_Normal, m_Machine);
            m_ReconnectState = new xc.Machine.State((uint)EFSMState.DS_Reconnect, m_Machine);
            m_FailState      = new xc.Machine.State((uint)EFSMState.DS_Fail, m_Machine);

            //// 构建状态图
            m_InitState.AddTransition((uint)EFSMEvent.DE_ReconnectSucc, m_NormalState);       // 进入游戏
            m_InitState.AddTransition((uint)EFSMEvent.DE_NetDisconnnect, m_ReconnectState);   // 进入游戏前,如果附链接断开的话,也需要重连
            m_InitState.AddTransition((uint)EFSMEvent.DE_CannotReconnect, m_FailState);       // 不进行断线重连

            m_NormalState.AddTransition((uint)EFSMEvent.DE_NetDisconnnect, m_ReconnectState); // 网络断开
            m_NormalState.AddTransition((uint)EFSMEvent.DE_CannotReconnect, m_FailState);     // 不进行断线重连
            m_NormalState.AddTransition((uint)EFSMEvent.DE_Reset, m_InitState);               // 重新登录

            m_ReconnectState.AddTransition((uint)EFSMEvent.DE_ReconnectSucc, m_NormalState);  // 断线重连成功
            m_ReconnectState.AddTransition((uint)EFSMEvent.DE_ReconnectFail, m_FailState);    // 断线重连失败
            m_ReconnectState.AddTransition((uint)EFSMEvent.DE_CannotReconnect, m_FailState);  // 不进行断线重连
            m_ReconnectState.AddTransition((uint)EFSMEvent.DE_Reset, m_InitState);            // 重连过程中取消

            m_FailState.AddTransition((uint)EFSMEvent.DE_Retry, m_ReconnectState);
            m_FailState.AddTransition((uint)EFSMEvent.DE_Reset, m_InitState);

            /// 设置Enter/Exit/Update State的函数
            m_NormalState.SetEnterFunction(EnterState_Normal);
            m_NormalState.SetUpdateFunction(UpdateState_Normal);
            m_NormalState.SetExitFunction(ExitState_Normal);
            m_ReconnectState.SetEnterFunction(EnterState_Reconnect);
            m_ReconnectState.SetUpdateFunction(UpdateState_Reconnect);
            m_ReconnectState.SetExitFunction(ExitState_Reconnect);
            m_FailState.SetEnterFunction(EnterState_FailState);
            m_FailState.SetUpdateFunction(UpdateState_FailState);
            m_Machine.SetCurState(m_InitState);
        }