public void updateFlag(float x, float y, float z, int connid) { int rx = ((int)x) % blockSize; int ry = ((int)y) % blockSize; int rz = ((int)z); RegionBlock rb = getRegion(x, y); if (rb != null) { if (rb.removeFlag(rx, ry, rz + 1, connid)) { rb.deleteBlock(rx, ry, rz + 1); PlayerFlagMessage m = new PlayerFlagMessage(); m.removed = true; NetworkServer.SendToClient(connid, LevelMsgType.PlayerFlagRequest, m); refreshMesh(); } else { PlayerFlagMessage m = new PlayerFlagMessage(); m.removed = false; NetworkServer.SendToClient(connid, LevelMsgType.PlayerFlagRequest, m); } } refreshMesh(); }
/// 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; } }
public void removeFlag() { inTrigger = false; PlayerFlagMessage m = new PlayerFlagMessage(); m.position = flagShortest.transform.position; NetworkManager.singleton.client.Send(LevelMsgType.PlayerFlagRequest, m); }
/// Handle incoming updates from the server. void ServerCommandHandler(NetworkMessage netMsg) { switch (netMsg.msgType) { case LevelMsgType.LevelResponse: // Received an updated region block from the server. Update // the cache, and ensure that the local visual representation // is consistent. { RegionBlock rb = netMsg.ReadMessage <RegionBlock>(); // Debug.Log ("Server Got message: " + rb.blockSize); MeshFilter mf = GetComponent <MeshFilter>(); rb.convertToMesh(mf.mesh); Vector2 rbpos = rb.getPosition(); Vector3 llbpos = new Vector3(rbpos.x, WorldManager.minLevelHeight, rbpos.y); LocalLevelBlock llb = findLevelBlock(llbpos); if (llb == null) { llb = addLevelBlock(rb, llbpos); // llb should now be valid. llb.region.placeBlocks(llb.gobject.transform); } else { // if version is newer than the one we already have, then update it. if (rb.timeLastChanged > llb.region.timeLastChanged) { llb.region = rb; // Debug.Log ("Got update ..................................>"); llb.region.placeBlocks(llb.gobject.transform); } } flushRegions(); } break; case LevelMsgType.PlayerList: /// Message containing list of active players. { } break; case LevelMsgType.EmoteSingleSender: /// Handle incoming emotes from server { SendEmoteMessageAndClientID m = netMsg.ReadMessage <SendEmoteMessageAndClientID> (); displayEmote(m.emoteType, m.netId); Debug.Log("Incoming emote to client from server from network id: " + m.netId); } break; case LevelMsgType.PlayerFlagRequest: { PlayerFlagMessage m = netMsg.ReadMessage <PlayerFlagMessage> (); if (m.removed == false) { //Do UI message to player here informing them of failure to remove flag. } if (m.removed == true) { PlayerMove player = ClientScene.localPlayers[0].gameObject.GetComponent <PlayerMove>(); player.playerFlagPlaced = false; } } break; default: { Debug.Log("Unexpected message type in LocalWorld"); } break; } }