Example #1
0
        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);
        }
Example #2
0
        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);
        }