diff options
author | Constantin Wenger <constantin.wenger@googlemail.com> | 2011-07-22 20:53:29 +0200 |
---|---|---|
committer | Constantin Wenger <constantin.wenger@googlemail.com> | 2011-07-22 20:53:29 +0200 |
commit | 383698186f954f52b8a957ef741175c437bf2502 (patch) | |
tree | f56ab1050d20d24cccaf830f3029193d025edf21 | |
parent | fb4c3ab4fbd29498a72a488199be58ead7505cc7 (diff) | |
parent | 7985d746f97ce1b37b6ca48a8a3e7ed70d02e4b0 (diff) | |
download | minetest-383698186f954f52b8a957ef741175c437bf2502.tar.gz minetest-383698186f954f52b8a957ef741175c437bf2502.tar.bz2 minetest-383698186f954f52b8a957ef741175c437bf2502.zip |
Merge remote-tracking branch 'upstream/master'
-rw-r--r-- | src/map.cpp | 68 | ||||
-rw-r--r-- | src/mapgen.cpp | 2 | ||||
-rw-r--r-- | src/mapnode.cpp | 42 | ||||
-rw-r--r-- | src/test.cpp | 33 |
4 files changed, 101 insertions, 44 deletions
diff --git a/src/map.cpp b/src/map.cpp index e47b1b212..e1769b8ef 100644 --- a/src/map.cpp +++ b/src/map.cpp @@ -2005,7 +2005,15 @@ void ServerMap::initBlockMake(mapgen::BlockMakeData *data, v3s16 blockpos) { /*dstream<<"initBlockMake(): ("<<blockpos.X<<","<<blockpos.Y<<"," <<blockpos.Z<<")"<<std::endl;*/ - + + // Do nothing if not inside limits (+-1 because of neighbors) + if(blockpos_over_limit(blockpos - v3s16(1,1,1)) || + blockpos_over_limit(blockpos + v3s16(1,1,1))) + { + data->no_op = true; + return; + } + data->no_op = false; data->seed = m_seed; data->blockpos = blockpos; @@ -2056,6 +2064,7 @@ void ServerMap::initBlockMake(mapgen::BlockMakeData *data, v3s16 blockpos) neighboring blocks */ + // The area that contains this block and it's neighbors v3s16 bigarea_blocks_min = blockpos - v3s16(1,1,1); v3s16 bigarea_blocks_max = blockpos + v3s16(1,1,1); @@ -2080,7 +2089,7 @@ MapBlock* ServerMap::finishBlockMake(mapgen::BlockMakeData *data, if(data->no_op) { - dstream<<"finishBlockMake(): no-op"<<std::endl; + //dstream<<"finishBlockMake(): no-op"<<std::endl; return NULL; } @@ -2332,49 +2341,54 @@ MapBlock * ServerMap::generateBlock( Get central block */ MapBlock *block = getBlockNoCreateNoEx(p); - assert(block); #if 0 /* Check result */ - bool erroneus_content = false; - for(s16 z0=0; z0<MAP_BLOCKSIZE; z0++) - for(s16 y0=0; y0<MAP_BLOCKSIZE; y0++) - for(s16 x0=0; x0<MAP_BLOCKSIZE; x0++) + if(block) { - v3s16 p(x0,y0,z0); - MapNode n = block->getNode(p); - if(n.d == CONTENT_IGNORE) + bool erroneus_content = false; + for(s16 z0=0; z0<MAP_BLOCKSIZE; z0++) + for(s16 y0=0; y0<MAP_BLOCKSIZE; y0++) + for(s16 x0=0; x0<MAP_BLOCKSIZE; x0++) + { + v3s16 p(x0,y0,z0); + MapNode n = block->getNode(p); + if(n.d == CONTENT_IGNORE) + { + dstream<<"CONTENT_IGNORE at " + <<"("<<p.X<<","<<p.Y<<","<<p.Z<<")" + <<std::endl; + erroneus_content = true; + assert(0); + } + } + if(erroneus_content) { - dstream<<"CONTENT_IGNORE at " - <<"("<<p.X<<","<<p.Y<<","<<p.Z<<")" - <<std::endl; - erroneus_content = true; assert(0); } } - if(erroneus_content) - { - assert(0); - } #endif #if 0 /* Generate a completely empty block */ - for(s16 z0=0; z0<MAP_BLOCKSIZE; z0++) - for(s16 x0=0; x0<MAP_BLOCKSIZE; x0++) + if(block) { - for(s16 y0=0; y0<MAP_BLOCKSIZE; y0++) + for(s16 z0=0; z0<MAP_BLOCKSIZE; z0++) + for(s16 x0=0; x0<MAP_BLOCKSIZE; x0++) { - MapNode n; - if(y0%2==0) - n.d = CONTENT_AIR; - else - n.d = CONTENT_STONE; - block->setNode(v3s16(x0,y0,z0), n); + for(s16 y0=0; y0<MAP_BLOCKSIZE; y0++) + { + MapNode n; + if(y0%2==0) + n.d = CONTENT_AIR; + else + n.d = CONTENT_STONE; + block->setNode(v3s16(x0,y0,z0), n); + } } } #endif diff --git a/src/mapgen.cpp b/src/mapgen.cpp index dfea862a5..8dda93c96 100644 --- a/src/mapgen.cpp +++ b/src/mapgen.cpp @@ -1331,7 +1331,7 @@ void make_block(BlockMakeData *data) { if(data->no_op) { - dstream<<"makeBlock: no-op"<<std::endl; + //dstream<<"makeBlock: no-op"<<std::endl; return; } diff --git a/src/mapnode.cpp b/src/mapnode.cpp index 391e593f9..1e9b64989 100644 --- a/src/mapnode.cpp +++ b/src/mapnode.cpp @@ -142,8 +142,10 @@ void init_mapnode() Initially set every block to be shown as an unknown block. Don't touch CONTENT_IGNORE or CONTENT_AIR. */ - for(u16 i=0; i<=253; i++) + for(u16 i=0; i<256; i++) { + if(i == CONTENT_IGNORE || i == CONTENT_AIR) + continue; ContentFeatures *f = &g_content_features[i]; f->setAllTextures("unknown_block.png"); f->dug_item = std::string("MaterialItem ")+itos(i)+" 1"; @@ -265,10 +267,10 @@ void MapNode::serialize(u8 *dest, u8 version) { // In these versions, CONTENT_IGNORE and CONTENT_AIR // are 255 and 254 - if(d == CONTENT_IGNORE) - d = 255; - else if(d == CONTENT_AIR) - d = 254; + if(actual_d == CONTENT_IGNORE) + actual_d = 255; + else if(actual_d == CONTENT_AIR) + actual_d = 254; } if(version == 0) @@ -315,17 +317,25 @@ void MapNode::deSerialize(u8 *source, u8 version) d = source[0]; param = source[1]; param2 = source[2]; - - // Convert from old version to new - if(version <= 18) - { - // In these versions, CONTENT_IGNORE and CONTENT_AIR - // are 255 and 254 - if(d == 255) - d = CONTENT_IGNORE; - else if(d == 254) - d = CONTENT_AIR; - } + } + + // Convert from old version to new + if(version <= 18) + { + // In these versions, CONTENT_IGNORE and CONTENT_AIR + // are 255 and 254 + if(d == 255) + d = CONTENT_IGNORE; + else if(d == 254) + d = CONTENT_AIR; + } + // version 19 is fucked up with sometimes the old values and sometimes not + if(version == 19) + { + if(d == 255) + d = CONTENT_IGNORE; + else if(d == 254) + d = CONTENT_AIR; } } diff --git a/src/test.cpp b/src/test.cpp index 7d71552a8..0487f1436 100644 --- a/src/test.cpp +++ b/src/test.cpp @@ -61,6 +61,38 @@ struct TestUtilities assert(is_yes("FAlse") == false); } }; + +struct TestSettings +{ + void Run() + { + Settings s; + // Test reading of settings + s.parseConfigLine("leet = 1337"); + s.parseConfigLine("leetleet = 13371337"); + s.parseConfigLine("leetleet_neg = -13371337"); + s.parseConfigLine("floaty_thing = 1.1"); + s.parseConfigLine("stringy_thing = asd /( ¤%&(/\" BLÖÄRP"); + s.parseConfigLine("coord = (1, 2, 4.5)"); + assert(s.getS32("leet") == 1337); + assert(s.getS16("leetleet") == 32767); + assert(s.getS16("leetleet_neg") == -32768); + // Not sure if 1.1 is an exact value as a float, but doesn't matter + assert(fabs(s.getFloat("floaty_thing") - 1.1) < 0.001); + assert(s.get("stringy_thing") == "asd /( ¤%&(/\" BLÖÄRP"); + assert(fabs(s.getV3F("coord").X - 1.0) < 0.001); + assert(fabs(s.getV3F("coord").Y - 2.0) < 0.001); + assert(fabs(s.getV3F("coord").Z - 4.5) < 0.001); + // Test the setting of settings too + s.setFloat("floaty_thing_2", 1.2); + s.setV3F("coord2", v3f(1, 2, 3.3)); + assert(s.get("floaty_thing_2").substr(0,3) == "1.2"); + assert(fabs(s.getFloat("floaty_thing_2") - 1.2) < 0.001); + assert(fabs(s.getV3F("coord2").X - 1.0) < 0.001); + assert(fabs(s.getV3F("coord2").Y - 2.0) < 0.001); + assert(fabs(s.getV3F("coord2").Z - 3.3) < 0.001); + } +}; struct TestCompress { @@ -1033,6 +1065,7 @@ void run_tests() DSTACK(__FUNCTION_NAME); dstream<<"run_tests() started"<<std::endl; TEST(TestUtilities); + TEST(TestSettings); TEST(TestCompress); TEST(TestMapNode); TEST(TestVoxelManipulator); |