From 7bf9da74413c69cbd79a9db81ba098e13b847904 Mon Sep 17 00:00:00 2001 From: STRWarrior Date: Sun, 20 Jul 2014 16:23:45 +0200 Subject: First attempt for a new foliage finisher --- src/Generating/ComposableGenerator.cpp | 4 ++++ src/Generating/FinishGen.cpp | 32 ++++++++++++++++++++++++++++ src/Generating/FinishGen.h | 38 ++++++++++++++++++++++++++++++++++ 3 files changed, 74 insertions(+) diff --git a/src/Generating/ComposableGenerator.cpp b/src/Generating/ComposableGenerator.cpp index 7b6234161..21626e76b 100644 --- a/src/Generating/ComposableGenerator.cpp +++ b/src/Generating/ComposableGenerator.cpp @@ -338,6 +338,10 @@ void cComposableGenerator::InitFinishGens(cIniFile & a_IniFile) float Threshold = (float)a_IniFile.GetValueSetF("Generator", "DualRidgeCavesThreshold", 0.3); m_FinishGens.push_back(new cStructGenDualRidgeCaves(Seed, Threshold)); } + else if (NoCaseCompare(*itr, "Foliage") == 0) + { + m_FinishGens.push_back(new cFinishGenFoliage(Seed)); + } else if (NoCaseCompare(*itr, "Ice") == 0) { m_FinishGens.push_back(new cFinishGenIce); diff --git a/src/Generating/FinishGen.cpp b/src/Generating/FinishGen.cpp index f2d66af70..06c1dcbbe 100644 --- a/src/Generating/FinishGen.cpp +++ b/src/Generating/FinishGen.cpp @@ -159,6 +159,38 @@ void cFinishGenNetherClumpFoliage::TryPlaceClump(cChunkDesc & a_ChunkDesc, int a +/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// cFinishGenFoliage: + +void cFinishGenFoliage::GenFinish(cChunkDesc & a_ChunkDesc) +{ + for (int x = 1; x < cChunkDef::Width; x++) + { + int xx = x + a_ChunkDesc.GetChunkX(); + for (int z = 1; z < cChunkDef::Width; z++) + { + int zz = z + a_ChunkDesc.GetChunkZ(); + //if (true) + if (m_Noise.CubicNoise2D((float) xx + m_Noise.CubicNoise1D(xx), zz + m_Noise.CubicNoise1D(zz)) < GetBiomeDensity(a_ChunkDesc.GetBiome(x, z))) + { + for (int y = a_ChunkDesc.GetHeight(x, z) + 1; y >= 1; y--) + { + if ( + (a_ChunkDesc.GetBlockType(x, y, z) == E_BLOCK_AIR) && + (a_ChunkDesc.GetBlockType(x, y - 1, z) == E_BLOCK_GRASS) + ) + { + a_ChunkDesc.SetBlockTypeMeta(x, y, z, E_BLOCK_TALL_GRASS, m_Noise.CubicNoise2D(xx * 100, zz * 100) > -0.2 ? 1 : 2); + } + } + } + } + } +} + + + + /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // cFinishGenSprinkleFoliage: diff --git a/src/Generating/FinishGen.h b/src/Generating/FinishGen.h index 2e5732929..ea322c7ae 100644 --- a/src/Generating/FinishGen.h +++ b/src/Generating/FinishGen.h @@ -69,6 +69,44 @@ protected: +class cFinishGenFoliage : + public cFinishGen +{ +public: + cFinishGenFoliage(int a_Seed) : m_Noise(a_Seed), m_Seed(a_Seed) {} + +protected: + cNoise m_Noise; + int m_Seed; + + // cFinishGen override: + virtual void GenFinish(cChunkDesc & a_ChunkDesc) override; + + float GetBiomeDensity(EMCSBiome a_Biome) + { + switch (a_Biome) + { + case biSavanna: + case biSavannaM: + case biSavannaPlateau: + case biSavannaPlateauM: + case biPlains: + { + return 0.0; + } + default: + { + return -0.4; + } + } + return -0.3; + } +}; + + + + + class cFinishGenSprinkleFoliage : public cFinishGen { -- cgit v1.2.3 From 51ad6cd1b22914aecd7e27d6a4a35853459fdb94 Mon Sep 17 00:00:00 2001 From: STRWarrior Date: Sun, 20 Jul 2014 16:31:28 +0200 Subject: Fixed warnings --- src/Generating/FinishGen.cpp | 3 +-- src/Generating/FinishGen.h | 6 +++--- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/src/Generating/FinishGen.cpp b/src/Generating/FinishGen.cpp index 06c1dcbbe..86f5711a7 100644 --- a/src/Generating/FinishGen.cpp +++ b/src/Generating/FinishGen.cpp @@ -170,8 +170,7 @@ void cFinishGenFoliage::GenFinish(cChunkDesc & a_ChunkDesc) for (int z = 1; z < cChunkDef::Width; z++) { int zz = z + a_ChunkDesc.GetChunkZ(); - //if (true) - if (m_Noise.CubicNoise2D((float) xx + m_Noise.CubicNoise1D(xx), zz + m_Noise.CubicNoise1D(zz)) < GetBiomeDensity(a_ChunkDesc.GetBiome(x, z))) + if (m_Noise.CubicNoise2D((float) xx + m_Noise.CubicNoise1D(xx), (float) zz + m_Noise.CubicNoise1D(zz)) < GetBiomeDensity(a_ChunkDesc.GetBiome(x, z))) { for (int y = a_ChunkDesc.GetHeight(x, z) + 1; y >= 1; y--) { diff --git a/src/Generating/FinishGen.h b/src/Generating/FinishGen.h index ea322c7ae..d2968e592 100644 --- a/src/Generating/FinishGen.h +++ b/src/Generating/FinishGen.h @@ -92,14 +92,14 @@ protected: case biSavannaPlateauM: case biPlains: { - return 0.0; + return 0.0f; } default: { - return -0.4; + return -0.4f; } } - return -0.3; + return -0.3f; } }; -- cgit v1.2.3 From 76b79b51adfd8e71312cf777595483bb1ec68910 Mon Sep 17 00:00:00 2001 From: STRWarrior Date: Sun, 20 Jul 2014 19:22:41 +0200 Subject: Renamed cFinishGenFoliage to cFinishGenTallGrass Better grass density Added double tall grass. --- src/Generating/ComposableGenerator.cpp | 8 ++++---- src/Generating/FinishGen.cpp | 34 ++++++++++++++++++++++++++-------- src/Generating/FinishGen.h | 9 ++++----- 3 files changed, 34 insertions(+), 17 deletions(-) diff --git a/src/Generating/ComposableGenerator.cpp b/src/Generating/ComposableGenerator.cpp index 21626e76b..2717f4e41 100644 --- a/src/Generating/ComposableGenerator.cpp +++ b/src/Generating/ComposableGenerator.cpp @@ -338,10 +338,6 @@ void cComposableGenerator::InitFinishGens(cIniFile & a_IniFile) float Threshold = (float)a_IniFile.GetValueSetF("Generator", "DualRidgeCavesThreshold", 0.3); m_FinishGens.push_back(new cStructGenDualRidgeCaves(Seed, Threshold)); } - else if (NoCaseCompare(*itr, "Foliage") == 0) - { - m_FinishGens.push_back(new cFinishGenFoliage(Seed)); - } else if (NoCaseCompare(*itr, "Ice") == 0) { m_FinishGens.push_back(new cFinishGenIce); @@ -419,6 +415,10 @@ void cComposableGenerator::InitFinishGens(cIniFile & a_IniFile) { m_FinishGens.push_back(new cFinishGenSprinkleFoliage(Seed)); } + else if (NoCaseCompare(*itr, "TallGrass") == 0) + { + m_FinishGens.push_back(new cFinishGenTallGrass(Seed)); + } else if (NoCaseCompare(*itr, "TestRails") == 0) { m_FinishGens.push_back(new cTestRailsGen(Seed, 100, 1, 7, 50)); diff --git a/src/Generating/FinishGen.cpp b/src/Generating/FinishGen.cpp index 86f5711a7..3ee657e38 100644 --- a/src/Generating/FinishGen.cpp +++ b/src/Generating/FinishGen.cpp @@ -162,24 +162,42 @@ void cFinishGenNetherClumpFoliage::TryPlaceClump(cChunkDesc & a_ChunkDesc, int a /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // cFinishGenFoliage: -void cFinishGenFoliage::GenFinish(cChunkDesc & a_ChunkDesc) +void cFinishGenTallGrass::GenFinish(cChunkDesc & a_ChunkDesc) { - for (int x = 1; x < cChunkDef::Width; x++) + for (int x = 0; x < cChunkDef::Width; x++) { - int xx = x + a_ChunkDesc.GetChunkX(); - for (int z = 1; z < cChunkDef::Width; z++) + float xx = (float) x + a_ChunkDesc.GetChunkX(); + for (int z = 0; z < cChunkDef::Width; z++) { - int zz = z + a_ChunkDesc.GetChunkZ(); - if (m_Noise.CubicNoise2D((float) xx + m_Noise.CubicNoise1D(xx), (float) zz + m_Noise.CubicNoise1D(zz)) < GetBiomeDensity(a_ChunkDesc.GetBiome(x, z))) + float zz = (float) z + a_ChunkDesc.GetChunkZ(); + float BiomeDensity = GetBiomeDensity(a_ChunkDesc.GetBiome(x, z)); + if (m_Noise.CubicNoise2D(xx + m_Noise.CubicNoise1D(xx), zz + m_Noise.CubicNoise1D(zz)) < BiomeDensity) { for (int y = a_ChunkDesc.GetHeight(x, z) + 1; y >= 1; y--) { if ( (a_ChunkDesc.GetBlockType(x, y, z) == E_BLOCK_AIR) && - (a_ChunkDesc.GetBlockType(x, y - 1, z) == E_BLOCK_GRASS) + ((a_ChunkDesc.GetBlockType(x, y - 1, z) == E_BLOCK_GRASS) || (a_ChunkDesc.GetBlockType(x, y - 1, z) == E_BLOCK_DIRT)) ) { - a_ChunkDesc.SetBlockTypeMeta(x, y, z, E_BLOCK_TALL_GRASS, m_Noise.CubicNoise2D(xx * 100, zz * 100) > -0.2 ? 1 : 2); + float GrassType = m_Noise.CubicNoise2D(xx * 50, zz * 50); + if (GrassType < 0.2f) + { + a_ChunkDesc.SetBlockTypeMeta(x, y, z, E_BLOCK_TALL_GRASS, 1); + } + else if (GrassType < 0.8f) + { + a_ChunkDesc.SetBlockTypeMeta(x, y, z, E_BLOCK_TALL_GRASS, 2); + } + else + { + if (a_ChunkDesc.GetBlockType(x, y + 1, z) == E_BLOCK_AIR) + { + NIBBLETYPE Meta = m_Noise.CubicNoise2D(xx * 100, zz * 100) > -0.5f ? 2 : 3; + a_ChunkDesc.SetBlockTypeMeta(x, y, z, E_BLOCK_BIG_FLOWER, Meta); + a_ChunkDesc.SetBlockTypeMeta(x, y + 1, z, E_BLOCK_BIG_FLOWER, 8); + } + } } } } diff --git a/src/Generating/FinishGen.h b/src/Generating/FinishGen.h index d2968e592..17a807e9b 100644 --- a/src/Generating/FinishGen.h +++ b/src/Generating/FinishGen.h @@ -69,11 +69,11 @@ protected: -class cFinishGenFoliage : +class cFinishGenTallGrass : public cFinishGen { public: - cFinishGenFoliage(int a_Seed) : m_Noise(a_Seed), m_Seed(a_Seed) {} + cFinishGenTallGrass(int a_Seed) : m_Noise(a_Seed), m_Seed(a_Seed) {} protected: cNoise m_Noise; @@ -92,14 +92,13 @@ protected: case biSavannaPlateauM: case biPlains: { - return 0.0f; + return 0.4f; } default: { - return -0.4f; + return -0.6f; } } - return -0.3f; } }; -- cgit v1.2.3 From a4470da876f8588fb71733a961701461f320e084 Mon Sep 17 00:00:00 2001 From: STRWarrior Date: Sun, 20 Jul 2014 22:43:31 +0200 Subject: Changed CubicNoiseXX to IntNoiseXX Added some comments --- src/Generating/FinishGen.cpp | 63 +++++++++++++++++++++++++------------------- src/Generating/FinishGen.h | 26 +++++++++--------- 2 files changed, 49 insertions(+), 40 deletions(-) diff --git a/src/Generating/FinishGen.cpp b/src/Generating/FinishGen.cpp index 3ee657e38..b332c4f9b 100644 --- a/src/Generating/FinishGen.cpp +++ b/src/Generating/FinishGen.cpp @@ -166,38 +166,47 @@ void cFinishGenTallGrass::GenFinish(cChunkDesc & a_ChunkDesc) { for (int x = 0; x < cChunkDef::Width; x++) { - float xx = (float) x + a_ChunkDesc.GetChunkX(); + int xx = x + a_ChunkDesc.GetChunkX() * cChunkDef::Width; for (int z = 0; z < cChunkDef::Width; z++) { - float zz = (float) z + a_ChunkDesc.GetChunkZ(); - float BiomeDensity = GetBiomeDensity(a_ChunkDesc.GetBiome(x, z)); - if (m_Noise.CubicNoise2D(xx + m_Noise.CubicNoise1D(xx), zz + m_Noise.CubicNoise1D(zz)) < BiomeDensity) + int zz = z + a_ChunkDesc.GetChunkZ() * cChunkDef::Width; + int BiomeDensity = GetBiomeDensity(a_ChunkDesc.GetBiome(x, z)); + + // Choose if we want to place long grass here. If not then bail out. + if ((m_Noise.IntNoise2DInt(xx + m_Noise.IntNoise1DInt(xx), zz + m_Noise.IntNoise1DInt(zz)) / 7 % 100) > BiomeDensity) { - for (int y = a_ChunkDesc.GetHeight(x, z) + 1; y >= 1; y--) - { - if ( - (a_ChunkDesc.GetBlockType(x, y, z) == E_BLOCK_AIR) && - ((a_ChunkDesc.GetBlockType(x, y - 1, z) == E_BLOCK_GRASS) || (a_ChunkDesc.GetBlockType(x, y - 1, z) == E_BLOCK_DIRT)) + continue; + } + + for (int y = a_ChunkDesc.GetHeight(x, z) + 1; y >= 1; y--) + { + // Check if long grass can be placed. + if ( + (a_ChunkDesc.GetBlockType(x, y, z) != E_BLOCK_AIR) || + ((a_ChunkDesc.GetBlockType(x, y - 1, z) != E_BLOCK_GRASS) && (a_ChunkDesc.GetBlockType(x, y - 1, z) != E_BLOCK_DIRT)) ) + { + continue; + } + + // Choose what long grass meta we should use. + int GrassType = m_Noise.IntNoise2DInt(xx * 50, zz * 50) / 7 % 100; + if (GrassType < 60) + { + a_ChunkDesc.SetBlockTypeMeta(x, y, z, E_BLOCK_TALL_GRASS, 1); + } + else if (GrassType < 90) + { + a_ChunkDesc.SetBlockTypeMeta(x, y, z, E_BLOCK_TALL_GRASS, 2); + } + else + { + // If double long grass we have to choose what type we should use. + if (a_ChunkDesc.GetBlockType(x, y + 1, z) == E_BLOCK_AIR) { - float GrassType = m_Noise.CubicNoise2D(xx * 50, zz * 50); - if (GrassType < 0.2f) - { - a_ChunkDesc.SetBlockTypeMeta(x, y, z, E_BLOCK_TALL_GRASS, 1); - } - else if (GrassType < 0.8f) - { - a_ChunkDesc.SetBlockTypeMeta(x, y, z, E_BLOCK_TALL_GRASS, 2); - } - else - { - if (a_ChunkDesc.GetBlockType(x, y + 1, z) == E_BLOCK_AIR) - { - NIBBLETYPE Meta = m_Noise.CubicNoise2D(xx * 100, zz * 100) > -0.5f ? 2 : 3; - a_ChunkDesc.SetBlockTypeMeta(x, y, z, E_BLOCK_BIG_FLOWER, Meta); - a_ChunkDesc.SetBlockTypeMeta(x, y + 1, z, E_BLOCK_BIG_FLOWER, 8); - } - } + NIBBLETYPE Meta = (m_Noise.IntNoise2DInt(xx * 100, zz * 100) / 7 % 100) > 25 ? 2 : 3; + a_ChunkDesc.SetBlockTypeMeta(x, y, z, E_BLOCK_BIG_FLOWER, Meta); + a_ChunkDesc.SetBlockTypeMeta(x, y + 1, z, E_BLOCK_BIG_FLOWER, 8); } } } diff --git a/src/Generating/FinishGen.h b/src/Generating/FinishGen.h index 17a807e9b..f673ac2c2 100644 --- a/src/Generating/FinishGen.h +++ b/src/Generating/FinishGen.h @@ -82,22 +82,22 @@ protected: // cFinishGen override: virtual void GenFinish(cChunkDesc & a_ChunkDesc) override; - float GetBiomeDensity(EMCSBiome a_Biome) + int GetBiomeDensity(EMCSBiome a_Biome) { switch (a_Biome) { - case biSavanna: - case biSavannaM: - case biSavannaPlateau: - case biSavannaPlateauM: - case biPlains: - { - return 0.4f; - } - default: - { - return -0.6f; - } + case biSavanna: + case biSavannaM: + case biSavannaPlateau: + case biSavannaPlateauM: + case biPlains: + { + return 70; + } + default: + { + return 20; + } } } }; -- cgit v1.2.3 From 0c816dd6973ea15863b3e6f0a842b9b1e5fe2f3d Mon Sep 17 00:00:00 2001 From: STRWarrior Date: Mon, 21 Jul 2014 10:58:13 +0200 Subject: Fixed indentation --- src/Generating/FinishGen.h | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/src/Generating/FinishGen.h b/src/Generating/FinishGen.h index f673ac2c2..0688e1162 100644 --- a/src/Generating/FinishGen.h +++ b/src/Generating/FinishGen.h @@ -86,18 +86,18 @@ protected: { switch (a_Biome) { - case biSavanna: - case biSavannaM: - case biSavannaPlateau: - case biSavannaPlateauM: - case biPlains: - { - return 70; - } - default: - { - return 20; - } + case biSavanna: + case biSavannaM: + case biSavannaPlateau: + case biSavannaPlateauM: + case biPlains: + { + return 70; + } + default: + { + return 20; + } } } }; -- cgit v1.2.3 From ce956bcdf276daa288c35d702885bba90f6ce283 Mon Sep 17 00:00:00 2001 From: STRWarrior Date: Mon, 21 Jul 2014 16:01:16 +0200 Subject: Removed y for-loop. Only the top block now gets long grass. --- src/Generating/FinishGen.cpp | 54 ++++++++++++++++++++++---------------------- 1 file changed, 27 insertions(+), 27 deletions(-) diff --git a/src/Generating/FinishGen.cpp b/src/Generating/FinishGen.cpp index b332c4f9b..26149f363 100644 --- a/src/Generating/FinishGen.cpp +++ b/src/Generating/FinishGen.cpp @@ -178,36 +178,36 @@ void cFinishGenTallGrass::GenFinish(cChunkDesc & a_ChunkDesc) continue; } - for (int y = a_ChunkDesc.GetHeight(x, z) + 1; y >= 1; y--) + // Get the top block + 1. This is the place where the grass would finaly be placed. + int y = a_ChunkDesc.GetHeight(x, z) + 1; + + // Check if long grass can be placed. + if ( + (a_ChunkDesc.GetBlockType(x, y, z) != E_BLOCK_AIR) || + ((a_ChunkDesc.GetBlockType(x, y - 1, z) != E_BLOCK_GRASS) && (a_ChunkDesc.GetBlockType(x, y - 1, z) != E_BLOCK_DIRT)) + ) { - // Check if long grass can be placed. - if ( - (a_ChunkDesc.GetBlockType(x, y, z) != E_BLOCK_AIR) || - ((a_ChunkDesc.GetBlockType(x, y - 1, z) != E_BLOCK_GRASS) && (a_ChunkDesc.GetBlockType(x, y - 1, z) != E_BLOCK_DIRT)) - ) - { - continue; - } + continue; + } - // Choose what long grass meta we should use. - int GrassType = m_Noise.IntNoise2DInt(xx * 50, zz * 50) / 7 % 100; - if (GrassType < 60) - { - a_ChunkDesc.SetBlockTypeMeta(x, y, z, E_BLOCK_TALL_GRASS, 1); - } - else if (GrassType < 90) - { - a_ChunkDesc.SetBlockTypeMeta(x, y, z, E_BLOCK_TALL_GRASS, 2); - } - else + // Choose what long grass meta we should use. + int GrassType = m_Noise.IntNoise2DInt(xx * 50, zz * 50) / 7 % 100; + if (GrassType < 60) + { + a_ChunkDesc.SetBlockTypeMeta(x, y, z, E_BLOCK_TALL_GRASS, 1); + } + else if (GrassType < 90) + { + a_ChunkDesc.SetBlockTypeMeta(x, y, z, E_BLOCK_TALL_GRASS, 2); + } + else + { + // If double long grass we have to choose what type we should use. + if (a_ChunkDesc.GetBlockType(x, y + 1, z) == E_BLOCK_AIR) { - // If double long grass we have to choose what type we should use. - if (a_ChunkDesc.GetBlockType(x, y + 1, z) == E_BLOCK_AIR) - { - NIBBLETYPE Meta = (m_Noise.IntNoise2DInt(xx * 100, zz * 100) / 7 % 100) > 25 ? 2 : 3; - a_ChunkDesc.SetBlockTypeMeta(x, y, z, E_BLOCK_BIG_FLOWER, Meta); - a_ChunkDesc.SetBlockTypeMeta(x, y + 1, z, E_BLOCK_BIG_FLOWER, 8); - } + NIBBLETYPE Meta = (m_Noise.IntNoise2DInt(xx * 100, zz * 100) / 7 % 100) > 25 ? 2 : 3; + a_ChunkDesc.SetBlockTypeMeta(x, y, z, E_BLOCK_BIG_FLOWER, Meta); + a_ChunkDesc.SetBlockTypeMeta(x, y + 1, z, E_BLOCK_BIG_FLOWER, 8); } } } -- cgit v1.2.3 From 39623251c4e41e882abba767123f21b49a181ffc Mon Sep 17 00:00:00 2001 From: STRWarrior Date: Mon, 21 Jul 2014 16:34:35 +0200 Subject: Fixed a missing enter. --- src/Generating/FinishGen.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/Generating/FinishGen.cpp b/src/Generating/FinishGen.cpp index 26149f363..e6c31e43f 100644 --- a/src/Generating/FinishGen.cpp +++ b/src/Generating/FinishGen.cpp @@ -217,6 +217,7 @@ void cFinishGenTallGrass::GenFinish(cChunkDesc & a_ChunkDesc) + /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // cFinishGenSprinkleFoliage: -- cgit v1.2.3