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); }
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); }