+
+ virtual void resolveNodeNames();
+};
+
+
+////
+//// BiomeGen
+////
+
+enum BiomeGenType {
+ BIOMEGEN_ORIGINAL,
+};
+
+struct BiomeParams {
+ virtual void readParams(const Settings *settings) = 0;
+ virtual void writeParams(Settings *settings) const = 0;
+ virtual ~BiomeParams() {}
+
+ s32 seed;
+};
+
+class BiomeGen {
+public:
+ virtual ~BiomeGen() {}
+ virtual BiomeGenType getType() const = 0;
+
+ // Calculates the biome at the exact position provided. This function can
+ // be called at any time, but may be less efficient than the latter methods,
+ // depending on implementation.
+ virtual Biome *calcBiomeAtPoint(v3s16 pos) const = 0;
+
+ // Computes any intermediate results needed for biome generation. Must be
+ // called before using any of: getBiomes, getBiomeAtPoint, or getBiomeAtIndex.
+ // Calling this invalidates the previous results stored in biomemap.
+ virtual void calcBiomeNoise(v3s16 pmin) = 0;
+
+ // Gets all biomes in current chunk using each corresponding element of
+ // heightmap as the y position, then stores the results by biome index in
+ // biomemap (also returned)
+ virtual biome_t *getBiomes(s16 *heightmap) = 0;
+
+ // Gets a single biome at the specified position, which must be contained
+ // in the region formed by m_pmin and (m_pmin + m_csize - 1).
+ virtual Biome *getBiomeAtPoint(v3s16 pos) const = 0;
+
+ // Same as above, but uses a raw numeric index correlating to the (x,z) position.
+ virtual Biome *getBiomeAtIndex(size_t index, s16 y) const = 0;
+
+ // Result of calcBiomes bulk computation.
+ biome_t *biomemap;
+
+protected:
+ BiomeManager *m_bmgr;
+ v3s16 m_pmin;
+ v3s16 m_csize;
+};
+
+
+////
+//// BiomeGen implementations
+////
+
+//
+// Original biome algorithm (Whittaker's classification + surface height)
+//
+
+struct BiomeParamsOriginal : public BiomeParams {
+ BiomeParamsOriginal() :
+ np_heat(50, 50, v3f(1000.0, 1000.0, 1000.0), 5349, 3, 0.5, 2.0),
+ np_humidity(50, 50, v3f(1000.0, 1000.0, 1000.0), 842, 3, 0.5, 2.0),
+ np_heat_blend(0, 1.5, v3f(8.0, 8.0, 8.0), 13, 2, 1.0, 2.0),
+ np_humidity_blend(0, 1.5, v3f(8.0, 8.0, 8.0), 90003, 2, 1.0, 2.0)
+ {
+ }
+
+ virtual void readParams(const Settings *settings);
+ virtual void writeParams(Settings *settings) const;
+
+ NoiseParams np_heat;
+ NoiseParams np_humidity;
+ NoiseParams np_heat_blend;
+ NoiseParams np_humidity_blend;