mapgen: Resolve nodes in ctor rather than makeChunk
[oweals/minetest.git] / src / mapgen_singlenode.cpp
index fd443995c6ef50a0c9040f484260ff82a5266baa..9f2e6c122df9516d53a7a1242b8d9375bb2b580d 100644 (file)
@@ -29,8 +29,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
 
 //////////////////////// Mapgen Singlenode parameter read/write
 
-bool MapgenSinglenodeParams::readParams(Settings *settings) {
-       return true;
+void MapgenSinglenodeParams::readParams(Settings *settings) {
 }
 
 
@@ -39,8 +38,16 @@ void MapgenSinglenodeParams::writeParams(Settings *settings) {
 
 ///////////////////////////////////////////////////////////////////////////////
 
-MapgenSinglenode::MapgenSinglenode(int mapgenid, MapgenSinglenodeParams *params) {
+MapgenSinglenode::MapgenSinglenode(int mapgenid,
+               MapgenParams *params, EmergeManager *emerge)
+{
        flags = params->flags;
+
+       INodeDefManager *ndef = emerge->ndef;
+
+       c_node = ndef->getId("mapgen_singlenode");
+       if (c_node == CONTENT_IGNORE)
+               c_node = CONTENT_AIR;
 }
 
 
@@ -69,10 +76,6 @@ void MapgenSinglenode::makeChunk(BlockMakeData *data) {
        // Area of central chunk
        v3s16 node_min = blockpos_min*MAP_BLOCKSIZE;
        v3s16 node_max = (blockpos_max+v3s16(1,1,1))*MAP_BLOCKSIZE-v3s16(1,1,1);
-
-       content_t c_node = ndef->getId("mapgen_singlenode");
-       if (c_node == CONTENT_IGNORE)
-               c_node = CONTENT_AIR;
        
        MapNode n_node(c_node);
        
@@ -90,7 +93,7 @@ void MapgenSinglenode::makeChunk(BlockMakeData *data) {
        updateLiquid(&data->transforming_liquid, node_min, node_max);
 
        // Calculate lighting
-       if (!(flags & MG_NOLIGHT))
+       if (flags & MG_LIGHT)
                calcLighting(node_min - v3s16(1, 0, 1) * MAP_BLOCKSIZE,
                                         node_max + v3s16(1, 0, 1) * MAP_BLOCKSIZE);