diff options
Diffstat (limited to 'src/Generating/ProtIntGen.h')
-rw-r--r-- | src/Generating/ProtIntGen.h | 717 |
1 files changed, 316 insertions, 401 deletions
diff --git a/src/Generating/ProtIntGen.h b/src/Generating/ProtIntGen.h index 290998075..1ab1b8096 100644 --- a/src/Generating/ProtIntGen.h +++ b/src/Generating/ProtIntGen.h @@ -33,7 +33,7 @@ This value is used only if there isn't an override in place. To adjust the actual buffer size, just do a "#define PROT_INT_BUFFER_SIZE 9000" before including this header. Note, however, that you should use a consistent value throughout a single project. */ #ifndef PROT_INT_BUFFER_SIZE - #define PROT_INT_BUFFER_SIZE 900 +#define PROT_INT_BUFFER_SIZE 900 #endif @@ -43,13 +43,12 @@ Note, however, that you should use a consistent value throughout a single projec /** Interface that all the generator classes provide. */ class cProtIntGen { -protected: + protected: /** Maximum size of the generated area. Adjust the constant if you need larger areas, these are just so that we can use fixed-size buffers. */ static const int m_BufferSize = PROT_INT_BUFFER_SIZE; -public: - + public: /** Type of the generic interface used for storing links to the underlying generators. */ using Underlying = std::shared_ptr<cProtIntGen>; @@ -59,7 +58,7 @@ public: virtual ~cProtIntGen() {} /** Generates the array of specified size into a_Values, based on given min coords. */ - virtual void GetInts(int a_MinX, int a_MinZ, size_t a_SizeX, size_t a_SizeZ, int *a_Values) = 0; + virtual void GetInts(int a_MinX, int a_MinZ, size_t a_SizeX, size_t a_SizeZ, int * a_Values) = 0; }; @@ -67,19 +66,17 @@ public: /** Provides additional cNoise member and its helper functions. */ -class cProtIntGenWithNoise: - public cProtIntGen +class cProtIntGenWithNoise : public cProtIntGen { using Super = cProtIntGen; -public: - - cProtIntGenWithNoise(int a_Seed): + public: + cProtIntGenWithNoise(int a_Seed) : m_Noise(a_Seed) { } -protected: + protected: cNoise m_Noise; /** Chooses one of a_Val1 or a_Val2, based on m_Noise and the coordinates for querying the noise. */ @@ -108,33 +105,31 @@ protected: /** Generates a 2D array of random integers in the specified range [0 .. Range). */ -class cProtIntGenChoice: - public cProtIntGenWithNoise +class cProtIntGenChoice : public cProtIntGenWithNoise { using Super = cProtIntGenWithNoise; -public: - - cProtIntGenChoice(int a_Seed, int a_Range): - Super(a_Seed), - m_Range(a_Range) + public: + cProtIntGenChoice(int a_Seed, int a_Range) : + Super(a_Seed), m_Range(a_Range) { } - virtual void GetInts(int a_MinX, int a_MinZ, size_t a_SizeX, size_t a_SizeZ, int *a_Values) override + virtual void GetInts(int a_MinX, int a_MinZ, size_t a_SizeX, size_t a_SizeZ, int * a_Values) override { for (size_t z = 0; z < a_SizeZ; z++) { int BaseZ = a_MinZ + static_cast<int>(z); for (size_t x = 0; x < a_SizeX; x++) { - a_Values[x + a_SizeX * z] = (Super::m_Noise.IntNoise2DInt(a_MinX + static_cast<int>(x), BaseZ) / 7) % m_Range; + a_Values[x + a_SizeX * z] = + (Super::m_Noise.IntNoise2DInt(a_MinX + static_cast<int>(x), BaseZ) / 7) % m_Range; } } // for z } -protected: + protected: int m_Range; }; @@ -145,21 +140,18 @@ protected: /** Decides between the ocean and landmass biomes. Has a threshold (in percent) of how much land, the larger the threshold, the more land. Generates 0 for ocean, biome group ID for landmass. */ -class cProtIntGenLandOcean: - public cProtIntGenWithNoise +class cProtIntGenLandOcean : public cProtIntGenWithNoise { using Super = cProtIntGenWithNoise; -public: - - cProtIntGenLandOcean(int a_Seed, int a_Threshold): - Super(a_Seed), - m_Threshold(a_Threshold) + public: + cProtIntGenLandOcean(int a_Seed, int a_Threshold) : + Super(a_Seed), m_Threshold(a_Threshold) { } - virtual void GetInts(int a_MinX, int a_MinZ, size_t a_SizeX, size_t a_SizeZ, int *a_Values) override + virtual void GetInts(int a_MinX, int a_MinZ, size_t a_SizeX, size_t a_SizeZ, int * a_Values) override { for (size_t z = 0; z < a_SizeZ; z++) { @@ -172,13 +164,14 @@ public: } // If the centerpoint of the world is within the area, set it to bgTemperate, always: - if ((a_MinX <= 0) && (a_MinZ <= 0) && (a_MinX + static_cast<int>(a_SizeX) > 0) && (a_MinZ + static_cast<int>(a_SizeZ) > 0)) + if ((a_MinX <= 0) && (a_MinZ <= 0) && (a_MinX + static_cast<int>(a_SizeX) > 0) && + (a_MinZ + static_cast<int>(a_SizeZ) > 0)) { a_Values[static_cast<size_t>(-a_MinX) - static_cast<size_t>(a_MinZ) * a_SizeX] = bgTemperate; } } -protected: + protected: int m_Threshold; }; @@ -189,21 +182,18 @@ protected: /** Zooms the underlying value array to twice the size. Uses random-neighbor for the pixels in-between. This means that the zoome out image is randomly distorted. Applying zoom several times provides all the distortion that the generators need. */ -class cProtIntGenZoom: - public cProtIntGenWithNoise +class cProtIntGenZoom : public cProtIntGenWithNoise { using Super = cProtIntGenWithNoise; -public: - - cProtIntGenZoom(int a_Seed, Underlying a_UnderlyingGen): - Super(a_Seed), - m_UnderlyingGen(std::move(a_UnderlyingGen)) + public: + cProtIntGenZoom(int a_Seed, Underlying a_UnderlyingGen) : + Super(a_Seed), m_UnderlyingGen(std::move(a_UnderlyingGen)) { } - virtual void GetInts(int a_MinX, int a_MinZ, size_t a_SizeX, size_t a_SizeZ, int *a_Values) override + virtual void GetInts(int a_MinX, int a_MinZ, size_t a_SizeX, size_t a_SizeZ, int * a_Values) override { // Get the coords for the lower generator: int lowerMinX = a_MinX >> 1; @@ -235,7 +225,7 @@ public: int RndZ = (static_cast<int>(z) + lowerMinZ) * 2; cache[idx] = PrevZ0; cache[idx + lowStepX] = Super::chooseRandomOne(RndX, RndZ + 1, PrevZ0, PrevZ1); - cache[idx + 1] = Super::chooseRandomOne(RndX, RndZ - 1, PrevZ0, ValX1Z0); + cache[idx + 1] = Super::chooseRandomOne(RndX, RndZ - 1, PrevZ0, ValX1Z0); cache[idx + 1 + lowStepX] = Super::chooseRandomOne(RndX, RndZ, PrevZ0, ValX1Z0, PrevZ1, ValX1Z1); idx += 2; PrevZ0 = ValX1Z0; @@ -250,7 +240,7 @@ public: } } -protected: + protected: Underlying m_UnderlyingGen; }; @@ -260,21 +250,18 @@ protected: /** Smoothes out some artifacts generated by the zooming - mostly single-pixel values. Compares each pixel to its neighbors and if the neighbors are equal, changes the pixel to their value. */ -class cProtIntGenSmooth: - public cProtIntGenWithNoise +class cProtIntGenSmooth : public cProtIntGenWithNoise { using Super = cProtIntGenWithNoise; -public: - - cProtIntGenSmooth(int a_Seed, Underlying a_Underlying): - Super(a_Seed), - m_Underlying(std::move(a_Underlying)) + public: + cProtIntGenSmooth(int a_Seed, Underlying a_Underlying) : + Super(a_Seed), m_Underlying(std::move(a_Underlying)) { } - virtual void GetInts(int a_MinX, int a_MinZ, size_t a_SizeX, size_t a_SizeZ, int *a_Values) override + virtual void GetInts(int a_MinX, int a_MinZ, size_t a_SizeX, size_t a_SizeZ, int * a_Values) override { // Generate the underlying values: size_t lowerSizeX = a_SizeX + 2; @@ -290,10 +277,10 @@ public: int NoiseZ = a_MinZ + static_cast<int>(z); for (size_t x = 0; x < a_SizeX; x++) { - int val = lowerData[x + 1 + (z + 1) * lowerSizeX]; - int above = lowerData[x + 1 + z * lowerSizeX]; + int val = lowerData[x + 1 + (z + 1) * lowerSizeX]; + int above = lowerData[x + 1 + z * lowerSizeX]; int below = lowerData[x + 1 + (z + 2) * lowerSizeX]; - int left = lowerData[x + (z + 1) * lowerSizeX]; + int left = lowerData[x + (z + 1) * lowerSizeX]; int right = lowerData[x + 2 + (z + 1) * lowerSizeX]; if ((left == right) && (above == below)) @@ -325,7 +312,7 @@ public: } } -protected: + protected: Underlying m_Underlying; }; @@ -334,20 +321,18 @@ protected: /** Averages the values of the underlying 2 * 2 neighbors. */ -class cProtIntGenAvgValues: - public cProtIntGen +class cProtIntGenAvgValues : public cProtIntGen { using Super = cProtIntGen; -public: - - cProtIntGenAvgValues(Underlying a_Underlying): + public: + cProtIntGenAvgValues(Underlying a_Underlying) : m_Underlying(std::move(a_Underlying)) { } - virtual void GetInts(int a_MinX, int a_MinZ, size_t a_SizeX, size_t a_SizeZ, int *a_Values) override + virtual void GetInts(int a_MinX, int a_MinZ, size_t a_SizeX, size_t a_SizeZ, int * a_Values) override { // Generate the underlying values: size_t lowerSizeX = a_SizeX + 1; @@ -362,15 +347,14 @@ public: for (size_t x = 0; x < a_SizeX; x++) { size_t idxLower = x + lowerSizeX * z; - a_Values[x + a_SizeX * z] = ( - lowerData[idxLower] + lowerData[idxLower + 1] + - lowerData[idxLower + lowerSizeX] + lowerData[idxLower + lowerSizeX + 1] - ) / 4; + a_Values[x + a_SizeX * z] = (lowerData[idxLower] + lowerData[idxLower + 1] + + lowerData[idxLower + lowerSizeX] + lowerData[idxLower + lowerSizeX + 1]) / + 4; } } } -protected: + protected: Underlying m_Underlying; }; @@ -379,20 +363,18 @@ protected: /** Averages the values of the underlying 4 * 4 neighbors. */ -class cProtIntGenAvg4Values: - public cProtIntGen +class cProtIntGenAvg4Values : public cProtIntGen { using Super = cProtIntGen; -public: - - cProtIntGenAvg4Values(Underlying a_Underlying): + public: + cProtIntGenAvg4Values(Underlying a_Underlying) : m_Underlying(std::move(a_Underlying)) { } - virtual void GetInts(int a_MinX, int a_MinZ, size_t a_SizeX, size_t a_SizeZ, int *a_Values) override + virtual void GetInts(int a_MinX, int a_MinZ, size_t a_SizeX, size_t a_SizeZ, int * a_Values) override { // Generate the underlying values: size_t lowerSizeX = a_SizeX + 4; @@ -410,17 +392,19 @@ public: size_t idxLower2 = idxLower1 + lowerSizeX; size_t idxLower3 = idxLower1 + 2 * lowerSizeX; size_t idxLower4 = idxLower1 + 3 * lowerSizeX; - a_Values[x + a_SizeX * z] = ( - 1 * lowerData[idxLower1] + 2 * lowerData[idxLower1 + 1] + 2 * lowerData[idxLower1 + 2] + 1 * lowerData[idxLower1 + 3] + - 2 * lowerData[idxLower2] + 32 * lowerData[idxLower2 + 1] + 32 * lowerData[idxLower2 + 2] + 2 * lowerData[idxLower2 + 3] + - 2 * lowerData[idxLower3] + 32 * lowerData[idxLower3 + 1] + 32 * lowerData[idxLower3 + 2] + 2 * lowerData[idxLower3 + 3] + - 1 * lowerData[idxLower4] + 2 * lowerData[idxLower4 + 1] + 2 * lowerData[idxLower4 + 2] + 1 * lowerData[idxLower4 + 3] - ) / 148; + a_Values[x + a_SizeX * z] = + (1 * lowerData[idxLower1] + 2 * lowerData[idxLower1 + 1] + 2 * lowerData[idxLower1 + 2] + + 1 * lowerData[idxLower1 + 3] + 2 * lowerData[idxLower2] + 32 * lowerData[idxLower2 + 1] + + 32 * lowerData[idxLower2 + 2] + 2 * lowerData[idxLower2 + 3] + 2 * lowerData[idxLower3] + + 32 * lowerData[idxLower3 + 1] + 32 * lowerData[idxLower3 + 2] + 2 * lowerData[idxLower3 + 3] + + 1 * lowerData[idxLower4] + 2 * lowerData[idxLower4 + 1] + 2 * lowerData[idxLower4 + 2] + + 1 * lowerData[idxLower4 + 3]) / + 148; } } } -protected: + protected: Underlying m_Underlying; }; @@ -429,21 +413,18 @@ protected: /** Averages the values of the underlying 3 * 3 neighbors with custom weight. */ -template <int WeightCenter, int WeightCardinal, int WeightDiagonal> -class cProtIntGenWeightAvg: - public cProtIntGen +template <int WeightCenter, int WeightCardinal, int WeightDiagonal> class cProtIntGenWeightAvg : public cProtIntGen { using Super = cProtIntGen; -public: - - cProtIntGenWeightAvg(Underlying a_Underlying): + public: + cProtIntGenWeightAvg(Underlying a_Underlying) : m_Underlying(std::move(a_Underlying)) { } - virtual void GetInts(int a_MinX, int a_MinZ, size_t a_SizeX, size_t a_SizeZ, int *a_Values) override + virtual void GetInts(int a_MinX, int a_MinZ, size_t a_SizeX, size_t a_SizeZ, int * a_Values) override { // Generate the underlying values: size_t lowerSizeX = a_SizeX + 3; @@ -460,16 +441,18 @@ public: size_t idxLower1 = x + lowerSizeX * z; size_t idxLower2 = idxLower1 + lowerSizeX; size_t idxLower3 = idxLower1 + 2 * lowerSizeX; - a_Values[x + a_SizeX * z] = ( - WeightDiagonal * lowerData[idxLower1] + WeightCardinal * lowerData[idxLower1 + 1] + WeightDiagonal * lowerData[idxLower1 + 2] + - WeightCardinal * lowerData[idxLower2] + WeightCenter * lowerData[idxLower2 + 1] + WeightCardinal * lowerData[idxLower2 + 2] + - WeightDiagonal * lowerData[idxLower3] + WeightCardinal * lowerData[idxLower3 + 1] + WeightDiagonal * lowerData[idxLower3 + 2] - ) / (4 * WeightDiagonal + 4 * WeightCardinal + WeightCenter); + a_Values[x + a_SizeX * z] = + (WeightDiagonal * lowerData[idxLower1] + WeightCardinal * lowerData[idxLower1 + 1] + + WeightDiagonal * lowerData[idxLower1 + 2] + WeightCardinal * lowerData[idxLower2] + + WeightCenter * lowerData[idxLower2 + 1] + WeightCardinal * lowerData[idxLower2 + 2] + + WeightDiagonal * lowerData[idxLower3] + WeightCardinal * lowerData[idxLower3 + 1] + + WeightDiagonal * lowerData[idxLower3 + 2]) / + (4 * WeightDiagonal + 4 * WeightCardinal + WeightCenter); } } } -protected: + protected: Underlying m_Underlying; }; @@ -478,24 +461,18 @@ protected: /** Replaces random values of the underlying data with random integers in the specified range [Min .. Min + Range). */ -class cProtIntGenRndChoice: - public cProtIntGenWithNoise +class cProtIntGenRndChoice : public cProtIntGenWithNoise { using Super = cProtIntGenWithNoise; -public: - - cProtIntGenRndChoice(int a_Seed, int a_ChancePct, int a_Min, int a_Range, Underlying a_Underlying): - Super(a_Seed), - m_ChancePct(a_ChancePct), - m_Min(a_Min), - m_Range(a_Range), - m_Underlying(std::move(a_Underlying)) + public: + cProtIntGenRndChoice(int a_Seed, int a_ChancePct, int a_Min, int a_Range, Underlying a_Underlying) : + Super(a_Seed), m_ChancePct(a_ChancePct), m_Min(a_Min), m_Range(a_Range), m_Underlying(std::move(a_Underlying)) { } - virtual void GetInts(int a_MinX, int a_MinZ, size_t a_SizeX, size_t a_SizeZ, int *a_Values) override + virtual void GetInts(int a_MinX, int a_MinZ, size_t a_SizeX, size_t a_SizeZ, int * a_Values) override { // Generate the underlying values: m_Underlying->GetInts(a_MinX, a_MinZ, a_SizeX, a_SizeZ, a_Values); @@ -508,13 +485,14 @@ public: { if (((Super::m_Noise.IntNoise2DInt(BaseZ, a_MinX + static_cast<int>(x)) / 13) % 101) < m_ChancePct) { - a_Values[x + a_SizeX * z] = m_Min + (Super::m_Noise.IntNoise2DInt(a_MinX + static_cast<int>(x), BaseZ) / 7) % m_Range; + a_Values[x + a_SizeX * z] = + m_Min + (Super::m_Noise.IntNoise2DInt(a_MinX + static_cast<int>(x), BaseZ) / 7) % m_Range; } } // for x } // for z } -protected: + protected: int m_ChancePct; int m_Min; int m_Range; @@ -526,23 +504,18 @@ protected: /** Adds a random value in range [-a_HalfRange, +a_HalfRange] to each of the underlying values. */ -class cProtIntGenAddRnd: - public cProtIntGenWithNoise +class cProtIntGenAddRnd : public cProtIntGenWithNoise { using Super = cProtIntGenWithNoise; -public: - - cProtIntGenAddRnd(int a_Seed, int a_HalfRange, Underlying a_Underlying): - Super(a_Seed), - m_Range(a_HalfRange * 2 + 1), - m_HalfRange(a_HalfRange), - m_Underlying(std::move(a_Underlying)) + public: + cProtIntGenAddRnd(int a_Seed, int a_HalfRange, Underlying a_Underlying) : + Super(a_Seed), m_Range(a_HalfRange * 2 + 1), m_HalfRange(a_HalfRange), m_Underlying(std::move(a_Underlying)) { } - virtual void GetInts(int a_MinX, int a_MinZ, size_t a_SizeX, size_t a_SizeZ, int *a_Values) override + virtual void GetInts(int a_MinX, int a_MinZ, size_t a_SizeX, size_t a_SizeZ, int * a_Values) override { // Generate the underlying values: m_Underlying->GetInts(a_MinX, a_MinZ, a_SizeX, a_SizeZ, a_Values); @@ -553,13 +526,14 @@ public: int NoiseZ = a_MinZ + static_cast<int>(z); for (size_t x = 0; x < a_SizeX; x++) { - int noiseVal = ((Super::m_Noise.IntNoise2DInt(a_MinX + static_cast<int>(x), NoiseZ) / 7) % m_Range) - m_HalfRange; + int noiseVal = + ((Super::m_Noise.IntNoise2DInt(a_MinX + static_cast<int>(x), NoiseZ) / 7) % m_Range) - m_HalfRange; a_Values[x + z * a_SizeX] += noiseVal; } } } -protected: + protected: int m_Range; int m_HalfRange; Underlying m_Underlying; @@ -570,22 +544,18 @@ protected: /** Replaces random underlying values with the average of the neighbors. */ -class cProtIntGenRndAvg: - public cProtIntGenWithNoise +class cProtIntGenRndAvg : public cProtIntGenWithNoise { using Super = cProtIntGenWithNoise; -public: - - cProtIntGenRndAvg(int a_Seed, int a_AvgChancePct, Underlying a_Underlying): - Super(a_Seed), - m_AvgChancePct(a_AvgChancePct), - m_Underlying(std::move(a_Underlying)) + public: + cProtIntGenRndAvg(int a_Seed, int a_AvgChancePct, Underlying a_Underlying) : + Super(a_Seed), m_AvgChancePct(a_AvgChancePct), m_Underlying(std::move(a_Underlying)) { } - virtual void GetInts(int a_MinX, int a_MinZ, size_t a_SizeX, size_t a_SizeZ, int *a_Values) override + virtual void GetInts(int a_MinX, int a_MinZ, size_t a_SizeX, size_t a_SizeZ, int * a_Values) override { // Generate the underlying values: size_t lowerSizeX = a_SizeX + 2; @@ -604,10 +574,9 @@ public: if (((Super::m_Noise.IntNoise2DInt(a_MinX + static_cast<int>(x), NoiseZ) / 7) % 100) > m_AvgChancePct) { // Average the 4 neighbors: - a_Values[x + z * a_SizeX] = ( - lowerData[idxLower - 1] + lowerData[idxLower + 1] + - lowerData[idxLower - lowerSizeX] + lowerData[idxLower + lowerSizeX] - ) / 4; + a_Values[x + z * a_SizeX] = (lowerData[idxLower - 1] + lowerData[idxLower + 1] + + lowerData[idxLower - lowerSizeX] + lowerData[idxLower + lowerSizeX]) / + 4; } else { @@ -618,7 +587,7 @@ public: } } -protected: + protected: int m_AvgChancePct; Underlying m_Underlying; }; @@ -628,22 +597,18 @@ protected: /** Replaces random underlying values with a random value in between the max and min of the neighbors. */ -class cProtIntGenRndBetween: - public cProtIntGenWithNoise +class cProtIntGenRndBetween : public cProtIntGenWithNoise { using Super = cProtIntGenWithNoise; -public: - - cProtIntGenRndBetween(int a_Seed, int a_AvgChancePct, Underlying a_Underlying): - Super(a_Seed), - m_AvgChancePct(a_AvgChancePct), - m_Underlying(std::move(a_Underlying)) + public: + cProtIntGenRndBetween(int a_Seed, int a_AvgChancePct, Underlying a_Underlying) : + Super(a_Seed), m_AvgChancePct(a_AvgChancePct), m_Underlying(std::move(a_Underlying)) { } - virtual void GetInts(int a_MinX, int a_MinZ, size_t a_SizeX, size_t a_SizeZ, int *a_Values) override + virtual void GetInts(int a_MinX, int a_MinZ, size_t a_SizeX, size_t a_SizeZ, int * a_Values) override { // Generate the underlying values: size_t lowerSizeX = a_SizeX + 2; @@ -662,9 +627,17 @@ public: if (((Super::m_Noise.IntNoise2DInt(a_MinX + static_cast<int>(x), NoiseZ) / 7) % 100) > m_AvgChancePct) { // Chose a value in between the min and max neighbor: - int min = std::min(std::min(lowerData[idxLower - 1], lowerData[idxLower + 1]), std::min(lowerData[idxLower - lowerSizeX], lowerData[idxLower + lowerSizeX])); - int max = std::max(std::max(lowerData[idxLower - 1], lowerData[idxLower + 1]), std::max(lowerData[idxLower - lowerSizeX], lowerData[idxLower + lowerSizeX])); - a_Values[x + z * a_SizeX] = min + ((Super::m_Noise.IntNoise2DInt(a_MinX + static_cast<int>(x), NoiseZ + 10) / 7) % (max - min + 1)); + int min = std::min( + std::min(lowerData[idxLower - 1], lowerData[idxLower + 1]), + std::min(lowerData[idxLower - lowerSizeX], lowerData[idxLower + lowerSizeX]) + ); + int max = std::max( + std::max(lowerData[idxLower - 1], lowerData[idxLower + 1]), + std::max(lowerData[idxLower - lowerSizeX], lowerData[idxLower + lowerSizeX]) + ); + a_Values[x + z * a_SizeX] = min + + ((Super::m_Noise.IntNoise2DInt(a_MinX + static_cast<int>(x), NoiseZ + 10) / 7) % (max - min + 1) + ); } else { @@ -675,7 +648,7 @@ public: } } -protected: + protected: int m_AvgChancePct; Underlying m_Underlying; }; @@ -685,24 +658,21 @@ protected: /** Converts land biomes at the edge of an ocean into the respective beach biome. */ -class cProtIntGenBeaches: - public cProtIntGen +class cProtIntGenBeaches : public cProtIntGen { using Super = cProtIntGen; -public: - - cProtIntGenBeaches(Underlying a_Underlying): + public: + cProtIntGenBeaches(Underlying a_Underlying) : m_Underlying(std::move(a_Underlying)) { } - virtual void GetInts(int a_MinX, int a_MinZ, size_t a_SizeX, size_t a_SizeZ, int *a_Values) override + virtual void GetInts(int a_MinX, int a_MinZ, size_t a_SizeX, size_t a_SizeZ, int * a_Values) override { // Map for biome -> its beach: - static const int ToBeach[] = - { + static const int ToBeach[] = { /* biOcean */ biOcean, /* biPlains */ biBeach, /* biDesert */ biBeach, @@ -757,10 +727,10 @@ public: { for (size_t x = 0; x < a_SizeX; x++) { - int val = lowerValues[x + 1 + (z + 1) * lowerSizeX]; - int above = lowerValues[x + 1 + z * lowerSizeX]; + int val = lowerValues[x + 1 + (z + 1) * lowerSizeX]; + int above = lowerValues[x + 1 + z * lowerSizeX]; int below = lowerValues[x + 1 + (z + 2) * lowerSizeX]; - int left = lowerValues[x + (z + 1) * lowerSizeX]; + int left = lowerValues[x + (z + 1) * lowerSizeX]; int right = lowerValues[x + 2 + (z + 1) * lowerSizeX]; if (!IsBiomeOcean(val)) { @@ -775,7 +745,7 @@ public: } } -protected: + protected: Underlying m_Underlying; }; @@ -785,25 +755,21 @@ protected: /** Generates the underlying numbers and then randomly changes some ocean group pixels into random land biome group pixels, based on the predefined chance. */ -class cProtIntGenAddIslands: - public cProtIntGenWithNoise +class cProtIntGenAddIslands : public cProtIntGenWithNoise { using Super = cProtIntGenWithNoise; -public: - + public: using Underlying = std::shared_ptr<cProtIntGen>; - cProtIntGenAddIslands(int a_Seed, int a_Chance, Underlying a_Underlying): - Super(a_Seed), - m_Chance(a_Chance), - m_Underlying(std::move(a_Underlying)) + cProtIntGenAddIslands(int a_Seed, int a_Chance, Underlying a_Underlying) : + Super(a_Seed), m_Chance(a_Chance), m_Underlying(std::move(a_Underlying)) { } - virtual void GetInts(int a_MinX, int a_MinZ, size_t a_SizeX, size_t a_SizeZ, int *a_Values) override + virtual void GetInts(int a_MinX, int a_MinZ, size_t a_SizeX, size_t a_SizeZ, int * a_Values) override { m_Underlying->GetInts(a_MinX, a_MinZ, a_SizeX, a_SizeZ, a_Values); for (size_t z = 0; z < a_SizeZ; z++) @@ -812,7 +778,8 @@ public: { if (a_Values[x + z * a_SizeX] == bgOcean) { - int rnd = Super::m_Noise.IntNoise2DInt(a_MinX + static_cast<int>(x), a_MinZ + static_cast<int>(z)) / 7; + int rnd = + Super::m_Noise.IntNoise2DInt(a_MinX + static_cast<int>(x), a_MinZ + static_cast<int>(z)) / 7; if (rnd % 1000 < m_Chance) { a_Values[x + z * a_SizeX] = (rnd / 1003) % bgLandOceanMax; @@ -822,7 +789,7 @@ public: } } -protected: + protected: /** Chance of each ocean pixel being converted, in permille. */ int m_Chance; @@ -834,14 +801,12 @@ protected: /** A filter that adds an edge biome group between two biome groups that need an edge between them. */ -class cProtIntGenBiomeGroupEdges: - public cProtIntGen +class cProtIntGenBiomeGroupEdges : public cProtIntGen { using Super = cProtIntGen; -public: - - cProtIntGenBiomeGroupEdges(Underlying a_Underlying): + public: + cProtIntGenBiomeGroupEdges(Underlying a_Underlying) : m_Underlying(std::move(a_Underlying)) { } @@ -861,22 +826,18 @@ public: { for (size_t x = 0; x < a_SizeX; x++) { - int val = lowerValues[x + 1 + (z + 1) * lowerSizeX]; - int Above = lowerValues[x + 1 + z * lowerSizeX]; + int val = lowerValues[x + 1 + (z + 1) * lowerSizeX]; + int Above = lowerValues[x + 1 + z * lowerSizeX]; int Below = lowerValues[x + 1 + (z + 2) * lowerSizeX]; - int Left = lowerValues[x + (z + 1) * lowerSizeX]; + int Left = lowerValues[x + (z + 1) * lowerSizeX]; int Right = lowerValues[x + 2 + (z + 1) * lowerSizeX]; switch (val) { // Desert should neighbor only oceans, desert and temperates; change to temperate when another: case bgDesert: { - if ( - !isDesertCompatible(Above) || - !isDesertCompatible(Below) || - !isDesertCompatible(Left) || - !isDesertCompatible(Right) - ) + if (!isDesertCompatible(Above) || !isDesertCompatible(Below) || !isDesertCompatible(Left) || + !isDesertCompatible(Right)) { val = bgTemperate; } @@ -886,12 +847,7 @@ public: // Ice should not neighbor deserts; change to temperate: case bgIce: { - if ( - (Above == bgDesert) || - (Below == bgDesert) || - (Left == bgDesert) || - (Right == bgDesert) - ) + if ((Above == bgDesert) || (Below == bgDesert) || (Left == bgDesert) || (Right == bgDesert)) { val = bgTemperate; } @@ -903,7 +859,7 @@ public: } // for z } -protected: + protected: Underlying m_Underlying; @@ -932,91 +888,102 @@ protected: /** Turns biome group indices into real biomes. For each pixel, takes its biome group and chooses a random biome from that group; replaces the value with that biome. */ -class cProtIntGenBiomes: - public cProtIntGenWithNoise +class cProtIntGenBiomes : public cProtIntGenWithNoise { using Super = cProtIntGenWithNoise; -public: - - cProtIntGenBiomes(int a_Seed, Underlying a_Underlying): - Super(a_Seed), - m_Underlying(std::move(a_Underlying)) + public: + cProtIntGenBiomes(int a_Seed, Underlying a_Underlying) : + Super(a_Seed), m_Underlying(std::move(a_Underlying)) { } - virtual void GetInts(int a_MinX, int a_MinZ, size_t a_SizeX, size_t a_SizeZ, int *a_Values) override + virtual void GetInts(int a_MinX, int a_MinZ, size_t a_SizeX, size_t a_SizeZ, int * a_Values) override { // Define the per-biome-group biomes: - static const int oceanBiomes[] = - { + static const int oceanBiomes[] = { biOcean, // biDeepOcean, }; // Same as oceanBiomes, there are no rare oceanic biomes (mushroom islands are handled separately) - static const int rareOceanBiomes[] = - { + static const int rareOceanBiomes[] = { biOcean, }; - static const int desertBiomes[] = - { - biDesert, biDesert, biDesert, biDesert, biDesert, biDesert, biSavanna, biSavanna, biPlains, + static const int desertBiomes[] = { + biDesert, + biDesert, + biDesert, + biDesert, + biDesert, + biDesert, + biSavanna, + biSavanna, + biPlains, }; - static const int rareDesertBiomes[] = - { - biMesaPlateau, biMesaPlateauF, + static const int rareDesertBiomes[] = { + biMesaPlateau, + biMesaPlateauF, }; - static const int temperateBiomes[] = - { - biForest, biForest, biRoofedForest, biExtremeHills, biPlains, biBirchForest, biSwampland, + static const int temperateBiomes[] = { + biForest, + biForest, + biRoofedForest, + biExtremeHills, + biPlains, + biBirchForest, + biSwampland, }; - static const int rareTemperateBiomes[] = - { + static const int rareTemperateBiomes[] = { biJungle, // Jungle is not strictly temperate, but let's piggyback it here }; - static const int mountainBiomes[] = - { - biExtremeHills, biForest, biTaiga, biPlains, + static const int mountainBiomes[] = { + biExtremeHills, + biForest, + biTaiga, + biPlains, }; - static const int rareMountainBiomes[] = - { + static const int rareMountainBiomes[] = { biMegaTaiga, }; - static const int iceBiomes[] = - { - biIcePlains, biIcePlains, biIcePlains, biIcePlains, biColdTaiga, + static const int iceBiomes[] = { + biIcePlains, + biIcePlains, + biIcePlains, + biIcePlains, + biColdTaiga, }; // Same as iceBiomes, there's no rare ice biome - static const int rareIceBiomes[] = - { - biIcePlains, biIcePlains, biIcePlains, biIcePlains, biColdTaiga, + static const int rareIceBiomes[] = { + biIcePlains, + biIcePlains, + biIcePlains, + biIcePlains, + biColdTaiga, }; - static const cBiomesInGroups biomesInGroups[] = - { - /* bgOcean */ { static_cast<int>(ARRAYCOUNT(oceanBiomes)), oceanBiomes}, - /* bgDesert */ { static_cast<int>(ARRAYCOUNT(desertBiomes)), desertBiomes}, - /* bgTemperate */ { static_cast<int>(ARRAYCOUNT(temperateBiomes)), temperateBiomes}, - /* bgMountains */ { static_cast<int>(ARRAYCOUNT(mountainBiomes)), mountainBiomes}, - /* bgIce */ { static_cast<int>(ARRAYCOUNT(iceBiomes)), iceBiomes}, + static const cBiomesInGroups biomesInGroups[] = { + /* bgOcean */ {static_cast<int>(ARRAYCOUNT(oceanBiomes)), oceanBiomes}, + /* bgDesert */ {static_cast<int>(ARRAYCOUNT(desertBiomes)), desertBiomes}, + /* bgTemperate */ {static_cast<int>(ARRAYCOUNT(temperateBiomes)), temperateBiomes}, + /* bgMountains */ {static_cast<int>(ARRAYCOUNT(mountainBiomes)), mountainBiomes}, + /* bgIce */ {static_cast<int>(ARRAYCOUNT(iceBiomes)), iceBiomes}, }; - static const cBiomesInGroups rareBiomesInGroups[] = - { - /* bgOcean */ { static_cast<int>(ARRAYCOUNT(rareOceanBiomes)), rareOceanBiomes}, - /* bgDesert */ { static_cast<int>(ARRAYCOUNT(rareDesertBiomes)), rareDesertBiomes}, - /* bgTemperate */ { static_cast<int>(ARRAYCOUNT(rareTemperateBiomes)), rareTemperateBiomes}, - /* bgMountains */ { static_cast<int>(ARRAYCOUNT(rareMountainBiomes)), rareMountainBiomes}, - /* bgIce */ { static_cast<int>(ARRAYCOUNT(rareIceBiomes)), rareIceBiomes}, + static const cBiomesInGroups rareBiomesInGroups[] = { + /* bgOcean */ {static_cast<int>(ARRAYCOUNT(rareOceanBiomes)), rareOceanBiomes}, + /* bgDesert */ {static_cast<int>(ARRAYCOUNT(rareDesertBiomes)), rareDesertBiomes}, + /* bgTemperate */ {static_cast<int>(ARRAYCOUNT(rareTemperateBiomes)), rareTemperateBiomes}, + /* bgMountains */ {static_cast<int>(ARRAYCOUNT(rareMountainBiomes)), rareMountainBiomes}, + /* bgIce */ {static_cast<int>(ARRAYCOUNT(rareIceBiomes)), rareIceBiomes}, }; // Generate the underlying values, representing biome groups: @@ -1030,17 +997,17 @@ public: for (size_t x = 0; x < a_SizeX; x++) { int val = a_Values[x + IdxZ]; - const cBiomesInGroups & Biomes = (val > bgfRare) ? - rareBiomesInGroups[(val & (bgfRare - 1)) % ARRAYCOUNT(rareBiomesInGroups)] : - biomesInGroups[static_cast<size_t>(val) % ARRAYCOUNT(biomesInGroups)]; - int rnd = (Super::m_Noise.IntNoise2DInt(static_cast<int>(x) + a_MinX, static_cast<int>(z) + a_MinZ) / 7); + const cBiomesInGroups & Biomes = (val > bgfRare) + ? rareBiomesInGroups[(val & (bgfRare - 1)) % ARRAYCOUNT(rareBiomesInGroups)] + : biomesInGroups[static_cast<size_t>(val) % ARRAYCOUNT(biomesInGroups)]; + int rnd = + (Super::m_Noise.IntNoise2DInt(static_cast<int>(x) + a_MinX, static_cast<int>(z) + a_MinZ) / 7); a_Values[x + IdxZ] = Biomes.Biomes[rnd % Biomes.Count]; } } } -protected: - + protected: struct cBiomesInGroups { const int Count; @@ -1057,27 +1024,21 @@ protected: /** Randomly replaces pixels of one value to another value, using the given chance. */ -class cProtIntGenReplaceRandomly: - public cProtIntGenWithNoise +class cProtIntGenReplaceRandomly : public cProtIntGenWithNoise { using Super = cProtIntGenWithNoise; -public: - + public: using Underlying = std::shared_ptr<cProtIntGen>; - cProtIntGenReplaceRandomly(int a_Seed, int a_From, int a_To, int a_Chance, Underlying a_Underlying): - Super(a_Seed), - m_From(a_From), - m_To(a_To), - m_Chance(a_Chance), - m_Underlying(std::move(a_Underlying)) + cProtIntGenReplaceRandomly(int a_Seed, int a_From, int a_To, int a_Chance, Underlying a_Underlying) : + Super(a_Seed), m_From(a_From), m_To(a_To), m_Chance(a_Chance), m_Underlying(std::move(a_Underlying)) { } - virtual void GetInts(int a_MinX, int a_MinZ, size_t a_SizeX, size_t a_SizeZ, int *a_Values) override + virtual void GetInts(int a_MinX, int a_MinZ, size_t a_SizeX, size_t a_SizeZ, int * a_Values) override { // Generate the underlying values: m_Underlying->GetInts(a_MinX, a_MinZ, a_SizeX, a_SizeZ, a_Values); @@ -1091,7 +1052,8 @@ public: size_t idx = x + idxZ; if (a_Values[idx] == m_From) { - int rnd = Super::m_Noise.IntNoise2DInt(static_cast<int>(x) + a_MinX, static_cast<int>(z) + a_MinZ) / 7; + int rnd = + Super::m_Noise.IntNoise2DInt(static_cast<int>(x) + a_MinX, static_cast<int>(z) + a_MinZ) / 7; if (rnd % 1000 < m_Chance) { a_Values[idx] = m_To; @@ -1102,7 +1064,7 @@ public: } -protected: + protected: /** The original value to be replaced. */ int m_From; @@ -1123,21 +1085,18 @@ protected: It first checks for oceans, if there is an ocean in the Biomes, it keeps the ocean. If there's no ocean, it checks Rivers for a river, if there is a river, it uses the Biomes to select either regular river or frozen river, based on the biome. */ -class cProtIntGenMixRivers: - public cProtIntGen +class cProtIntGenMixRivers : public cProtIntGen { using Super = cProtIntGen; -public: - - cProtIntGenMixRivers(Underlying a_Biomes, Underlying a_Rivers): - m_Biomes(std::move(a_Biomes)), - m_Rivers(std::move(a_Rivers)) + public: + cProtIntGenMixRivers(Underlying a_Biomes, Underlying a_Rivers) : + m_Biomes(std::move(a_Biomes)), m_Rivers(std::move(a_Rivers)) { } - virtual void GetInts(int a_MinX, int a_MinZ, size_t a_SizeX, size_t a_SizeZ, int *a_Values) override + virtual void GetInts(int a_MinX, int a_MinZ, size_t a_SizeX, size_t a_SizeZ, int * a_Values) override { // Generate the underlying data: ASSERT(a_SizeX * a_SizeZ <= m_BufferSize); @@ -1176,7 +1135,7 @@ public: } // for z } -protected: + protected: Underlying m_Biomes; Underlying m_Rivers; }; @@ -1188,21 +1147,18 @@ protected: /** Generates a river based on the underlying data. This is basically an edge detector over the underlying data. The rivers are the edges where the underlying data changes from one pixel to its neighbor. */ -class cProtIntGenRiver: - public cProtIntGenWithNoise +class cProtIntGenRiver : public cProtIntGenWithNoise { using Super = cProtIntGenWithNoise; -public: - - cProtIntGenRiver(int a_Seed, Underlying a_Underlying): - Super(a_Seed), - m_Underlying(std::move(a_Underlying)) + public: + cProtIntGenRiver(int a_Seed, Underlying a_Underlying) : + Super(a_Seed), m_Underlying(std::move(a_Underlying)) { } - virtual void GetInts(int a_MinX, int a_MinZ, size_t a_SizeX, size_t a_SizeZ, int *a_Values) override + virtual void GetInts(int a_MinX, int a_MinZ, size_t a_SizeX, size_t a_SizeZ, int * a_Values) override { // Generate the underlying data: size_t lowerSizeX = a_SizeX + 2; @@ -1216,11 +1172,11 @@ public: { for (size_t x = 0; x < a_SizeX; x++) { - int Above = lowerValues[x + 1 + z * lowerSizeX]; + int Above = lowerValues[x + 1 + z * lowerSizeX]; int Below = lowerValues[x + 1 + (z + 2) * lowerSizeX]; - int Left = lowerValues[x + (z + 1) * lowerSizeX]; + int Left = lowerValues[x + (z + 1) * lowerSizeX]; int Right = lowerValues[x + 2 + (z + 1) * lowerSizeX]; - int val = lowerValues[x + 1 + (z + 1) * lowerSizeX]; + int val = lowerValues[x + 1 + (z + 1) * lowerSizeX]; if ((val == Above) && (val == Below) && (val == Left) && (val == Right)) { @@ -1235,7 +1191,7 @@ public: } // for z } -protected: + protected: Underlying m_Underlying; }; @@ -1245,23 +1201,18 @@ protected: /** Turns some of the oceans into the specified biome. Used for mushroom and deep ocean. The biome is only placed if at least 3 of its neighbors are ocean and only with the specified chance. */ -class cProtIntGenAddToOcean: - public cProtIntGenWithNoise +class cProtIntGenAddToOcean : public cProtIntGenWithNoise { using Super = cProtIntGenWithNoise; -public: - - cProtIntGenAddToOcean(int a_Seed, int a_Chance, int a_ToValue, Underlying a_Underlying): - Super(a_Seed), - m_Chance(a_Chance), - m_ToValue(a_ToValue), - m_Underlying(std::move(a_Underlying)) + public: + cProtIntGenAddToOcean(int a_Seed, int a_Chance, int a_ToValue, Underlying a_Underlying) : + Super(a_Seed), m_Chance(a_Chance), m_ToValue(a_ToValue), m_Underlying(std::move(a_Underlying)) { } - virtual void GetInts(int a_MinX, int a_MinZ, size_t a_SizeX, size_t a_SizeZ, int *a_Values) override + virtual void GetInts(int a_MinX, int a_MinZ, size_t a_SizeX, size_t a_SizeZ, int * a_Values) override { // Generate the underlying data: size_t lowerSizeX = a_SizeX + 2; @@ -1283,9 +1234,9 @@ public: } // Count the ocean neighbors: - int Above = lowerValues[x + 1 + z * lowerSizeX]; + int Above = lowerValues[x + 1 + z * lowerSizeX]; int Below = lowerValues[x + 1 + (z + 2) * lowerSizeX]; - int Left = lowerValues[x + (z + 1) * lowerSizeX]; + int Left = lowerValues[x + (z + 1) * lowerSizeX]; int Right = lowerValues[x + 2 + (z + 1) * lowerSizeX]; int NumOceanNeighbors = 0; if (IsBiomeOcean(Above)) @@ -1306,10 +1257,10 @@ public: } // If at least 3 ocean neighbors and the chance is right, change: - if ( - (NumOceanNeighbors >= 3) && - ((Super::m_Noise.IntNoise2DInt(static_cast<int>(x) + a_MinX, static_cast<int>(z) + a_MinZ) / 7) % 1000 < m_Chance) - ) + if ((NumOceanNeighbors >= 3) && + ((Super::m_Noise.IntNoise2DInt(static_cast<int>(x) + a_MinX, static_cast<int>(z) + a_MinZ) / 7) % + 1000 < + m_Chance)) { a_Values[x + z * a_SizeX] = m_ToValue; } @@ -1321,7 +1272,7 @@ public: } // for z } -protected: + protected: /** Chance, in permille, of changing the biome. */ int m_Chance; @@ -1336,23 +1287,18 @@ protected: /** Changes random pixels of the underlying data to the specified value. */ -class cProtIntGenSetRandomly: - public cProtIntGenWithNoise +class cProtIntGenSetRandomly : public cProtIntGenWithNoise { using Super = cProtIntGenWithNoise; -public: - - cProtIntGenSetRandomly(int a_Seed, int a_Chance, int a_ToValue, Underlying a_Underlying): - Super(a_Seed), - m_Chance(a_Chance), - m_ToValue(a_ToValue), - m_Underlying(std::move(a_Underlying)) + public: + cProtIntGenSetRandomly(int a_Seed, int a_Chance, int a_ToValue, Underlying a_Underlying) : + Super(a_Seed), m_Chance(a_Chance), m_ToValue(a_ToValue), m_Underlying(std::move(a_Underlying)) { } - virtual void GetInts(int a_MinX, int a_MinZ, size_t a_SizeX, size_t a_SizeZ, int *a_Values) override + virtual void GetInts(int a_MinX, int a_MinZ, size_t a_SizeX, size_t a_SizeZ, int * a_Values) override { // Generate the underlying data: m_Underlying->GetInts(a_MinX, a_MinZ, a_SizeX, a_SizeZ, a_Values); @@ -1371,7 +1317,7 @@ public: } } -protected: + protected: /** Chance, in permille, of changing each pixel. */ int m_Chance; @@ -1386,22 +1332,18 @@ protected: /** Adds a "rare" flag to random biome groups, based on the given chance. */ -class cProtIntGenRareBiomeGroups: - public cProtIntGenWithNoise +class cProtIntGenRareBiomeGroups : public cProtIntGenWithNoise { using Super = cProtIntGenWithNoise; -public: - - cProtIntGenRareBiomeGroups(int a_Seed, int a_Chance, Underlying a_Underlying): - Super(a_Seed), - m_Chance(a_Chance), - m_Underlying(std::move(a_Underlying)) + public: + cProtIntGenRareBiomeGroups(int a_Seed, int a_Chance, Underlying a_Underlying) : + Super(a_Seed), m_Chance(a_Chance), m_Underlying(std::move(a_Underlying)) { } - virtual void GetInts(int a_MinX, int a_MinZ, size_t a_SizeX, size_t a_SizeZ, int *a_Values) override + virtual void GetInts(int a_MinX, int a_MinZ, size_t a_SizeX, size_t a_SizeZ, int * a_Values) override { // Generate the underlying data: m_Underlying->GetInts(a_MinX, a_MinZ, a_SizeX, a_SizeZ, a_Values); @@ -1421,7 +1363,7 @@ public: } } -protected: + protected: /** Chance, in permille, of changing each pixel into the rare biome group. */ int m_Chance; @@ -1435,22 +1377,18 @@ protected: /** Changes biomes in the parent data into an alternate versions (usually "hill" variants), in such places that have their alterations set. */ -class cProtIntGenAlternateBiomes: - public cProtIntGenWithNoise +class cProtIntGenAlternateBiomes : public cProtIntGenWithNoise { using Super = cProtIntGenWithNoise; -public: - - cProtIntGenAlternateBiomes(int a_Seed, Underlying a_Alterations, Underlying a_BaseBiomes): - Super(a_Seed), - m_Alterations(std::move(a_Alterations)), - m_BaseBiomes(std::move(a_BaseBiomes)) + public: + cProtIntGenAlternateBiomes(int a_Seed, Underlying a_Alterations, Underlying a_BaseBiomes) : + Super(a_Seed), m_Alterations(std::move(a_Alterations)), m_BaseBiomes(std::move(a_BaseBiomes)) { } - virtual void GetInts(int a_MinX, int a_MinZ, size_t a_SizeX, size_t a_SizeZ, int *a_Values) override + virtual void GetInts(int a_MinX, int a_MinZ, size_t a_SizeX, size_t a_SizeZ, int * a_Values) override { // Generate the base biomes and the alterations: m_BaseBiomes->GetInts(a_MinX, a_MinZ, a_SizeX, a_SizeZ, a_Values); @@ -1472,26 +1410,26 @@ public: switch (val) { case biBirchForest: val = biBirchForestHills; break; - case biDesert: val = biDesertHills; break; + case biDesert: val = biDesertHills; break; case biExtremeHills: val = biExtremeHillsPlus; break; - case biForest: val = biForestHills; break; - case biIcePlains: val = biIceMountains; break; - case biJungle: val = biJungleHills; break; - case biMegaTaiga: val = biMegaTaigaHills; break; - case biMesaPlateau: val = biMesa; break; - case biMesaPlateauF: val = biMesa; break; - case biMesaPlateauM: val = biMesa; break; - case biMesaPlateauFM: val = biMesa; break; - case biPlains: val = biForest; break; - case biRoofedForest: val = biPlains; break; - case biSavanna: val = biSavannaPlateau; break; - case biTaiga: val = biTaigaHills; break; + case biForest: val = biForestHills; break; + case biIcePlains: val = biIceMountains; break; + case biJungle: val = biJungleHills; break; + case biMegaTaiga: val = biMegaTaigaHills; break; + case biMesaPlateau: val = biMesa; break; + case biMesaPlateauF: val = biMesa; break; + case biMesaPlateauM: val = biMesa; break; + case biMesaPlateauFM: val = biMesa; break; + case biPlains: val = biForest; break; + case biRoofedForest: val = biPlains; break; + case biSavanna: val = biSavannaPlateau; break; + case biTaiga: val = biTaigaHills; break; } a_Values[idx] = val; } // for idx - a_Values[] } -protected: + protected: Underlying m_Alterations; Underlying m_BaseBiomes; }; @@ -1501,21 +1439,18 @@ protected: /** Adds an edge between two specifically incompatible biomes, such as mesa and forest. */ -class cProtIntGenBiomeEdges: - public cProtIntGenWithNoise +class cProtIntGenBiomeEdges : public cProtIntGenWithNoise { using Super = cProtIntGenWithNoise; -public: - - cProtIntGenBiomeEdges(int a_Seed, Underlying a_Underlying): - Super(a_Seed), - m_Underlying(std::move(a_Underlying)) + public: + cProtIntGenBiomeEdges(int a_Seed, Underlying a_Underlying) : + Super(a_Seed), m_Underlying(std::move(a_Underlying)) { } - virtual void GetInts(int a_MinX, int a_MinZ, size_t a_SizeX, size_t a_SizeZ, int *a_Values) override + virtual void GetInts(int a_MinX, int a_MinZ, size_t a_SizeX, size_t a_SizeZ, int * a_Values) override { // Generate the underlying biomes: size_t lowerSizeX = a_SizeX + 2; @@ -1530,9 +1465,9 @@ public: for (size_t x = 0; x < a_SizeX; x++) { int biome = lowerValues[x + 1 + (z + 1) * lowerSizeX]; - int above = lowerValues[x + 1 + z * lowerSizeX]; + int above = lowerValues[x + 1 + z * lowerSizeX]; int below = lowerValues[x + 1 + (z + 2) * lowerSizeX]; - int left = lowerValues[x + (z + 1) * lowerSizeX]; + int left = lowerValues[x + (z + 1) * lowerSizeX]; int right = lowerValues[x + 2 + (z + 1) * lowerSizeX]; switch (biome) @@ -1541,12 +1476,10 @@ public: case biDesertM: case biDesertHills: { - if ( - IsBiomeVeryCold(static_cast<EMCSBiome>(above)) || + if (IsBiomeVeryCold(static_cast<EMCSBiome>(above)) || IsBiomeVeryCold(static_cast<EMCSBiome>(below)) || - IsBiomeVeryCold(static_cast<EMCSBiome>(left)) || - IsBiomeVeryCold(static_cast<EMCSBiome>(right)) - ) + IsBiomeVeryCold(static_cast<EMCSBiome>(left)) || + IsBiomeVeryCold(static_cast<EMCSBiome>(right))) { biome = biPlains; } @@ -1558,12 +1491,8 @@ public: case biMesaPlateauFM: case biMesaPlateauM: { - if ( - !isMesaCompatible(above) || - !isMesaCompatible(below) || - !isMesaCompatible(left) || - !isMesaCompatible(right) - ) + if (!isMesaCompatible(above) || !isMesaCompatible(below) || !isMesaCompatible(left) || + !isMesaCompatible(right)) { biome = biDesert; } @@ -1573,12 +1502,8 @@ public: case biJungle: case biJungleM: { - if ( - !isJungleCompatible(above) || - !isJungleCompatible(below) || - !isJungleCompatible(left) || - !isJungleCompatible(right) - ) + if (!isJungleCompatible(above) || !isJungleCompatible(below) || !isJungleCompatible(left) || + !isJungleCompatible(right)) { biome = (biome == biJungle) ? biJungleEdge : biJungleEdgeM; } @@ -1588,12 +1513,10 @@ public: case biSwampland: case biSwamplandM: { - if ( - IsBiomeNoDownfall(static_cast<EMCSBiome>(above)) || + if (IsBiomeNoDownfall(static_cast<EMCSBiome>(above)) || IsBiomeNoDownfall(static_cast<EMCSBiome>(below)) || - IsBiomeNoDownfall(static_cast<EMCSBiome>(left)) || - IsBiomeNoDownfall(static_cast<EMCSBiome>(right)) - ) + IsBiomeNoDownfall(static_cast<EMCSBiome>(left)) || + IsBiomeNoDownfall(static_cast<EMCSBiome>(right))) { biome = biPlains; } @@ -1607,7 +1530,7 @@ public: } -protected: + protected: Underlying m_Underlying; @@ -1661,22 +1584,18 @@ protected: /** Changes biomes in the parent data into their alternate versions ("M" variants), in such places that have their alterations set. */ -class cProtIntGenMBiomes: - public cProtIntGenWithNoise +class cProtIntGenMBiomes : public cProtIntGenWithNoise { using Super = cProtIntGenWithNoise; -public: - - cProtIntGenMBiomes(int a_Seed, Underlying a_Alteration, Underlying a_Underlying): - Super(a_Seed), - m_Underlying(std::move(a_Underlying)), - m_Alteration(std::move(a_Alteration)) + public: + cProtIntGenMBiomes(int a_Seed, Underlying a_Alteration, Underlying a_Underlying) : + Super(a_Seed), m_Underlying(std::move(a_Underlying)), m_Alteration(std::move(a_Alteration)) { } - virtual void GetInts(int a_MinX, int a_MinZ, size_t a_SizeX, size_t a_SizeZ, int *a_Values) override + virtual void GetInts(int a_MinX, int a_MinZ, size_t a_SizeX, size_t a_SizeZ, int * a_Values) override { // Generate the underlying biomes and the alterations: m_Underlying->GetInts(a_MinX, a_MinZ, a_SizeX, a_SizeZ, a_Values); @@ -1695,35 +1614,31 @@ public: // Ice spikes biome was removed from here, because it was generated way too often switch (a_Values[idx]) { - case biPlains: a_Values[idx] = biSunflowerPlains; break; - case biDesert: a_Values[idx] = biDesertM; break; - case biExtremeHills: a_Values[idx] = biExtremeHillsM; break; - case biForest: a_Values[idx] = biFlowerForest; break; - case biTaiga: a_Values[idx] = biTaigaM; break; - case biSwampland: a_Values[idx] = biSwamplandM; break; - case biJungle: a_Values[idx] = biJungleM; break; - case biJungleEdge: a_Values[idx] = biJungleEdgeM; break; - case biBirchForest: a_Values[idx] = biBirchForestM; break; - case biBirchForestHills: a_Values[idx] = biBirchForestHillsM; break; - case biRoofedForest: a_Values[idx] = biRoofedForestM; break; - case biColdTaiga: a_Values[idx] = biColdTaigaM; break; - case biMegaSpruceTaiga: a_Values[idx] = biMegaSpruceTaiga; break; + case biPlains: a_Values[idx] = biSunflowerPlains; break; + case biDesert: a_Values[idx] = biDesertM; break; + case biExtremeHills: a_Values[idx] = biExtremeHillsM; break; + case biForest: a_Values[idx] = biFlowerForest; break; + case biTaiga: a_Values[idx] = biTaigaM; break; + case biSwampland: a_Values[idx] = biSwamplandM; break; + case biJungle: a_Values[idx] = biJungleM; break; + case biJungleEdge: a_Values[idx] = biJungleEdgeM; break; + case biBirchForest: a_Values[idx] = biBirchForestM; break; + case biBirchForestHills: a_Values[idx] = biBirchForestHillsM; break; + case biRoofedForest: a_Values[idx] = biRoofedForestM; break; + case biColdTaiga: a_Values[idx] = biColdTaigaM; break; + case biMegaSpruceTaiga: a_Values[idx] = biMegaSpruceTaiga; break; case biMegaSpruceTaigaHills: a_Values[idx] = biMegaSpruceTaigaHills; break; - case biExtremeHillsPlus: a_Values[idx] = biExtremeHillsPlusM; break; - case biSavanna: a_Values[idx] = biSavannaM; break; - case biSavannaPlateau: a_Values[idx] = biSavannaPlateauM; break; - case biMesa: a_Values[idx] = biMesaBryce; break; - case biMesaPlateauF: a_Values[idx] = biMesaPlateauFM; break; - case biMesaPlateau: a_Values[idx] = biMesaBryce; break; + case biExtremeHillsPlus: a_Values[idx] = biExtremeHillsPlusM; break; + case biSavanna: a_Values[idx] = biSavannaM; break; + case biSavannaPlateau: a_Values[idx] = biSavannaPlateauM; break; + case biMesa: a_Values[idx] = biMesaBryce; break; + case biMesaPlateauF: a_Values[idx] = biMesaPlateauFM; break; + case biMesaPlateau: a_Values[idx] = biMesaBryce; break; } } // for idx - a_Values[] / alterations[] } -protected: + protected: Underlying m_Underlying; Underlying m_Alteration; }; - - - - |