backing up working heightmap.{h,cpp}
authorPerttu Ahola <celeron55@gmail.com>
Sat, 15 Jan 2011 13:55:03 +0000 (15:55 +0200)
committerPerttu Ahola <celeron55@gmail.com>
Sat, 15 Jan 2011 13:55:03 +0000 (15:55 +0200)
src/heightmap.cpp
src/heightmap.h

index 6e785fcc5868e42a4ce028b2faf12c1b0d01aa7f..2f7ecc4dc01c336c4fac87436645192af1dbd53f 100644 (file)
@@ -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++)
                {
index 71e152d5c9af1bbb7b3e773e98b8937d76c65709..fe0a7f405b1754a7d27ee134c1df8e4850d0ee3e 100644 (file)
@@ -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)