public float[,] GetHeightmap(Index2 chunkIndex) { float[,] values = new float[Chunk.CHUNKSIZE_X, Chunk.CHUNKSIZE_Y]; chunkIndex = new Index2(chunkIndex.X * Chunk.CHUNKSIZE_X, chunkIndex.Y * Chunk.CHUNKSIZE_Y); float[,] heights = BiomeNoiseGenerator.GetTileableNoiseMap2D(chunkIndex.X, chunkIndex.Y, Chunk.CHUNKSIZE_X, Chunk.CHUNKSIZE_Y, Planet.Size.X * Chunk.CHUNKSIZE_X, Planet.Size.Y * Chunk.CHUNKSIZE_Y); for (int x = 0; x < Chunk.CHUNKSIZE_X; x++) { for (int y = 0; y < Chunk.CHUNKSIZE_Y; y++) { values[x, y] = (heights[x, y] / 2 + 0.5f) * ValueRange + ValueRangeOffset; } } return(values); }
public override float[,] GetHeightmap(Index2 chunkIndex) { float[,] values = new float[Chunk.CHUNKSIZE_X, Chunk.CHUNKSIZE_Y]; Index2 blockIndex = new Index2(chunkIndex.X * Chunk.CHUNKSIZE_X, chunkIndex.Y * Chunk.CHUNKSIZE_Y); float[,] regions = BiomeNoiseGenerator.GetTileableNoiseMap2D(blockIndex.X, blockIndex.Y, Chunk.CHUNKSIZE_X, Chunk.CHUNKSIZE_Y, Planet.Size.X * Chunk.CHUNKSIZE_X, Planet.Size.Y * Chunk.CHUNKSIZE_Y); float[][,] biomeValues = new float[SubBiomes.Count][, ]; for (int i = 0; i < SubBiomes.Count; i++) { biomeValues[i] = SubBiomes[i].GetHeightmap(chunkIndex); } for (int x = 0; x < Chunk.CHUNKSIZE_X; x++) { for (int y = 0; y < Chunk.CHUNKSIZE_Y; y++) { float region = regions[x, y] / 2 + 0.5f; int biome2; int biome1 = ChooseBiome(region, out biome2); float interpolationValue = 0f; if (biome2 != -1) { interpolationValue = CalculateInterpolationValue(region, SubBiomes[biome1], SubBiomes[biome2]); values[x, y] = (biomeValues[biome2][x, y] * interpolationValue) + (biomeValues[biome1][x, y] * (1 - interpolationValue)); } else { values[x, y] = biomeValues[biome1][x, y]; } } } return(values); }