X-Git-Url: https://git.lizzy.rs/?a=blobdiff_plain;f=src%2Femerge.h;h=76653e6cdf84d5da2e2db71a5b6c6bf8d1943b95;hb=9762650f978cc7bae78861b70a051b26cc5e2dc6;hp=b72b2a2c35fee3e148e8e53a3fde5db86d6b5c78;hpb=9f25aba6c2c3a922ebe74c327e275e83fef1f6f6;p=minetest.git diff --git a/src/emerge.h b/src/emerge.h index b72b2a2c3..76653e6cd 100644 --- a/src/emerge.h +++ b/src/emerge.h @@ -42,6 +42,7 @@ class BiomeManager; class OreManager; class DecorationManager; class SchematicManager; +class Server; // Structure containing inputs/outputs for chunk generation struct BlockMakeData { @@ -97,8 +98,16 @@ class EmergeManager { u32 gen_notify_on; std::set gen_notify_on_deco_ids; - // Map generation parameters - MapgenParams params; + // Parameters passed to mapgens owned by ServerMap + // TODO(hmmmm): Remove this after mapgen helper methods using them + // are moved to ServerMap + MapgenParams *mgparams; + + // Hackish workaround: + // For now, EmergeManager must hold onto a ptr to the Map's setting manager + // since the Map can only be accessed through the Environment, and the + // Environment is not created until after script initialization. + MapSettingsManager *map_settings_mgr; // Managers of various map generation-related components BiomeManager *biomemgr; @@ -107,14 +116,14 @@ class EmergeManager { SchematicManager *schemmgr; // Methods - EmergeManager(IGameDef *gamedef); + EmergeManager(Server *server); ~EmergeManager(); - void loadMapgenParams(); - void initMapgens(); + bool initMapgens(MapgenParams *mgparams); void startThreads(); void stopThreads(); + bool isRunning(); bool enqueueBlockEmerge( u16 peer_id, @@ -135,12 +144,10 @@ class EmergeManager { // Mapgen helpers methods Biome *getBiomeAtPoint(v3s16 p); + int getSpawnLevelAtPoint(v2s16 p); int getGroundLevelAtPoint(v2s16 p); bool isBlockUnderground(v3s16 blockpos); - static MapgenFactory *getMapgenFactory(const std::string &mgname); - static void getMapgenNames( - std::vector *mgnames, bool include_hidden); static v3s16 getContainingChunk(v3s16 blockpos, s16 chunksize); private: @@ -150,7 +157,7 @@ class EmergeManager { Mutex m_queue_mutex; std::map m_blocks_enqueued; - std::map m_peer_queue_count; + UNORDERED_MAP m_peer_queue_count; u16 m_qlimit_total; u16 m_qlimit_diskonly; @@ -158,11 +165,20 @@ class EmergeManager { // Requires m_queue_mutex held EmergeThread *getOptimalThread(); - bool pushBlockEmergeData(v3s16 pos, u16 peer_requested, u16 flags, - EmergeCompletionCallback callback, void *callback_param); + + bool pushBlockEmergeData( + v3s16 pos, + u16 peer_requested, + u16 flags, + EmergeCompletionCallback callback, + void *callback_param, + bool *entry_already_exists); + bool popBlockEmergeData(v3s16 pos, BlockEmergeData *bedata); friend class EmergeThread; + + DISABLE_CLASS_COPY(EmergeManager); }; #endif