示例#1
0
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));
	}
}
示例#2
0
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;
}
示例#3
0
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;
}
示例#4
0
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;
}