// create the base heightmap
void Raise()
{
Random raiseRand = new Random(random.Next());
FilteredNoise raiseNoise1 = new FilteredNoise(new PerlinNoise(raiseRand, genParams.TerrainDetailOctaves),
new PerlinNoise(raiseRand, genParams.TerrainDetailOctaves));
FilteredNoise raiseNoise2 = new FilteredNoise(new PerlinNoise(raiseRand, genParams.TerrainDetailOctaves),
new PerlinNoise(raiseRand, genParams.TerrainDetailOctaves));
PerlinNoise raiseNoise3 = new PerlinNoise(raiseRand, genParams.TerrainFeatureOctaves);
const double scale = 1.3;
for (int x = 0; x < genParams.MapWidth; x++)
{
for (int y = 0; y < genParams.MapLength; y++)
{
double d2 = raiseNoise1.GetNoise(x * scale, y * scale) / 6 - 4;
double d3 = raiseNoise2.GetNoise(x * scale, y * scale) / 5 + 10 - 4;
double d4 = raiseNoise3.GetNoise(x, y) / 8;
if (d4 > 0)
{
d3 = d2;
}
double elevation = Math.Max(d2, d3) / 2;
if (elevation < 0)
{
elevation *= 0.8;
}
heightmap[(x + y * genParams.MapWidth)] = (int)elevation;
}
}
}