/// 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; } }
// 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); } } }