Пример #1
0
 public override byte[] GetLODSix(int seed, int seed2, int seed3, int seed4, int seed5, Vector3i cpos)
 {
     byte[] b = new byte[5 * 5 * 5 * 2];
     if (cpos.Z > MaxNonAirHeight)
     {
         // AIR
         return(b);
     }
     else if (cpos.Z < 0)
     {
         // STONE
         Material enf  = Material.STONE;
         ushort   enfu = (ushort)enf;
         for (int i = 0; i < b.Length; i += 2)
         {
             b[i]     = (byte)(enfu & 0xFF);
             b[i + 1] = (byte)((enfu >> 8) & 0xFF);
         }
         return(b);
     }
     for (int x = 0; x < 5; x++)
     {
         for (int y = 0; y < 5; y++)
         {
             double      hheight = GetHeight(seed, seed2, seed3, seed4, seed5, cpos.X * Chunk.CHUNK_SIZE + Chunk.CHUNK_SIZE * 0.25 * x, cpos.Y * Chunk.CHUNK_SIZE + Chunk.CHUNK_SIZE * 0.25 * y, false);
             SimpleBiome biome   = Biomes.BiomeFor(seed2, seed3, seed4, cpos.X * Chunk.CHUNK_SIZE + Chunk.CHUNK_SIZE * 0.25 * x, cpos.Y * Chunk.CHUNK_SIZE + Chunk.CHUNK_SIZE * 0.25 * y, cpos.Z * Chunk.CHUNK_SIZE + Chunk.CHUNK_SIZE * 0.5, hheight) as SimpleBiome;
             double      topf    = (hheight - cpos.Z * Chunk.CHUNK_SIZE) / 5.0;
             int         top     = (int)Math.Round(topf);
             for (int z = 0; z < Math.Min(top - 5, 5); z++)
             {
                 ushort lowType = (ushort)biome.BaseBlock();
                 int    loc     = Chunk.ApproxBlockIndex(x, y, z, 5) * 2;
                 b[loc]     = (byte)(lowType & 0xFF);
                 b[loc + 1] = (byte)((lowType >> 8) & 0xFF);
             }
             for (int z = Math.Max(top - 5, 0); z < Math.Min(top - 1, 5); z++)
             {
                 ushort lowType = (ushort)biome.SecondLayerBlock();
                 int    loc     = Chunk.ApproxBlockIndex(x, y, z, 5) * 2;
                 b[loc]     = (byte)(lowType & 0xFF);
                 b[loc + 1] = (byte)((lowType >> 8) & 0xFF);
             }
             for (int z = Math.Max(top - 1, 0); z < Math.Min(top, 5); z++)
             {
                 ushort lowType = (ushort)biome.SurfaceBlock();
                 int    loc     = Chunk.ApproxBlockIndex(x, y, z, 5) * 2;
                 b[loc]     = (byte)(lowType & 0xFF);
                 b[loc + 1] = (byte)((lowType >> 8) & 0xFF);
             }
         }
     }
     return(b);
 }
Пример #2
0
 public override byte[] GetSuperLOD(int seed, int seed2, int seed3, int seed4, int seed5, Vector3i cpos)
 {
     byte[] b = new byte[2 * 2 * 2 * 2];
     if (cpos.Z > MaxNonAirHeight)
     {
         // AIR
         return(b);
     }
     else if (cpos.Z < 0)
     {
         // STONE
         Material enf  = Material.STONE;
         ushort   enfu = (ushort)enf;
         for (int i = 0; i < b.Length; i += 2)
         {
             b[i]     = (byte)(enfu & 0xFF);
             b[i + 1] = (byte)((enfu >> 8) & 0xFF);
         }
         return(b);
     }
     for (int x = 0; x < 2; x++)
     {
         for (int y = 0; y < 2; y++)
         {
             double      hheight = GetHeight(seed, seed2, seed3, seed4, seed5, cpos.X * Chunk.CHUNK_SIZE + Chunk.CHUNK_SIZE * 0.25 * x, cpos.Y * Chunk.CHUNK_SIZE + Chunk.CHUNK_SIZE * 0.25 * y, false);
             SimpleBiome biome   = Biomes.BiomeFor(seed2, seed3, seed4, cpos.X * Chunk.CHUNK_SIZE + Chunk.CHUNK_SIZE * 0.25 * x, cpos.Y * Chunk.CHUNK_SIZE + Chunk.CHUNK_SIZE * 0.25 * y, cpos.Z * Chunk.CHUNK_SIZE + Chunk.CHUNK_SIZE * 0.5, hheight) as SimpleBiome;
             if (hheight > cpos.Z * Chunk.CHUNK_SIZE)
             {
                 if (hheight > (cpos.Z + 1) * Chunk.CHUNK_SIZE)
                 {
                     ushort lowType = (ushort)biome.BaseBlock();
                     for (int z = 0; z < 2; z++)
                     {
                         int loc = Chunk.ApproxBlockIndex(x, y, z, 2) * 2;
                         b[loc]     = (byte)(lowType & 0xFF);
                         b[loc + 1] = (byte)((lowType >> 8) & 0xFF);
                     }
                 }
                 else if (hheight > (cpos.Z + 0.5) * Chunk.CHUNK_SIZE)
                 {
                     ushort lowTypeA = (ushort)biome.BaseBlock();
                     int    locA     = Chunk.ApproxBlockIndex(x, y, 0, 2) * 2;
                     b[locA]     = (byte)(lowTypeA & 0xFF);
                     b[locA + 1] = (byte)((lowTypeA >> 8) & 0xFF);
                     ushort lowTypeB = (ushort)biome.SurfaceBlock();
                     int    locB     = Chunk.ApproxBlockIndex(x, y, 1, 2) * 2;
                     b[locB]     = (byte)(lowTypeB & 0xFF);
                     b[locB + 1] = (byte)((lowTypeB >> 8) & 0xFF);
                 }
                 else
                 {
                     ushort lowTypeB = (ushort)biome.SurfaceBlock();
                     int    locB     = Chunk.ApproxBlockIndex(x, y, 0, 2) * 2;
                     b[locB]     = (byte)(lowTypeB & 0xFF);
                     b[locB + 1] = (byte)((lowTypeB >> 8) & 0xFF);
                 }
             }
         }
     }
     return(b);
 }