private void HandleChunkReceived(NetDataReader reader) { var worldId = reader.GetInt(); var chunkPositionX = reader.GetInt(); var chunkPositionY = reader.GetInt(); var chunkSize = reader.GetInt(); var chunkLength = chunkSize * chunkSize; var chunkStaticTileData = new ChunkStaticTileData[chunkLength]; for (var i = 0; i < chunkLength; i++) { var tileId = reader.GetUShort(); var z = reader.GetInt(); var hue = reader.GetInt(); chunkStaticTileData[i] = new ChunkStaticTileData(tileId, z, hue); } var chunkItemTileData = new ChunkItemTileData[chunkLength]; for (var i = 0; i < chunkLength; i++) { var tileId = reader.GetUShort(); var z = reader.GetInt(); var hue = reader.GetInt(); chunkItemTileData[i] = new ChunkItemTileData(tileId, z, hue); } var chunkData = new ChunkData(worldId, new Point(chunkPositionX, chunkPositionY), chunkStaticTileData, chunkItemTileData); var chunkReceived = ChunkReceived; chunkReceived?.Invoke(chunkData); }
private void HandleRequestChunk(NetworkClient client, NetDataReader reader) { var worldId = reader.GetInt(); var chunkPositionX = reader.GetInt(); var chunkPositionY = reader.GetInt(); // ask worldProvider for world by Id // get world chunk for chunkPosition // serialize chunkdata var chunkLength = ChunkData.ChunkSize * ChunkData.ChunkSize; var chunkStaticTileData = new ChunkStaticTileData[chunkLength]; for (var i = 0; i < chunkLength; i++) { ushort tileId = 100; var z = 0; var hue = 0; chunkStaticTileData[i] = new ChunkStaticTileData(tileId, z, hue); } var chunkItemTileData = new ChunkItemTileData[chunkLength]; for (var i = 0; i < chunkLength; i++) { ushort tileId = 25000; var z = 10; var hue = 0; chunkItemTileData[i] = new ChunkItemTileData(tileId, z, hue); } var chunkData = new ChunkData(worldId, new Point(chunkPositionX, chunkPositionY), chunkStaticTileData, chunkItemTileData); var writer = _writerPool.Get(); writer.Put(PacketIds.S2C.RequestedChunk); writer.Put(chunkData); client.Send(writer); _writerPool.Return(writer); _logger.Debug("NetworkServer: Sent ChunkData for Chunk {@ChunkPositionX}, {@ChunkPositionY} to {@ClientAddress}:{@ClientPort}", chunkPositionX, chunkPositionY, client.Address, client.Port); }