X-Git-Url: https://git.lizzy.rs/?a=blobdiff_plain;f=src%2Femerge.cpp;h=ffe387f636c6d42b37e0e301a3929b129548056f;hb=f4fedfed070ffd85c3446bc5d38d2fbd577640d6;hp=d24971e44a099490dfaeca4938d7c618e0c3343d;hpb=2818d3f2244d2146a5cdb61cd41f6561c514f97c;p=dragonfireclient.git diff --git a/src/emerge.cpp b/src/emerge.cpp index d24971e44..ffe387f63 100644 --- a/src/emerge.cpp +++ b/src/emerge.cpp @@ -34,10 +34,10 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "log.h" #include "map.h" #include "mapblock.h" -#include "mg_biome.h" -#include "mg_ore.h" -#include "mg_decoration.h" -#include "mg_schematic.h" +#include "mapgen/mg_biome.h" +#include "mapgen/mg_ore.h" +#include "mapgen/mg_decoration.h" +#include "mapgen/mg_schematic.h" #include "nodedef.h" #include "profiler.h" #include "scripting_server.h" @@ -52,18 +52,18 @@ class EmergeThread : public Thread { int id; EmergeThread(Server *server, int ethreadid); - ~EmergeThread(); + ~EmergeThread() = default; void *run(); void signal(); // Requires queue mutex held - bool pushBlock(v3s16 pos); + bool pushBlock(const v3s16 &pos); void cancelPendingItems(); static void runCompletionCallbacks( - v3s16 pos, EmergeAction action, + const v3s16 &pos, EmergeAction action, const EmergeCallbackList &callbacks); private: @@ -78,13 +78,38 @@ class EmergeThread : public Thread { bool popBlockEmerge(v3s16 *pos, BlockEmergeData *bedata); EmergeAction getBlockOrStartGen( - v3s16 pos, bool allow_gen, MapBlock **block, BlockMakeData *data); + const v3s16 &pos, bool allow_gen, MapBlock **block, BlockMakeData *data); MapBlock *finishGen(v3s16 pos, BlockMakeData *bmdata, std::map *modified_blocks); friend class EmergeManager; }; +class MapEditEventAreaIgnorer +{ +public: + MapEditEventAreaIgnorer(VoxelArea *ignorevariable, const VoxelArea &a): + m_ignorevariable(ignorevariable) + { + if(m_ignorevariable->getVolume() == 0) + *m_ignorevariable = a; + else + m_ignorevariable = NULL; + } + + ~MapEditEventAreaIgnorer() + { + if(m_ignorevariable) + { + assert(m_ignorevariable->getVolume() != 0); + *m_ignorevariable = VoxelArea(); + } + } + +private: + VoxelArea *m_ignorevariable; +}; + //// //// EmergeManager //// @@ -96,12 +121,10 @@ EmergeManager::EmergeManager(Server *server) this->oremgr = new OreManager(server); this->decomgr = new DecorationManager(server); this->schemmgr = new SchematicManager(server); - 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->m_threads_active = false; enable_mapgen_debug_info = g_settings->getBool("enable_mapgen_debug_info"); @@ -158,7 +181,7 @@ EmergeManager::~EmergeManager() bool EmergeManager::initMapgens(MapgenParams *params) { - if (m_mapgens.size()) + if (!m_mapgens.empty()) return false; this->mgparams = params; @@ -224,7 +247,7 @@ bool EmergeManager::isRunning() bool EmergeManager::enqueueBlockEmerge( - u16 peer_id, + session_t peer_id, v3s16 blockpos, bool allow_generate, bool ignore_queue_limits) @@ -241,7 +264,7 @@ bool EmergeManager::enqueueBlockEmerge( bool EmergeManager::enqueueBlockEmergeEx( v3s16 blockpos, - u16 peer_id, + session_t peer_id, u16 flags, EmergeCompletionCallback callback, void *callback_param) @@ -293,7 +316,7 @@ v3s16 EmergeManager::getContainingChunk(v3s16 blockpos, s16 chunksize) int EmergeManager::getSpawnLevelAtPoint(v2s16 p) { - if (m_mapgens.size() == 0 || !m_mapgens[0]) { + if (m_mapgens.empty() || !m_mapgens[0]) { errorstream << "EmergeManager: getSpawnLevelAtPoint() called" " before mapgen init" << std::endl; return 0; @@ -305,7 +328,7 @@ int EmergeManager::getSpawnLevelAtPoint(v2s16 p) int EmergeManager::getGroundLevelAtPoint(v2s16 p) { - if (m_mapgens.size() == 0 || !m_mapgens[0]) { + if (m_mapgens.empty() || !m_mapgens[0]) { errorstream << "EmergeManager: getGroundLevelAtPoint() called" " before mapgen init" << std::endl; return 0; @@ -357,7 +380,7 @@ bool EmergeManager::pushBlockEmergeData( *entry_already_exists = !findres.second; if (callback) - bedata.callbacks.push_back(std::make_pair(callback, callback_param)); + bedata.callbacks.emplace_back(callback, callback_param); if (*entry_already_exists) { bedata.flags |= flags; @@ -375,7 +398,7 @@ bool EmergeManager::pushBlockEmergeData( bool EmergeManager::popBlockEmergeData(v3s16 pos, BlockEmergeData *bedata) { std::map::iterator it; - UNORDERED_MAP::iterator it2; + std::unordered_map::iterator it2; it = m_blocks_enqueued.find(pos); if (it == m_blocks_enqueued.end()) @@ -434,19 +457,13 @@ EmergeThread::EmergeThread(Server *server, int ethreadid) : } -EmergeThread::~EmergeThread() -{ - //cancelPendingItems(); -} - - void EmergeThread::signal() { m_queue_event.signal(); } -bool EmergeThread::pushBlock(v3s16 pos) +bool EmergeThread::pushBlock(const v3s16 &pos) { m_block_queue.push(pos); return true; @@ -471,9 +488,7 @@ void EmergeThread::cancelPendingItems() } -void EmergeThread::runCompletionCallbacks( - v3s16 pos, - EmergeAction action, +void EmergeThread::runCompletionCallbacks(const v3s16 &pos, EmergeAction action, const EmergeCallbackList &callbacks) { for (size_t i = 0; i != callbacks.size(); i++) { @@ -505,7 +520,7 @@ bool EmergeThread::popBlockEmerge(v3s16 *pos, BlockEmergeData *bedata) EmergeAction EmergeThread::getBlockOrStartGen( - v3s16 pos, bool allow_gen, MapBlock **block, BlockMakeData *bmdata) + const v3s16 &pos, bool allow_gen, MapBlock **block, BlockMakeData *bmdata) { MutexAutoLock envlock(m_server->m_env_mutex); @@ -583,7 +598,6 @@ MapBlock *EmergeThread::finishGen(v3s16 pos, BlockMakeData *bmdata, void *EmergeThread::run() { - DSTACK(FUNCTION_NAME); BEGIN_DEBUG_EXCEPTION_HANDLER v3s16 pos; @@ -621,7 +635,7 @@ void *EmergeThread::run() m_mapgen->makeChunk(&bmdata); - if (enable_mapgen_debug_info == false) + if (!enable_mapgen_debug_info) t.stop(true); // Hide output } @@ -633,7 +647,7 @@ void *EmergeThread::run() if (block) modified_blocks[pos] = block; - if (modified_blocks.size() > 0) + if (!modified_blocks.empty()) m_server->SetBlocksNotSent(modified_blocks); } } catch (VersionMismatchException &e) {