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]); }
//获取状态 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(); } }
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; }
private void LoadFinish(GameStateTypeEnum state) { SetStateTo(state); }
public void SetNextState(GameStateTypeEnum next) { mNextState = next; }
public LoadingState() { mNextState = GameStateTypeEnum.Continue; }