Beispiel #1
0
 public void SendChunk(Server server, int clientid, Vector3i globalpos, Vector3i chunkpos)
 {
     ClientOnServer c = server.clients[clientid];
     ServerChunk chunk = server.d_Map.GetChunk(globalpos.x, globalpos.y, globalpos.z);
     server.ClientSeenChunkSet(clientid, chunkpos.x, chunkpos.y, chunkpos.z, (int)server.simulationcurrentframe);
     //sent++;
     byte[] compressedchunk;
     if (MapUtil.IsSolidChunk(chunk.data) && chunk.data[0] == 0)
     {
         //don't send empty chunk.
         compressedchunk = null;
     }
     else
     {
         compressedchunk = server.CompressChunkNetwork(chunk.data);
         //todo!
         //commented because it was being sent too early, before full column was generated.
         //if (!c.heightmapchunksseen.ContainsKey(new Vector2i(v.x, v.y)))
         {
             byte[] heightmapchunk = Misc.UshortArrayToByteArray(server.d_Map.GetHeightmapChunk(globalpos.x, globalpos.y));
             byte[] compressedHeightmapChunk = server.d_NetworkCompression.Compress(heightmapchunk);
             Packet_ServerHeightmapChunk p1 = new Packet_ServerHeightmapChunk()
             {
                 X = globalpos.x,
                 Y = globalpos.y,
                 SizeX = Server.chunksize,
                 SizeY = Server.chunksize,
                 CompressedHeightmap = compressedHeightmapChunk,
             };
             server.SendPacket(clientid, server.Serialize(new Packet_Server() { Id = Packet_ServerIdEnum.HeightmapChunk, HeightmapChunk = p1 }));
             c.heightmapchunksseen[new Vector2i(globalpos.x, globalpos.y)] = (int)server.simulationcurrentframe;
         }
     }
     if (compressedchunk != null)
     {
         foreach (byte[] part in Server.Parts(compressedchunk, 1024))
         {
             Packet_ServerChunkPart p1 = new Packet_ServerChunkPart()
             {
                 CompressedChunkPart = part,
             };
             server.SendPacket(clientid, server.Serialize(new Packet_Server() { Id = Packet_ServerIdEnum.ChunkPart, ChunkPart = p1 }));
         }
     }
     Packet_ServerChunk p = new Packet_ServerChunk()
     {
         X = globalpos.x,
         Y = globalpos.y,
         Z = globalpos.z,
         SizeX = Server.chunksize,
         SizeY = Server.chunksize,
         SizeZ = Server.chunksize,
     };
     server.SendPacket(clientid, server.Serialize(new Packet_Server() { Id = Packet_ServerIdEnum.Chunk_, Chunk_ = p }));
 }
Beispiel #2
0
        public void SendChunk(Server server, int clientid, Vector3i globalpos, Vector3i chunkpos)
        {
            ClientOnServer c     = server.clients[clientid];
            ServerChunk    chunk = server.d_Map.GetChunk(globalpos.x, globalpos.y, globalpos.z);

            server.ClientSeenChunkSet(clientid, chunkpos.x, chunkpos.y, chunkpos.z, (int)server.simulationcurrentframe);
            //sent++;
            byte[] compressedchunk;
            if (MapUtil.IsSolidChunk(chunk.data) && chunk.data[0] == 0)
            {
                //don't send empty chunk.
                compressedchunk = null;
            }
            else
            {
                compressedchunk = server.CompressChunkNetwork(chunk.data);
                //TODO: commented because it was being sent too early, before full column was generated.
                //if (!c.heightmapchunksseen.ContainsKey(new Vector2i(v.x, v.y)))
                {
                    byte[] heightmapchunk           = Misc.UshortArrayToByteArray(server.d_Map.GetHeightmapChunk(globalpos.x, globalpos.y));
                    byte[] compressedHeightmapChunk = server.d_NetworkCompression.Compress(heightmapchunk);
                    Packet_ServerHeightmapChunk p1  = new Packet_ServerHeightmapChunk()
                    {
                        X     = globalpos.x,
                        Y     = globalpos.y,
                        SizeX = Server.chunksize,
                        SizeY = Server.chunksize,
                        CompressedHeightmap = compressedHeightmapChunk,
                    };
                    server.SendPacket(clientid, server.Serialize(new Packet_Server()
                    {
                        Id             = Packet_ServerIdEnum.HeightmapChunk,
                        HeightmapChunk = p1
                    }));
                    c.heightmapchunksseen[new Vector2i(globalpos.x, globalpos.y)] = (int)server.simulationcurrentframe;
                }
            }
            if (compressedchunk != null)
            {
                foreach (byte[] part in Server.Parts(compressedchunk, 1024))
                {
                    Packet_ServerChunkPart p1 = new Packet_ServerChunkPart()
                    {
                        CompressedChunkPart = part,
                    };
                    server.SendPacket(clientid, server.Serialize(new Packet_Server()
                    {
                        Id        = Packet_ServerIdEnum.ChunkPart,
                        ChunkPart = p1
                    }));
                }
            }
            Packet_ServerChunk p = new Packet_ServerChunk()
            {
                X     = globalpos.x,
                Y     = globalpos.y,
                Z     = globalpos.z,
                SizeX = Server.chunksize,
                SizeY = Server.chunksize,
                SizeZ = Server.chunksize,
            };

            server.SendPacket(clientid, server.Serialize(new Packet_Server()
            {
                Id     = Packet_ServerIdEnum.Chunk_,
                Chunk_ = p
            }));
        }