public void SwitchTo(System.Type state) { if (m_cur_state.GetType() == state) { return; } IFSMState to_state; if (!m_state_pool.TryGetValue(state, out to_state)) { throw new System.Exception("'" + m_contorl_name + "' not fount '" + state.Name + "' state"); } var mes = new FSMStateMessage(); mes.LastStateType = Cur_state.GetType(); mes.CurStateType = to_state.GetType(); Cur_state.Exit(mes); Cur_state.Enter(mes); Cur_state = to_state; }
public FSMContorl(string contorl_name, IFSMManager manager) { m_contorl_name = contorl_name; m_fsm_manager = manager; m_state_pool = m_fsm_manager.InitState(); IFSMState temp; var default_type = m_fsm_manager.GetDefaultStateType(); if (!m_state_pool.TryGetValue(default_type, out temp)) { throw new System.Exception("'" + m_contorl_name + "' not fount '" + default_type.Name + "' default state"); } Cur_state = temp; var mes = new FSMStateMessage(); mes.LastStateType = null; mes.CurStateType = Cur_state.GetType(); Cur_state.Enter(mes); }
void SendStateChangeToClient(string stateName, int stateIndex) { FSMStateMessage msg = new FSMStateMessage(); msg.nowStateName = stateName; msg.nowStateIndex = stateIndex; NetworkServer.SendToAll(FsmNetworkMessageType.PlayMakerStateChange, msg); }
void OnFsmStateChange(NetworkMessage netMsg) { FSMStateMessage msg = netMsg.ReadMessage <FSMStateMessage> (); if (nowStateIndex != -1) { eventObjs [nowStateIndex].SendMessage("StateOff"); } eventObjs [msg.nowStateIndex].SendMessage("StateOn"); nowStateIndex = msg.nowStateIndex; mainCamera.SendMessage("MoveToPosition", eventObjs [msg.nowStateIndex].transform.position); }