]> git.lizzy.rs Git - minetest.git/blobdiff - src/map.cpp
Fix EmergeThread hang on exit
[minetest.git] / src / map.cpp
index 6a058bb51f0237d7886f2c2e0de6e6727e4ed096..7eb45463f7a2ab1e035c21906d1aadfbac7d415f 100644 (file)
@@ -1,6 +1,6 @@
 /*
-Minetest-c55
-Copyright (C) 2010-2011 celeron55, Perttu Ahola <celeron55@gmail.com>
+Minetest
+Copyright (C) 2010-2013 celeron55, Perttu Ahola <celeron55@gmail.com>
 
 This program is free software; you can redistribute it and/or modify
 it under the terms of the GNU Lesser General Public License as published by
@@ -33,6 +33,8 @@ with this program; if not, write to the Free Software Foundation, Inc.,
 #include "gamedef.h"
 #include "util/directiontables.h"
 #include "rollback_interface.h"
+#include "emerge.h"
+#include "mapgen_v6.h"
 
 #define PP(x) "("<<(x).X<<","<<(x).Y<<","<<(x).Z<<")"
 
@@ -1993,10 +1995,9 @@ void Map::removeNodeTimer(v3s16 p)
 /*
        ServerMap
 */
-ServerMap::ServerMap(std::string savedir, IGameDef *gamedef):
+ServerMap::ServerMap(std::string savedir, IGameDef *gamedef, EmergeManager *emerge):
        Map(dout_server, gamedef),
        m_seed(0),
-       m_emerge(NULL),
        m_map_metadata_changed(true),
        m_database(NULL),
        m_database_read(NULL),
@@ -2004,9 +2005,8 @@ ServerMap::ServerMap(std::string savedir, IGameDef *gamedef):
 {
        verbosestream<<__FUNCTION_NAME<<std::endl;
 
-       //m_chunksize = 8; // Takes a few seconds
-
-       m_mgparams = MapgenParams::getParamsFromSettings(g_settings);
+       m_emerge = emerge;
+       m_mgparams = m_emerge->getParamsFromSettings(g_settings);
        if (!m_mgparams)
                m_mgparams = new MapgenV6Params();
                
@@ -2014,10 +2014,10 @@ ServerMap::ServerMap(std::string savedir, IGameDef *gamedef):
 
        if (g_settings->get("fixed_map_seed").empty())
        {
-               m_seed = (((u64)(myrand()%0xffff)<<0)
-                               + ((u64)(myrand()%0xffff)<<16)
-                               + ((u64)(myrand()%0xffff)<<32)
-                               + ((u64)(myrand()&0xffff)<<48));
+               m_seed = (((u64)(myrand() & 0xffff) << 0)
+                               | ((u64)(myrand() & 0xffff) << 16)
+                               | ((u64)(myrand() & 0xffff) << 32)
+                               | ((u64)(myrand() & 0xffff) << 48));
                m_mgparams->seed = m_seed;
        }
 
@@ -3079,34 +3079,7 @@ void ServerMap::saveMapMeta()
 
        Settings params;
 
-       params.set("mg_name", m_emerge->params->mg_name);
-
-       params.setU64("seed", m_emerge->params->seed);
-       params.setS16("water_level", m_emerge->params->water_level);
-       params.setS16("chunksize", m_emerge->params->chunksize);
-       params.setS32("mg_flags", m_emerge->params->flags);
-/*     switch (m_emerge->params->mg_version) {
-               case 6:
-               {*/
-                       MapgenV6Params *v6params = (MapgenV6Params *)m_emerge->params;
-
-                       params.setFloat("mgv6_freq_desert", v6params->freq_desert);
-                       params.setFloat("mgv6_freq_beach", v6params->freq_beach);
-                       params.setNoiseParams("mgv6_np_terrain_base",   v6params->np_terrain_base);
-                       params.setNoiseParams("mgv6_np_terrain_higher", v6params->np_terrain_higher);
-                       params.setNoiseParams("mgv6_np_steepness",      v6params->np_steepness);
-                       params.setNoiseParams("mgv6_np_height_select",  v6params->np_height_select);
-                       params.setNoiseParams("mgv6_np_trees",          v6params->np_trees);
-                       params.setNoiseParams("mgv6_np_mud",            v6params->np_mud);
-                       params.setNoiseParams("mgv6_np_beach",          v6params->np_beach);
-                       params.setNoiseParams("mgv6_np_biome",          v6params->np_biome);
-                       params.setNoiseParams("mgv6_np_cave",           v6params->np_cave);
-               /*      break;
-               }
-               default:
-                       ; //complain here
-       }*/
-
+       m_emerge->setParamsToSettings(&params);
        params.writeLines(os);
 
        os<<"[end_of_params]\n";
@@ -3145,7 +3118,7 @@ void ServerMap::loadMapMeta()
                params.parseConfigLine(line);
        }
 
-       MapgenParams *mgparams = MapgenParams::getParamsFromSettings(&params);
+       MapgenParams *mgparams = m_emerge->getParamsFromSettings(&params);
        if (mgparams) {
                if (m_mgparams)
                        delete m_mgparams;