aboutsummaryrefslogtreecommitdiff
path: root/src/mapgen/mg_biome.cpp
diff options
context:
space:
mode:
authorElias Fleckenstein <54945686+EliasFleckenstein03@users.noreply.github.com>2020-11-04 16:44:42 +0100
committerGitHub <noreply@github.com>2020-11-04 16:44:42 +0100
commit5d9ae5a91c544fc7fbd475decf47cef7e09ef8fc (patch)
treec980d614fec4a5495798be3e79e033229062c3cd /src/mapgen/mg_biome.cpp
parent28f6a79706b088c37268a59d90878220dc4ef9c7 (diff)
parent3af10766fd2b58b068e970266724d7eb10e9316b (diff)
downloaddragonfireclient-5d9ae5a91c544fc7fbd475decf47cef7e09ef8fc.tar.xz
Merge branch 'master' into master
Diffstat (limited to 'src/mapgen/mg_biome.cpp')
-rw-r--r--src/mapgen/mg_biome.cpp181
1 files changed, 79 insertions, 102 deletions
diff --git a/src/mapgen/mg_biome.cpp b/src/mapgen/mg_biome.cpp
index 610c38594..ea7c24721 100644
--- a/src/mapgen/mg_biome.cpp
+++ b/src/mapgen/mg_biome.cpp
@@ -28,31 +28,28 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "porting.h"
#include "settings.h"
-
///////////////////////////////////////////////////////////////////////////////
-
-BiomeManager::BiomeManager(Server *server) :
- ObjDefManager(server, OBJDEF_BIOME)
+BiomeManager::BiomeManager(Server *server) : ObjDefManager(server, OBJDEF_BIOME)
{
m_server = server;
// Create default biome to be used in case none exist
Biome *b = new Biome;
- b->name = "default";
- b->flags = 0;
- b->depth_top = 0;
- b->depth_filler = -MAX_MAP_GENERATION_LIMIT;
+ b->name = "default";
+ b->flags = 0;
+ b->depth_top = 0;
+ b->depth_filler = -MAX_MAP_GENERATION_LIMIT;
b->depth_water_top = 0;
- b->depth_riverbed = 0;
- b->min_pos = v3s16(-MAX_MAP_GENERATION_LIMIT,
- -MAX_MAP_GENERATION_LIMIT, -MAX_MAP_GENERATION_LIMIT);
- b->max_pos = v3s16(MAX_MAP_GENERATION_LIMIT,
- MAX_MAP_GENERATION_LIMIT, MAX_MAP_GENERATION_LIMIT);
- b->heat_point = 0.0;
- b->humidity_point = 0.0;
- b->vertical_blend = 0;
+ b->depth_riverbed = 0;
+ b->min_pos = v3s16(-MAX_MAP_GENERATION_LIMIT, -MAX_MAP_GENERATION_LIMIT,
+ -MAX_MAP_GENERATION_LIMIT);
+ b->max_pos = v3s16(MAX_MAP_GENERATION_LIMIT, MAX_MAP_GENERATION_LIMIT,
+ MAX_MAP_GENERATION_LIMIT);
+ b->heat_point = 0.0;
+ b->humidity_point = 0.0;
+ b->vertical_blend = 0;
b->m_nodenames.emplace_back("mapgen_stone");
b->m_nodenames.emplace_back("mapgen_stone");
@@ -72,7 +69,6 @@ BiomeManager::BiomeManager(Server *server) :
add(b);
}
-
void BiomeManager::clear()
{
EmergeManager *emerge = m_server->getEmergeManager();
@@ -91,7 +87,6 @@ void BiomeManager::clear()
m_objects.resize(1);
}
-
BiomeManager *BiomeManager::clone() const
{
auto mgr = new BiomeManager();
@@ -101,30 +96,25 @@ BiomeManager *BiomeManager::clone() const
return mgr;
}
-
// For BiomeGen type 'BiomeGenOriginal'
float BiomeManager::getHeatAtPosOriginal(v3s16 pos, NoiseParams &np_heat,
- NoiseParams &np_heat_blend, u64 seed) const
+ NoiseParams &np_heat_blend, u64 seed) const
{
- return
- NoisePerlin2D(&np_heat, pos.X, pos.Z, seed) +
- NoisePerlin2D(&np_heat_blend, pos.X, pos.Z, seed);
+ return NoisePerlin2D(&np_heat, pos.X, pos.Z, seed) +
+ NoisePerlin2D(&np_heat_blend, pos.X, pos.Z, seed);
}
-
// For BiomeGen type 'BiomeGenOriginal'
float BiomeManager::getHumidityAtPosOriginal(v3s16 pos, NoiseParams &np_humidity,
- NoiseParams &np_humidity_blend, u64 seed) const
+ NoiseParams &np_humidity_blend, u64 seed) const
{
- return
- NoisePerlin2D(&np_humidity, pos.X, pos.Z, seed) +
- NoisePerlin2D(&np_humidity_blend, pos.X, pos.Z, seed);
+ return NoisePerlin2D(&np_humidity, pos.X, pos.Z, seed) +
+ NoisePerlin2D(&np_humidity_blend, pos.X, pos.Z, seed);
}
-
// For BiomeGen type 'BiomeGenOriginal'
-const Biome *BiomeManager::getBiomeFromNoiseOriginal(float heat,
- float humidity, v3s16 pos) const
+const Biome *BiomeManager::getBiomeFromNoiseOriginal(
+ float heat, float humidity, v3s16 pos) const
{
Biome *biome_closest = nullptr;
Biome *biome_closest_blend = nullptr;
@@ -133,8 +123,8 @@ const Biome *BiomeManager::getBiomeFromNoiseOriginal(float heat,
for (size_t i = 1; i < getNumObjects(); i++) {
Biome *b = (Biome *)getRaw(i);
- if (!b ||
- pos.Y < b->min_pos.Y || pos.Y > b->max_pos.Y + b->vertical_blend ||
+ if (!b || pos.Y < b->min_pos.Y ||
+ pos.Y > b->max_pos.Y + b->vertical_blend ||
pos.X < b->min_pos.X || pos.X > b->max_pos.X ||
pos.Z < b->min_pos.Z || pos.Z > b->max_pos.Z)
continue;
@@ -159,52 +149,48 @@ const Biome *BiomeManager::getBiomeFromNoiseOriginal(float heat,
if (biome_closest_blend && dist_min_blend <= dist_min &&
rng.range(0, biome_closest_blend->vertical_blend) >=
- pos.Y - biome_closest_blend->max_pos.Y)
+ pos.Y - biome_closest_blend->max_pos.Y)
return biome_closest_blend;
return (biome_closest) ? biome_closest : (Biome *)getRaw(BIOME_NONE);
}
-
////////////////////////////////////////////////////////////////////////////////
void BiomeParamsOriginal::readParams(const Settings *settings)
{
- settings->getNoiseParams("mg_biome_np_heat", np_heat);
- settings->getNoiseParams("mg_biome_np_heat_blend", np_heat_blend);
- settings->getNoiseParams("mg_biome_np_humidity", np_humidity);
+ settings->getNoiseParams("mg_biome_np_heat", np_heat);
+ settings->getNoiseParams("mg_biome_np_heat_blend", np_heat_blend);
+ settings->getNoiseParams("mg_biome_np_humidity", np_humidity);
settings->getNoiseParams("mg_biome_np_humidity_blend", np_humidity_blend);
}
-
void BiomeParamsOriginal::writeParams(Settings *settings) const
{
- settings->setNoiseParams("mg_biome_np_heat", np_heat);
- settings->setNoiseParams("mg_biome_np_heat_blend", np_heat_blend);
- settings->setNoiseParams("mg_biome_np_humidity", np_humidity);
+ settings->setNoiseParams("mg_biome_np_heat", np_heat);
+ settings->setNoiseParams("mg_biome_np_heat_blend", np_heat_blend);
+ settings->setNoiseParams("mg_biome_np_humidity", np_humidity);
settings->setNoiseParams("mg_biome_np_humidity_blend", np_humidity_blend);
}
-
////////////////////////////////////////////////////////////////////////////////
-BiomeGenOriginal::BiomeGenOriginal(BiomeManager *biomemgr,
- BiomeParamsOriginal *params, v3s16 chunksize)
+BiomeGenOriginal::BiomeGenOriginal(
+ BiomeManager *biomemgr, BiomeParamsOriginal *params, v3s16 chunksize)
{
- m_bmgr = biomemgr;
+ m_bmgr = biomemgr;
m_params = params;
- m_csize = chunksize;
-
- noise_heat = new Noise(&params->np_heat,
- params->seed, m_csize.X, m_csize.Z);
- noise_humidity = new Noise(&params->np_humidity,
- params->seed, m_csize.X, m_csize.Z);
- noise_heat_blend = new Noise(&params->np_heat_blend,
- params->seed, m_csize.X, m_csize.Z);
- noise_humidity_blend = new Noise(&params->np_humidity_blend,
- params->seed, m_csize.X, m_csize.Z);
-
- heatmap = noise_heat->result;
+ m_csize = chunksize;
+
+ noise_heat = new Noise(&params->np_heat, params->seed, m_csize.X, m_csize.Z);
+ noise_humidity = new Noise(
+ &params->np_humidity, params->seed, m_csize.X, m_csize.Z);
+ noise_heat_blend = new Noise(
+ &params->np_heat_blend, params->seed, m_csize.X, m_csize.Z);
+ noise_humidity_blend = new Noise(
+ &params->np_humidity_blend, params->seed, m_csize.X, m_csize.Z);
+
+ heatmap = noise_heat->result;
humidmap = noise_humidity->result;
biomemap = new biome_t[m_csize.X * m_csize.Z];
@@ -216,7 +202,7 @@ BiomeGenOriginal::BiomeGenOriginal(BiomeManager *biomemgr,
BiomeGenOriginal::~BiomeGenOriginal()
{
- delete []biomemap;
+ delete[] biomemap;
delete noise_heat;
delete noise_humidity;
@@ -227,17 +213,17 @@ BiomeGenOriginal::~BiomeGenOriginal()
// Only usable in a mapgen thread
Biome *BiomeGenOriginal::calcBiomeAtPoint(v3s16 pos) const
{
- float heat =
- NoisePerlin2D(&m_params->np_heat, pos.X, pos.Z, m_params->seed) +
- NoisePerlin2D(&m_params->np_heat_blend, pos.X, pos.Z, m_params->seed);
- float humidity =
- NoisePerlin2D(&m_params->np_humidity, pos.X, pos.Z, m_params->seed) +
- NoisePerlin2D(&m_params->np_humidity_blend, pos.X, pos.Z, m_params->seed);
+ float heat = NoisePerlin2D(&m_params->np_heat, pos.X, pos.Z, m_params->seed) +
+ NoisePerlin2D(&m_params->np_heat_blend, pos.X, pos.Z,
+ m_params->seed);
+ float humidity = NoisePerlin2D(&m_params->np_humidity, pos.X, pos.Z,
+ m_params->seed) +
+ NoisePerlin2D(&m_params->np_humidity_blend, pos.X, pos.Z,
+ m_params->seed);
return calcBiomeFromNoise(heat, humidity, pos);
}
-
void BiomeGenOriginal::calcBiomeNoise(v3s16 pmin)
{
m_pmin = pmin;
@@ -248,46 +234,37 @@ void BiomeGenOriginal::calcBiomeNoise(v3s16 pmin)
noise_humidity_blend->perlinMap2D(pmin.X, pmin.Z);
for (s32 i = 0; i < m_csize.X * m_csize.Z; i++) {
- noise_heat->result[i] += noise_heat_blend->result[i];
+ noise_heat->result[i] += noise_heat_blend->result[i];
noise_humidity->result[i] += noise_humidity_blend->result[i];
}
}
-
biome_t *BiomeGenOriginal::getBiomes(s16 *heightmap, v3s16 pmin)
{
for (s16 zr = 0; zr < m_csize.Z; zr++)
- for (s16 xr = 0; xr < m_csize.X; xr++) {
- s32 i = zr * m_csize.X + xr;
- Biome *biome = calcBiomeFromNoise(
- noise_heat->result[i],
- noise_humidity->result[i],
- v3s16(pmin.X + xr, heightmap[i], pmin.Z + zr));
-
- biomemap[i] = biome->index;
- }
+ for (s16 xr = 0; xr < m_csize.X; xr++) {
+ s32 i = zr * m_csize.X + xr;
+ Biome *biome = calcBiomeFromNoise(noise_heat->result[i],
+ noise_humidity->result[i],
+ v3s16(pmin.X + xr, heightmap[i], pmin.Z + zr));
+
+ biomemap[i] = biome->index;
+ }
return biomemap;
}
-
Biome *BiomeGenOriginal::getBiomeAtPoint(v3s16 pos) const
{
- return getBiomeAtIndex(
- (pos.Z - m_pmin.Z) * m_csize.X + (pos.X - m_pmin.X),
- pos);
+ return getBiomeAtIndex((pos.Z - m_pmin.Z) * m_csize.X + (pos.X - m_pmin.X), pos);
}
-
Biome *BiomeGenOriginal::getBiomeAtIndex(size_t index, v3s16 pos) const
{
return calcBiomeFromNoise(
- noise_heat->result[index],
- noise_humidity->result[index],
- pos);
+ noise_heat->result[index], noise_humidity->result[index], pos);
}
-
Biome *BiomeGenOriginal::calcBiomeFromNoise(float heat, float humidity, v3s16 pos) const
{
Biome *biome_closest = nullptr;
@@ -297,8 +274,8 @@ Biome *BiomeGenOriginal::calcBiomeFromNoise(float heat, float humidity, v3s16 po
for (size_t i = 1; i < m_bmgr->getNumObjects(); i++) {
Biome *b = (Biome *)m_bmgr->getRaw(i);
- if (!b ||
- pos.Y < b->min_pos.Y || pos.Y > b->max_pos.Y + b->vertical_blend ||
+ if (!b || pos.Y < b->min_pos.Y ||
+ pos.Y > b->max_pos.Y + b->vertical_blend ||
pos.X < b->min_pos.X || pos.X > b->max_pos.X ||
pos.Z < b->min_pos.Z || pos.Z > b->max_pos.Z)
continue;
@@ -326,13 +303,12 @@ Biome *BiomeGenOriginal::calcBiomeFromNoise(float heat, float humidity, v3s16 po
if (biome_closest_blend && dist_min_blend <= dist_min &&
rng.range(0, biome_closest_blend->vertical_blend) >=
- pos.Y - biome_closest_blend->max_pos.Y)
+ pos.Y - biome_closest_blend->max_pos.Y)
return biome_closest_blend;
- return (biome_closest) ? biome_closest : (Biome *)m_bmgr->getRaw(BIOME_NONE);
+ return (biome_closest) ? biome_closest : (Biome *)m_bmgr->getRaw(BIOME_NONE);
}
-
////////////////////////////////////////////////////////////////////////////////
ObjDef *Biome::clone() const
@@ -372,16 +348,17 @@ ObjDef *Biome::clone() const
void Biome::resolveNodeNames()
{
- getIdFromNrBacklog(&c_top, "mapgen_stone", CONTENT_AIR, false);
- getIdFromNrBacklog(&c_filler, "mapgen_stone", CONTENT_AIR, false);
- getIdFromNrBacklog(&c_stone, "mapgen_stone", CONTENT_AIR, false);
- getIdFromNrBacklog(&c_water_top, "mapgen_water_source", CONTENT_AIR, false);
- getIdFromNrBacklog(&c_water, "mapgen_water_source", CONTENT_AIR, false);
- getIdFromNrBacklog(&c_river_water, "mapgen_river_water_source", CONTENT_AIR, false);
- getIdFromNrBacklog(&c_riverbed, "mapgen_stone", CONTENT_AIR, false);
- getIdFromNrBacklog(&c_dust, "ignore", CONTENT_IGNORE, false);
+ getIdFromNrBacklog(&c_top, "mapgen_stone", CONTENT_AIR, false);
+ getIdFromNrBacklog(&c_filler, "mapgen_stone", CONTENT_AIR, false);
+ getIdFromNrBacklog(&c_stone, "mapgen_stone", CONTENT_AIR, false);
+ getIdFromNrBacklog(&c_water_top, "mapgen_water_source", CONTENT_AIR, false);
+ getIdFromNrBacklog(&c_water, "mapgen_water_source", CONTENT_AIR, false);
+ getIdFromNrBacklog(
+ &c_river_water, "mapgen_river_water_source", CONTENT_AIR, false);
+ getIdFromNrBacklog(&c_riverbed, "mapgen_stone", CONTENT_AIR, false);
+ getIdFromNrBacklog(&c_dust, "ignore", CONTENT_IGNORE, false);
getIdsFromNrBacklog(&c_cave_liquid);
- getIdFromNrBacklog(&c_dungeon, "ignore", CONTENT_IGNORE, false);
- getIdFromNrBacklog(&c_dungeon_alt, "ignore", CONTENT_IGNORE, false);
- getIdFromNrBacklog(&c_dungeon_stair, "ignore", CONTENT_IGNORE, false);
+ getIdFromNrBacklog(&c_dungeon, "ignore", CONTENT_IGNORE, false);
+ getIdFromNrBacklog(&c_dungeon_alt, "ignore", CONTENT_IGNORE, false);
+ getIdFromNrBacklog(&c_dungeon_stair, "ignore", CONTENT_IGNORE, false);
}