示例#1
0
    /// Handle incoming commands from the client.
    void ClientCommandHandler(NetworkMessage netMsg)
    {
        switch (netMsg.msgType)
        {
        case LevelMsgType.LevelRequest:
            /// Player has notified of current position. Check to see if regions of interest
            /// need to be updated.
        {
            LevelSyncMessage m = netMsg.ReadMessage <LevelSyncMessage>();
//                 Debug.Log ("Got message: " + netMsg.conn.connectionId + " : ");

            sendPlayerUpdate(netMsg.conn.connectionId, m.playerPosition, m.visibleRadius);

            updatePlayerProxy(netMsg.conn.connectionId);
        }
        break;

        case LevelMsgType.LevelUpdate:
            /// Player has changed the level in a way that affects other players.
        {
            Debug.Log("Changed level");
            BlockAddMessage m = netMsg.ReadMessage <BlockAddMessage>();
            levelStructure.setBlock(m.px + 0.5f, m.pz + 0.5f, m.height, m.blocktype, netMsg.conn.connectionId);
        }
        break;

        case LevelMsgType.EmoteSingleSender:
            /// Receiving a single emote from a player.
        {
            SendEmoteMessageAndClientID m = netMsg.ReadMessage <SendEmoteMessageAndClientID> ();
            sendAllClientEmote(m.netId, m.emoteType);
            Debug.Log("Emote Received from Client.");
        }
        break;

        case LevelMsgType.ResourceUpdate:
        {
            ResourceTakeMessage m = netMsg.ReadMessage <ResourceTakeMessage> ();
            int height            = Math.Max((int)(m.position.y), (int)WorldManager.minLevelHeight);
            int blockHeight       = (int)(height - WorldManager.minLevelHeight);
            levelStructure.updateResource(m.position.x + 0.5f, m.position.z + 0.5f, blockHeight, m.amount);
        }
        break;

        case LevelMsgType.PlayerFlagRequest:
        {
            PlayerFlagMessage m = netMsg.ReadMessage <PlayerFlagMessage> ();
            int height          = Math.Max((int)(m.position.y), (int)WorldManager.minLevelHeight);
            int blockHeight     = (int)(height - WorldManager.minLevelHeight);
            levelStructure.updateFlag(m.position.x + 0.5f, m.position.z + 0.5f, blockHeight, netMsg.conn.connectionId);
        }
        break;

        default:
        {
            Debug.Log("Unexpected message type");
        }
        break;
        }
    }
示例#2
0
    // Update is called once per frame
    void Update()
    {
        // Check if the player has been created, and associate with that player if so.
        if (!foundPlayer)
        {
            if (ClientScene.localPlayers.Count > 0)
            {
                PlayerMove player = ClientScene.localPlayers[0].gameObject.GetComponent <PlayerMove>();
                player.setLocalWorld(this);
                foundPlayer = true;
            }
        }

        // Send player position to the server.
        NetworkManager nm = NetworkManager.singleton;

        if ((nm.client != null) && (foundPlayer))
        {
            if (ClientScene.localPlayers.Count > 0)
            {
                PlayerController player = ClientScene.localPlayers[0];

                LevelSyncMessage m = new LevelSyncMessage();
                m.playerPosition = player.gameObject.transform.position;
                m.visibleRadius  = viewRadius;

                NetworkManager.singleton.client.Send(LevelMsgType.LevelRequest, m);
            }
        }
    }