Example #1
0
        public void OnEvent(FEvent evt)
        {
            switch ((GameEventEnum)evt.GetEventId())
            {
            case GameEventEnum.Loading:
            {
                GameStateTypeEnum stateType = (GameStateTypeEnum)evt.GetParam("NextState");
                LoadingState      lState    = GameStateManager.Instance.getState(GameStateTypeEnum.Loading) as LoadingState;
                lState.SetNextState(stateType);
                lState.SetFrontScenes(View.EScenesType.EST_Play);
                SetStateTo(GameStateTypeEnum.Loading);
            }
            break;

            case GameEventEnum.IntoRoom:
            {
                LoadingState lState = GameStateManager.Instance.getState(GameStateTypeEnum.Loading) as LoadingState;
                lState.SetNextState(GameStateTypeEnum.Room);
                lState.SetFrontScenes(View.EScenesType.EST_Play);
                SetStateTo(GameStateTypeEnum.Loading);
            }
            break;

            case GameEventEnum.IntoLobby:
            {
                LoadingState lState = GameStateManager.Instance.getState(GameStateTypeEnum.Loading) as LoadingState;
                lState.SetNextState(GameStateTypeEnum.Lobby);
                lState.SetFrontScenes(View.EScenesType.EST_Play);
                SetStateTo(GameStateTypeEnum.Loading);
            }
            break;
            }
        }
 //获取状态
 public IGameState getState(GameStateTypeEnum type)
 {
     if (!mStatesDict.ContainsKey(type))
     {
         return(null);
     }
     return(mStatesDict[type]);
 }
Example #3
0
 //获取状态
 public IGameState getState(GameStateTypeEnum type)
 {
     if (!gameStates.ContainsKey(type))
     {
         return(null);
     }
     return(gameStates[type]);
 }
        // 更新游戏状态机 在HolyTechGame中的Update中调用。实时监测
        // GameStateManager.Instance.Update(Time.deltaTime);
        public void Update(float fDeltaTime)
        {
            GameStateTypeEnum nextStateType = GameStateTypeEnum.Continue;

            if (mCurrentState != null)//如果状态不为空,那么就获取当前状态。
            {
                nextStateType = mCurrentState.Update(fDeltaTime);
            }
            if (nextStateType > GameStateTypeEnum.Continue) //如果下一个状态不是Continue状态,那么就转换状态
            {
                ChangeGameStateTo(nextStateType);           //一旦转换状态,那么就加载对应的状态,然后进入enter中。
            }
        }
 private void OnEvent(FEvent evt)
 {
     switch ((GameEventEnum)evt.GetEventId())
     {
     case GameEventEnum.Loading:
     {
         GameStateTypeEnum stateType = (GameStateTypeEnum)evt.GetParam("NextState");
         if (stateType != GameStateTypeEnum.Play)
         {
             return;
         }
         timeStart = Time.time;
         tagCheck  = true;
     }
     break;
     }
 }
        //改变状态
        //根据监测状态变化,如果currentState有变化,对应进入相应的状态类,然后进入enter中,广播事件,添加监听器等等
        public void ChangeGameStateTo(GameStateTypeEnum stateType)
        {
            //如果当前状态与即将转换的状态一致,那么返回,不需要在转换了
            if (mCurrentState != null && mCurrentState.GetStateType() != GameStateTypeEnum.Loading && mCurrentState.GetStateType() == stateType)
            {
                return;
            }

            //在转换状态前,需要退出当前的状态,每种状态都有各自的退出的方法。
            if (mStatesDict.ContainsKey(stateType))
            {
                if (mCurrentState != null)
                {
                    mCurrentState.Exit();
                }
                //转换状态
                mCurrentState = mStatesDict[stateType];
                //根据添加的状态,调用相应的进入的方法,例如如果是登入状态,进入LoginState的Enter方法,每个状态都有相应的状态类
                mCurrentState.Enter();
            }
        }
Example #7
0
        public void OnEvent(FEvent evt)
        {
            switch ((GameEventEnum)evt.GetEventId())
            {
            case GameEventEnum.GameEvent_IntoRoom:    //创建房间(自定义)
                SetStateTo(GameStateTypeEnum.GS_Room);
                break;

            case GameEventEnum.GameEvent_IntoHero:    //英雄选择
                GameStateManager.Instance.ChangeGameStateTo(GameStateTypeEnum.GS_Hero);
                break;

            case GameEventEnum.GameEvent_Loading:    //加载状态
                GameStateTypeEnum stateType = (GameStateTypeEnum)evt.GetParam("NextState");
                LoadingState      lState    = GameStateManager.Instance.getState(GameStateTypeEnum.GS_Loading) as LoadingState;
                lState.SetNextState(stateType);
                lState.SetFrontScenes(View.EScenesType.EST_Login);
                SetStateTo(GameStateTypeEnum.GS_Loading);
                break;
            }
        }
 //  设置状态
 public void SetStateTo(GameStateTypeEnum gs)
 {
     stateTo = gs;
 }
Example #9
0
 private void LoadFinish(GameStateTypeEnum state)
 {
     SetStateTo(state);
 }
Example #10
0
 public void SetNextState(GameStateTypeEnum next)
 {
     mNextState = next;
 }
Example #11
0
 public LoadingState()
 {
     mNextState = GameStateTypeEnum.Continue;
 }