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)); } }
EmergeManager::EmergeManager(IGameDef *gamedef) { //register built-in mapgens registerMapgen("v5", new MapgenFactoryV5()); registerMapgen("v6", new MapgenFactoryV6()); registerMapgen("v7", new MapgenFactoryV7()); registerMapgen("singlenode", new MapgenFactorySinglenode()); this->ndef = gamedef->getNodeDefManager(); this->biomemgr = new BiomeManager(gamedef); this->oremgr = new OreManager(gamedef); this->decomgr = new DecorationManager(gamedef); this->schemmgr = new SchematicManager(gamedef); this->gen_notify_on = 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 s16 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 (s16 i = 0; i < nthreads; i++) emergethread.push_back(new EmergeThread((Server *) gamedef, i)); infostream << "EmergeManager: using " << nthreads << " threads" << std::endl; }
EmergeManager::EmergeManager(IGameDef *gamedef, BiomeDefManager *bdef) { //register built-in mapgens registerMapgen("v6", new MapgenFactoryV6()); this->biomedef = bdef ? bdef : new BiomeDefManager(gamedef); this->params = NULL; mapgen_debug_info = g_settings->getBool("enable_mapgen_debug_info"); queuemutex.Init(); int nthreads; if (g_settings->get("num_emerge_threads").empty()) { int nprocs = porting::getNumberOfProcessors(); // leave a proc for the main thread and one for some other misc threads nthreads = (nprocs > 2) ? nprocs - 2 : 1; } else { nthreads = g_settings->getU16("num_emerge_threads"); } if (nthreads < 1) nthreads = 1; qlimit_total = g_settings->getU16("emergequeue_limit_total"); qlimit_diskonly = g_settings->get("emergequeue_limit_diskonly").empty() ? nthreads * 5 + 1 : g_settings->getU16("emergequeue_limit_diskonly"); qlimit_generate = g_settings->get("emergequeue_limit_generate").empty() ? nthreads + 1 : g_settings->getU16("emergequeue_limit_generate"); for (int i = 0; i != nthreads; i++) emergethread.push_back(new EmergeThread((Server *)gamedef, i)); infostream << "EmergeManager: using " << nthreads << " threads" << std::endl; }
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->params = NULL; this->luaoverride_params = NULL; this->luaoverride_params_modified = 0; this->luaoverride_flagmask = 0; this->gennotify = 0; mapgen_debug_info = g_settings->getBool("enable_mapgen_debug_info"); int nthreads; if (g_settings->get("num_emerge_threads").empty()) { int nprocs = porting::getNumberOfProcessors(); // leave a proc for the main thread and one for some other misc threads nthreads = (nprocs > 2) ? nprocs - 2 : 1; } else { nthreads = g_settings->getU16("num_emerge_threads"); } if (nthreads < 1) nthreads = 1; qlimit_total = g_settings->getU16("emergequeue_limit_total"); qlimit_diskonly = g_settings->get("emergequeue_limit_diskonly").empty() ? nthreads * 5 + 1 : g_settings->getU16("emergequeue_limit_diskonly"); qlimit_generate = g_settings->get("emergequeue_limit_generate").empty() ? nthreads + 1 : g_settings->getU16("emergequeue_limit_generate"); for (int i = 0; i != nthreads; i++) emergethread.push_back(new EmergeThread((Server *)gamedef, i)); infostream << "EmergeManager: using " << nthreads << " threads" << std::endl; }