summaryrefslogtreecommitdiffstats
path: root/src/Generating
diff options
context:
space:
mode:
Diffstat (limited to 'src/Generating')
-rw-r--r--src/Generating/DistortedHeightmap.cpp4
-rw-r--r--src/Generating/DistortedHeightmap.h6
-rw-r--r--src/Generating/HeiGen.cpp89
-rw-r--r--src/Generating/HeiGen.h21
-rw-r--r--src/Generating/VillageGen.cpp21
5 files changed, 21 insertions, 120 deletions
diff --git a/src/Generating/DistortedHeightmap.cpp b/src/Generating/DistortedHeightmap.cpp
index e50f36d57..eb9fe92ba 100644
--- a/src/Generating/DistortedHeightmap.cpp
+++ b/src/Generating/DistortedHeightmap.cpp
@@ -282,7 +282,7 @@ cDistortedHeightmap::cDistortedHeightmap(int a_Seed, cBiomeGen & a_BiomeGen) :
m_OceanFloorSelect(a_Seed + 3000),
m_MesaFloor(a_Seed + 4000),
m_BiomeGen(a_BiomeGen),
- m_UnderlyingHeiGen(a_Seed),
+ m_UnderlyingHeiGen(a_Seed, a_BiomeGen),
m_HeightGen(m_UnderlyingHeiGen, 64),
m_IsInitialized(false)
{
@@ -308,8 +308,6 @@ void cDistortedHeightmap::Initialize(cIniFile & a_IniFile)
return;
}
- ((cTerrainHeightGen &)m_UnderlyingHeiGen).InitializeHeightGen(a_IniFile);
-
// Read the params from the INI file:
m_SeaLevel = a_IniFile.GetValueSetI("Generator", "DistortedHeightmapSeaLevel", 62);
m_FrequencyX = (NOISE_DATATYPE)a_IniFile.GetValueSetF("Generator", "DistortedHeightmapFrequencyX", 10);
diff --git a/src/Generating/DistortedHeightmap.h b/src/Generating/DistortedHeightmap.h
index 31fb17df2..e6b3c9d3f 100644
--- a/src/Generating/DistortedHeightmap.h
+++ b/src/Generating/DistortedHeightmap.h
@@ -64,9 +64,9 @@ protected:
int m_CurChunkZ;
NOISE_DATATYPE m_DistortedHeightmap[17 * 257 * 17];
- cBiomeGen & m_BiomeGen;
- cHeiGenMesaBryce m_UnderlyingHeiGen; // This generator provides us with base heightmap (before distortion)
- cHeiGenCache m_HeightGen; // Cache above m_UnderlyingHeiGen
+ cBiomeGen & m_BiomeGen;
+ cHeiGenBiomal m_UnderlyingHeiGen; // This generator provides us with base heightmap (before distortion)
+ cHeiGenCache m_HeightGen; // Cache above m_UnderlyingHeiGen
/// Heightmap for the current chunk, before distortion (from m_HeightGen). Used for optimization.
cChunkDef::HeightMap m_CurChunkHeights;
diff --git a/src/Generating/HeiGen.cpp b/src/Generating/HeiGen.cpp
index dedf3fe3f..25ac912fd 100644
--- a/src/Generating/HeiGen.cpp
+++ b/src/Generating/HeiGen.cpp
@@ -47,10 +47,6 @@ cTerrainHeightGen * cTerrainHeightGen::CreateHeightGen(cIniFile &a_IniFile, cBio
{
res = new cEndGen(a_Seed);
}
- else if (NoCaseCompare(HeightGenName, "MesaBryce") == 0)
- {
- res = new cHeiGenMesaBryce(a_Seed);
- }
else if (NoCaseCompare(HeightGenName, "Mountains") == 0)
{
res = new cHeiGenMountains(a_Seed);
@@ -371,91 +367,6 @@ void cHeiGenMountains::InitializeHeightGen(cIniFile & a_IniFile)
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-// cHeiGenMesaBryce:
-
-cHeiGenMesaBryce::cHeiGenMesaBryce(int a_Seed) :
- m_Seed(a_Seed),
- m_PerlinHFHA(a_Seed),
- m_PerlinLFLA(a_Seed + 10)
-{
-}
-
-
-
-
-
-void cHeiGenMesaBryce::GenHeightMap(int a_ChunkX, int a_ChunkZ, cChunkDef::HeightMap & a_HeightMap)
-{
- NOISE_DATATYPE StartX = (NOISE_DATATYPE)(a_ChunkX * cChunkDef::Width);
- NOISE_DATATYPE EndX = (NOISE_DATATYPE)(a_ChunkX * cChunkDef::Width + cChunkDef::Width - 1);
- NOISE_DATATYPE StartZ = (NOISE_DATATYPE)(a_ChunkZ * cChunkDef::Width);
- NOISE_DATATYPE EndZ = (NOISE_DATATYPE)(a_ChunkZ * cChunkDef::Width + cChunkDef::Width - 1);
- NOISE_DATATYPE Workspace[16 * 16];
- NOISE_DATATYPE Noise1[16 * 16];
- NOISE_DATATYPE Noise2[16 * 16];
- NOISE_DATATYPE Noise3[16 * 16];
- m_PerlinHFHA.Generate2D(Noise1, 16, 16, StartX, EndX, StartZ, EndZ, Workspace);
- m_PerlinLFLA.Generate2D(Noise2, 16, 16, StartX, EndX, StartZ, EndZ, Workspace);
- m_PerlinTops.Generate2D(Noise3, 16, 16, StartX, EndX, StartZ, EndZ, Workspace);
- for (int z = 0; z < cChunkDef::Width; z++)
- {
- int IdxZ = z * cChunkDef::Width;
- for (int x = 0; x < cChunkDef::Width; x++)
- {
- int idx = IdxZ + x;
- // int hei = 70 + (int)(std::min(Noise1[idx], Noise2[idx]) * 15);
- int hei;
- if (Noise1[idx] > 1.5f)
- {
- hei = 83 + (int)floor(Noise3[idx]);
- }
- else
- {
- hei = 63 + (int)floor(Noise2[idx]);
- }
- /*
- NOISE_DATATYPE v1 = sqrt(sqrt(std::max(Noise1[idx], (NOISE_DATATYPE)0))) - 50;
- int hei = 60 + (int)floor(std::max(v1, 5 + Noise2[idx]));
- */
- if (hei < 10)
- {
- hei = 10;
- }
- if (hei > 250)
- {
- hei = 250;
- }
- cChunkDef::SetHeight(a_HeightMap, x , z, hei);
- } // for x
- } // for z
-}
-
-
-
-
-
-void cHeiGenMesaBryce::InitializeHeightGen(cIniFile & a_IniFile)
-{
- // TODO: Read the params from an INI file
- // m_PerlinHFHA.AddOctave(0.32f, 0.1);
- /*
- m_PerlinHFHA.AddOctave(0.13f, 17800000);
- m_PerlinHFHA.AddOctave(0.12f, 19000000);
- */
- m_PerlinHFHA.AddOctave(0.13f, 2);
- m_PerlinHFHA.AddOctave(0.12f, 2);
-
- m_PerlinLFLA.AddOctave(0.04f, 1);
- m_PerlinLFLA.AddOctave(0.02f, 2);
-
- m_PerlinTops.AddOctave(0.1f, 8);
-}
-
-
-
-
-
-///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// cHeiGenBiomal:
const cHeiGenBiomal::sGenParam cHeiGenBiomal::m_GenParam[256] =
diff --git a/src/Generating/HeiGen.h b/src/Generating/HeiGen.h
index 5fc4f4abc..5c106c7d9 100644
--- a/src/Generating/HeiGen.h
+++ b/src/Generating/HeiGen.h
@@ -127,27 +127,6 @@ protected:
-class cHeiGenMesaBryce :
- public cTerrainHeightGen
-{
-public:
- cHeiGenMesaBryce(int a_Seed);
-
-protected:
- int m_Seed;
- cPerlinNoise m_PerlinHFHA; // HighFrequencyHighAmplitude, for the hills
- cPerlinNoise m_PerlinLFLA; // LowFrequencyLowAmplitude, for the floor
- cPerlinNoise m_PerlinTops;
-
- // cTerrainHeightGen overrides:
- virtual void GenHeightMap(int a_ChunkX, int a_ChunkZ, cChunkDef::HeightMap & a_HeightMap) override;
- virtual void InitializeHeightGen(cIniFile & a_IniFile) override;
-} ;
-
-
-
-
-
class cHeiGenBiomal :
public cTerrainHeightGen
{
diff --git a/src/Generating/VillageGen.cpp b/src/Generating/VillageGen.cpp
index b9cb056ad..9917141ed 100644
--- a/src/Generating/VillageGen.cpp
+++ b/src/Generating/VillageGen.cpp
@@ -116,7 +116,8 @@ public:
int a_Density,
cPiecePool & a_Prefabs,
cTerrainHeightGen & a_HeightGen,
- BLOCKTYPE a_RoadBlock
+ BLOCKTYPE a_RoadBlock,
+ BLOCKTYPE a_WaterRoadBlock
) :
super(a_OriginX, a_OriginZ),
m_Seed(a_Seed),
@@ -126,7 +127,8 @@ public:
m_Borders(a_OriginX - a_MaxSize, 0, a_OriginZ - a_MaxSize, a_OriginX + a_MaxSize, 255, a_OriginZ + a_MaxSize),
m_Prefabs(a_Prefabs),
m_HeightGen(a_HeightGen),
- m_RoadBlock(a_RoadBlock)
+ m_RoadBlock(a_RoadBlock),
+ m_WaterRoadBlock(a_WaterRoadBlock)
{
// Generate the pieces for this village; don't care about the Y coord:
cBFSPieceGenerator pg(*this, a_Seed);
@@ -179,6 +181,9 @@ protected:
/** The block to use for the roads. */
BLOCKTYPE m_RoadBlock;
+
+ /** The block used for the roads if the road is on water. */
+ BLOCKTYPE m_WaterRoadBlock;
// cGridStructGen::cStructure overrides:
@@ -239,7 +244,14 @@ protected:
{
for (int x = MinX; x <= MaxX; x++)
{
- a_Chunk.SetBlockType(x, cChunkDef::GetHeight(a_HeightMap, x, z), z, m_RoadBlock);
+ if (IsBlockWater(a_Chunk.GetBlockType(x, cChunkDef::GetHeight(a_HeightMap, x, z), z)))
+ {
+ a_Chunk.SetBlockType(x, cChunkDef::GetHeight(a_HeightMap, x, z), z, m_WaterRoadBlock);
+ }
+ else
+ {
+ a_Chunk.SetBlockType(x, cChunkDef::GetHeight(a_HeightMap, x, z), z, m_RoadBlock);
+ }
}
}
}
@@ -374,6 +386,7 @@ cGridStructGen::cStructurePtr cVillageGen::CreateStructure(int a_OriginX, int a_
// If just one is not, no village is created, because it's likely that an unfriendly biome is too close
cVillagePiecePool * VillagePrefabs = NULL;
BLOCKTYPE RoadBlock = E_BLOCK_GRAVEL;
+ BLOCKTYPE WaterRoadBlock = E_BLOCK_PLANKS;
int rnd = m_Noise.IntNoise2DInt(a_OriginX, a_OriginZ) / 11;
cVillagePiecePool * PlainsVillage = g_PlainsVillagePools[rnd % ARRAYCOUNT(g_PlainsVillagePools)];
cVillagePiecePool * DesertVillage = g_DesertVillagePools[rnd % ARRAYCOUNT(g_DesertVillagePools)];
@@ -422,7 +435,7 @@ cGridStructGen::cStructurePtr cVillageGen::CreateStructure(int a_OriginX, int a_
{
return cStructurePtr();
}
- return cStructurePtr(new cVillage(m_Seed, a_OriginX, a_OriginZ, m_MaxDepth, m_MaxSize, Density, *VillagePrefabs, m_HeightGen, RoadBlock));
+ return cStructurePtr(new cVillage(m_Seed, a_OriginX, a_OriginZ, m_MaxDepth, m_MaxSize, Density, *VillagePrefabs, m_HeightGen, RoadBlock, WaterRoadBlock));
}