#include "mapgen_math.h"
-class EmergeThread : public SimpleThread
+class EmergeThread : public JThread
{
public:
Server *m_server;
std::queue<v3s16> blockqueue;
EmergeThread(Server *server, int ethreadid):
- SimpleThread(),
+ JThread(),
m_server(server),
map(NULL),
emerge(NULL),
mapgen(NULL),
+ enable_mapgen_debug_info(false),
id(ethreadid)
{
}
void *Thread();
-
- void trigger()
- {
- setRun(true);
- if(IsRunning() == false)
- {
- Start();
- }
- }
-
bool popBlockEmerge(v3s16 *pos, u8 *flags);
bool getBlockOrStartGen(v3s16 p, MapBlock **b,
BlockMakeData *data, bool allow_generate);
EmergeManager::EmergeManager(IGameDef *gamedef) {
//register built-in mapgens
- registerMapgen("v6", new MapgenFactoryV6());
- registerMapgen("v7", new MapgenFactoryV7());
- registerMapgen("indev", new MapgenFactoryIndev());
+ registerMapgen("v6", new MapgenFactoryV6());
+ registerMapgen("v7", new MapgenFactoryV7());
+ registerMapgen("indev", new MapgenFactoryIndev());
registerMapgen("singlenode", new MapgenFactorySinglenode());
- registerMapgen("math", new MapgenFactoryMath());
+ registerMapgen("math", new MapgenFactoryMath());
this->ndef = gamedef->getNodeDefManager();
this->biomedef = new BiomeDefManager();
this->luaoverride_params_modified = 0;
this->luaoverride_flagmask = 0;
- mapgen_debug_info = g_settings->getBool("enable_mapgen_debug_info");
+ this->gennotify = 0;
+ mapgen_debug_info = g_settings->getBool("enable_mapgen_debug_info");
int nthreads;
if (g_settings->get("num_emerge_threads").empty()) {
EmergeManager::~EmergeManager() {
for (unsigned int i = 0; i != emergethread.size(); i++) {
- emergethread[i]->setRun(false);
+ emergethread[i]->Stop();
emergethread[i]->qevent.signal();
- emergethread[i]->stop();
+ emergethread[i]->Wait();
delete emergethread[i];
delete mapgen[i];
}
}
-void EmergeManager::triggerAllThreads() {
+void EmergeManager::startAllThreads() {
for (unsigned int i = 0; i != emergethread.size(); i++)
- emergethread[i]->trigger();
+ emergethread[i]->Start();
}
mapgen = emerge->mapgen[id];
enable_mapgen_debug_info = emerge->mapgen_debug_info;
- while (getRun())
+ while (!StopRequested())
try {
if (!popBlockEmerge(&p, &flags)) {
qevent.wait();
MapEditEventAreaIgnorer
ign(&m_server->m_ignore_map_edit_events_area,
VoxelArea(minp, maxp));
- { // takes about 90ms with -O1 on an e3-1230v2
+ try { // takes about 90ms with -O1 on an e3-1230v2
m_server->getScriptIface()->environment_OnGenerated(
minp, maxp, emerge->getBlockSeed(minp));
+ } catch(LuaError &e) {
+ m_server->setAsyncFatalError(e.what());
}
EMERGE_DBG_OUT("ended up with: " << analyze_block(block));