]> git.lizzy.rs Git - dragonfireclient.git/blobdiff - src/emerge.cpp
Speedup attachement handling by replacing vector search by direct array access and...
[dragonfireclient.git] / src / emerge.cpp
index 2c46b0e141cfb5164f608f3b0e9ae5fe9aee79cd..443d70384819de64b90a4f0ef45bea81bd298e7e 100644 (file)
@@ -113,19 +113,18 @@ EmergeManager::EmergeManager(IGameDef *gamedef) {
        if (!g_settings->getU16NoEx("emergequeue_limit_generate", qlimit_generate))
                qlimit_generate = nthreads + 1;
 
+       // don't trust user input for something very important like this
+       if (qlimit_total < 1)
+               qlimit_total = 1;
+       if (qlimit_diskonly < 1)
+               qlimit_diskonly = 1;
+       if (qlimit_generate < 1)
+               qlimit_generate = 1;
+
        for (int i = 0; i != nthreads; i++)
                emergethread.push_back(new EmergeThread((Server *)gamedef, i));
 
        infostream << "EmergeManager: using " << nthreads << " threads" << std::endl;
-
-       loadParamsFromSettings(g_settings);
-
-       if (g_settings->get("fixed_map_seed").empty()) {
-               params.seed = (((u64)(myrand() & 0xffff) << 0)
-                                        | ((u64)(myrand() & 0xffff) << 16)
-                                        | ((u64)(myrand() & 0xffff) << 32)
-                                        | ((u64)(myrand() & 0xffff) << 48));
-       }
 }
 
 
@@ -160,6 +159,18 @@ EmergeManager::~EmergeManager() {
 }
 
 
+void EmergeManager::loadMapgenParams() {
+       loadParamsFromSettings(g_settings);
+
+       if (g_settings->get("fixed_map_seed").empty()) {
+               params.seed = (((u64)(myrand() & 0xffff) << 0)
+                                        | ((u64)(myrand() & 0xffff) << 16)
+                                        | ((u64)(myrand() & 0xffff) << 32)
+                                        | ((u64)(myrand() & 0xffff) << 48));
+       }
+}
+
+
 void EmergeManager::initMapgens() {
        if (mapgen.size())
                return;
@@ -364,7 +375,6 @@ void EmergeManager::loadParamsFromSettings(Settings *settings) {
        params.sparams = createMapgenParams(params.mg_name);
        if (params.sparams)
                params.sparams->readParams(settings);
-
 }
 
 
@@ -373,7 +383,7 @@ void EmergeManager::saveParamsToSettings(Settings *settings) {
        settings->setU64("seed",         params.seed);
        settings->setS16("water_level",  params.water_level);
        settings->setS16("chunksize",    params.chunksize);
-       settings->setFlagStr("mg_flags", params.flags, flagdesc_mapgen);
+       settings->setFlagStr("mg_flags", params.flags, flagdesc_mapgen, (u32)-1);
 
        if (params.sparams)
                params.sparams->writeParams(settings);
@@ -455,13 +465,15 @@ void *EmergeThread::Thread() {
 
        v3s16 last_tried_pos(-32768,-32768,-32768); // For error output
        v3s16 p;
-       u8 flags;
+       u8 flags = 0;
 
        map    = (ServerMap *)&(m_server->m_env->getMap());
        emerge = m_server->m_emerge;
        mapgen = emerge->mapgen[id];
        enable_mapgen_debug_info = emerge->mapgen_debug_info;
 
+       porting::setThreadName("EmergeThread");
+
        while (!StopRequested())
        try {
                if (!popBlockEmerge(&p, &flags)) {