Navigation Menu

Skip to content

Commit

Permalink
Mapgen: Optimize biomemap creation by combining with generateBiomes
Browse files Browse the repository at this point in the history
  • Loading branch information
kwolekr committed Jun 5, 2016
1 parent d24f384 commit d4457ef
Show file tree
Hide file tree
Showing 6 changed files with 18 additions and 11 deletions.
20 changes: 17 additions & 3 deletions src/mapgen.cpp
Expand Up @@ -524,6 +524,10 @@ MapgenBasic::~MapgenBasic()

MgStoneType MapgenBasic::generateBiomes()
{
// can't generate biomes without a biome generator!
assert(biomegen);
assert(biomemap);

v3s16 em = vm->m_area.getExtent();
u32 index = 0;
MgStoneType stone_type = MGSTONE_STONE;
Expand All @@ -546,6 +550,8 @@ MgStoneType MapgenBasic::generateBiomes()
bool river_water_above = c_above == c_river_water_source;
bool water_above = c_above == c_water_source || river_water_above;

biomemap[index] = BIOME_NONE;

// If there is air or water above enable top/filler placement, otherwise force
// nplaced to stone level by setting a number exceeding any possible filler depth.
u16 nplaced = (air_above || water_above) ? 0 : U16_MAX;
Expand All @@ -560,11 +566,19 @@ MgStoneType MapgenBasic::generateBiomes()
// 1. At the surface of stone below air or water.
// 2. At the surface of water below air.
// 3. When stone or water is detected but biome has not yet been calculated.
if ((c == c_stone && (air_above || water_above || !biome))
|| ((c == c_water_source || c == c_river_water_source)
&& (air_above || !biome))) {
bool is_stone_surface = (c == c_stone) &&
(air_above || water_above || !biome);

bool is_water_surface =
(c == c_water_source || c == c_river_water_source) &&
(air_above || !biome);

if (is_stone_surface || is_water_surface) {
biome = biomegen->getBiomeAtIndex(index, y);

if (biomemap[index] == BIOME_NONE && is_stone_surface)
biomemap[index] = biome->index;

depth_top = biome->depth_top;
base_filler = MYMAX(depth_top +
biome->depth_filler +
Expand Down
1 change: 0 additions & 1 deletion src/mapgen_flat.cpp
Expand Up @@ -192,7 +192,6 @@ void MapgenFlat::makeChunk(BlockMakeData *data)

// Init biome generator, place biome-specific nodes, and build biomemap
biomegen->calcBiomeNoise(node_min);
biomegen->getBiomes(heightmap);
MgStoneType stone_type = generateBiomes();

if (flags & MG_CAVES)
Expand Down
1 change: 0 additions & 1 deletion src/mapgen_fractal.cpp
Expand Up @@ -208,7 +208,6 @@ void MapgenFractal::makeChunk(BlockMakeData *data)

// Init biome generator, place biome-specific nodes, and build biomemap
biomegen->calcBiomeNoise(node_min);
biomegen->getBiomes(heightmap);
MgStoneType stone_type = generateBiomes();

if (flags & MG_CAVES)
Expand Down
1 change: 0 additions & 1 deletion src/mapgen_v5.cpp
Expand Up @@ -190,7 +190,6 @@ void MapgenV5::makeChunk(BlockMakeData *data)

// Init biome generator, place biome-specific nodes, and build biomemap
biomegen->calcBiomeNoise(node_min);
biomegen->getBiomes(heightmap);
MgStoneType stone_type = generateBiomes();

// Generate caves
Expand Down
1 change: 0 additions & 1 deletion src/mapgen_v7.cpp
Expand Up @@ -219,7 +219,6 @@ void MapgenV7::makeChunk(BlockMakeData *data)

// Init biome generator, place biome-specific nodes, and build biomemap
biomegen->calcBiomeNoise(node_min);
biomegen->getBiomes(heightmap);
MgStoneType stone_type = generateBiomes();

if (flags & MG_CAVES)
Expand Down
5 changes: 1 addition & 4 deletions src/mapgen_valleys.cpp
Expand Up @@ -250,10 +250,7 @@ void MapgenValleys::makeChunk(BlockMakeData *data)
// Generate base terrain with initial heightmaps
s16 stone_surface_max_y = generateTerrain();

// Build biomemap
m_bgen->getBiomes(heightmap);

// Place biome-specific nodes
// Place biome-specific nodes and build biomemap
MgStoneType stone_type = generateBiomes();

// Cave creation.
Expand Down

0 comments on commit d4457ef

Please sign in to comment.