diff options
-rw-r--r-- | src/heightmap.cpp | 38 | ||||
-rw-r--r-- | src/heightmap.h | 15 |
2 files changed, 33 insertions, 20 deletions
diff --git a/src/heightmap.cpp b/src/heightmap.cpp index 6e785fcc5..2f7ecc4dc 100644 --- a/src/heightmap.cpp +++ b/src/heightmap.cpp @@ -248,8 +248,7 @@ void FixedHeightmap::generateContinued(f32 randmax, f32 randfactor, s16 a = m_blocksize; // Check that a is a power of two - if((a & (a-1)) != 0) - throw; + assert((a & (a-1)) == 0); // Overwrite with GROUNDHEIGHT_NOTFOUND_SETVALUE for(s16 y=0; y<=a; y++){ @@ -263,7 +262,7 @@ void FixedHeightmap::generateContinued(f32 randmax, f32 randfactor, Seed borders from master heightmap NOTE: Does this actually have any effect on the output? */ - struct SeedSpec + /*struct SeedSpec { v2s16 neighbour_start; v2s16 heightmap_start; @@ -307,7 +306,7 @@ void FixedHeightmap::generateContinued(f32 randmax, f32 randfactor, hpos += seeds[i].dir; npos += seeds[i].dir; } - } + }*/ /*dstream<<"borders seeded:"<<std::endl; print();*/ @@ -548,13 +547,28 @@ FixedHeightmap * UnlimitedHeightmap::getHeightmap(v2s16 p_from, bool generate) FixedHeightmap *heightmap = new FixedHeightmap(this, p, m_blocksize); m_heightmaps.insert(p, heightmap); + + f32 corners[4]; - f32 corners[4] = { - m_base_generator->getValue(p+v2s16(0,0)), - m_base_generator->getValue(p+v2s16(1,0)), - m_base_generator->getValue(p+v2s16(1,1)), - m_base_generator->getValue(p+v2s16(0,1)), - }; + if(m_palist) + { + //TODO: palist must be taken into account in generateContinued. + // It is almost useless in here. + s32 div = 2 * 16; + Settings *attr = m_palist->getNearAttr(p / div); + assert(attr); + corners[0] = attr->getFloat("baseheight"); + corners[1] = attr->getFloat("baseheight"); + corners[2] = attr->getFloat("baseheight"); + corners[3] = attr->getFloat("baseheight"); + } + else + { + corners[0] = m_base_generator->getValue(p+v2s16(0,0)); + corners[1] = m_base_generator->getValue(p+v2s16(1,0)); + corners[2] = m_base_generator->getValue(p+v2s16(1,1)); + corners[3] = m_base_generator->getValue(p+v2s16(0,1)); + } f32 randmax = m_randmax_generator->getValue(p); f32 randfactor = m_randfactor_generator->getValue(p); @@ -829,7 +843,7 @@ UnlimitedHeightmap * UnlimitedHeightmap::deSerialize(std::istream &is) ValueGenerator *basegen = new ConstantGenerator(basevalue); UnlimitedHeightmap *hm = new UnlimitedHeightmap - (blocksize, maxgen, factorgen, basegen); + (blocksize, maxgen, factorgen, basegen, NULL); for(u32 i=0; i<heightmap_count; i++) { @@ -866,7 +880,7 @@ UnlimitedHeightmap * UnlimitedHeightmap::deSerialize(std::istream &is) FixedHeightmap::serializedLength(version, blocksize); UnlimitedHeightmap *hm = new UnlimitedHeightmap - (blocksize, maxgen, factorgen, basegen); + (blocksize, maxgen, factorgen, basegen, NULL); for(u32 i=0; i<heightmap_count; i++) { diff --git a/src/heightmap.h b/src/heightmap.h index 71e152d5c..fe0a7f405 100644 --- a/src/heightmap.h +++ b/src/heightmap.h @@ -502,22 +502,27 @@ private: core::map<v2s16, FixedHeightmap*> m_heightmaps; s16 m_blocksize; + // TODO: Remove ValueGenerators ValueGenerator *m_randmax_generator; ValueGenerator *m_randfactor_generator; ValueGenerator *m_base_generator; + PointAttributeList *m_palist; + public: UnlimitedHeightmap( s16 blocksize, ValueGenerator *randmax_generator, ValueGenerator *randfactor_generator, - ValueGenerator *base_generator + ValueGenerator *base_generator, + PointAttributeList *palist=NULL ): m_blocksize(blocksize), m_randmax_generator(randmax_generator), m_randfactor_generator(randfactor_generator), - m_base_generator(base_generator) + m_base_generator(base_generator), + m_palist(palist) { assert(m_randmax_generator != NULL); assert(m_randfactor_generator != NULL); @@ -538,12 +543,6 @@ public: delete m_base_generator; } - /*void setParams(f32 randmax, f32 randfactor) - { - m_randmax = randmax; - m_randfactor = randfactor; - }*/ - void print(); v2s16 getNodeHeightmapPos(v2s16 p) |