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)); } }
EmergeManager::EmergeManager(IGameDef *gamedef) { //register built-in mapgens registerMapgen("v6", new MapgenFactoryV6()); registerMapgen("v7", new MapgenFactoryV7()); registerMapgen("indev", new MapgenFactoryIndev()); registerMapgen("singlenode", new MapgenFactorySinglenode()); registerMapgen("math", new MapgenFactoryMath()); this->ndef = gamedef->getNodeDefManager(); this->biomedef = new BiomeDefManager(); this->gennotify = 0; // Note that accesses to this variable are not synchronized. // This is because the *only* thread ever starting or stopping // EmergeThreads should be the ServerThread. this->threads_active = false; mapgen_debug_info = g_settings->getBool("enable_mapgen_debug_info"); // if unspecified, leave a proc for the main thread and one for // some other misc thread int nthreads = 0; if (!g_settings->getS16NoEx("num_emerge_threads", nthreads)) nthreads = porting::getNumberOfProcessors() - 2; if (nthreads < 1) nthreads = 1; qlimit_total = g_settings->getU16("emergequeue_limit_total"); if (!g_settings->getU16NoEx("emergequeue_limit_diskonly", qlimit_diskonly)) qlimit_diskonly = nthreads * 5 + 1; 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)); } }