Ejemplo n.º 1
0
    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;
    }
Ejemplo n.º 2
0
    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);
    }
Ejemplo n.º 3
0
    void SendStateChangeToClient(string stateName, int stateIndex)
    {
        FSMStateMessage msg = new FSMStateMessage();

        msg.nowStateName  = stateName;
        msg.nowStateIndex = stateIndex;

        NetworkServer.SendToAll(FsmNetworkMessageType.PlayMakerStateChange, msg);
    }
Ejemplo n.º 4
0
    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);
    }