public void GenerateMap(MapGeneratorParameters parameters)
{
this.parameters = parameters;
double[,] heightmap = GenerateHeightmap(map.MapSizeX, map.MapSizeY);
Feedback("Filling...");
map.ClearMap();
double minheight = double.MaxValue;
for (int x = 0; x < map.MapSizeX; x++)
{
for (int y = 0; y < map.MapSizeY; y++)
{
double level = heightmap[x, y];
int levelQuantized = (int)(level * map.MapSizeZ);
int waterQuantized = (int)(parameters.water * map.MapSizeZ);
if (levelQuantized < minheight)
{
minheight = levelQuantized;
}
if (level > parameters.water)
{
level = (level - parameters.water) * parameters.smoothingOver + parameters.water;
map.SetBlock(x, y, levelQuantized, data.TileIdGrass);
if (!parameters.hollow)
{
for (int i = levelQuantized - 1; i > 0; i--)
{
if (levelQuantized - i < 5)
{
map.SetBlock(x, y, i, data.TileIdDirt);
}
else
{
map.SetBlock(x, y, i, data.TileIdStone);
}
}
}
}
else
{
level = (level - parameters.water) * parameters.smoothingUnder + parameters.water;
map.SetBlock(x, y, waterQuantized, data.TileIdWater);
if (!parameters.hollow)
{
for (int i = waterQuantized - 1; i >= levelQuantized; i--)
{
map.SetBlock(x, y, i, data.TileIdWater);
}
}
map.SetBlock(x, y, levelQuantized, data.TileIdSand);
if (!parameters.hollow)
{
for (int i = levelQuantized - 1; i > 0; i--)
{
map.SetBlock(x, y, i, data.TileIdStone);
}
}
}
}
}
//map.MakeFloodBarrier();
//map.Save(filename);
Feedback("Done.");
}