summaryrefslogtreecommitdiff
path: root/src/emerge.h
diff options
context:
space:
mode:
authorsfan5 <sfan5@live.de>2020-04-10 02:05:20 +0200
committerLoïc Blot <nerzhul@users.noreply.github.com>2020-05-05 19:26:59 +0200
commit3c65d1acec27366d88fc3686d3f820175673e203 (patch)
treef0de47610f7d5d2fe26862226cd63ddee5f5b309 /src/emerge.h
parent2062c80e21b657fed8e68aa48523fa12ad5ef095 (diff)
downloadminetest-3c65d1acec27366d88fc3686d3f820175673e203.tar.gz
minetest-3c65d1acec27366d88fc3686d3f820175673e203.tar.bz2
minetest-3c65d1acec27366d88fc3686d3f820175673e203.zip
Give the Mapgen on each EmergeThread its own Biome/Ore/Deco/SchemManager copy
Diffstat (limited to 'src/emerge.h')
-rw-r--r--src/emerge.h48
1 files changed, 42 insertions, 6 deletions
diff --git a/src/emerge.h b/src/emerge.h
index df849e542..ab9fca2ba 100644
--- a/src/emerge.h
+++ b/src/emerge.h
@@ -86,6 +86,30 @@ struct BlockEmergeData {
EmergeCallbackList callbacks;
};
+class EmergeParams {
+ friend class EmergeManager;
+public:
+ EmergeParams() = delete;
+ ~EmergeParams();
+ DISABLE_CLASS_COPY(EmergeParams);
+
+ const NodeDefManager *ndef; // shared
+ bool enable_mapgen_debug_info;
+
+ u32 gen_notify_on;
+ const std::set<u32> *gen_notify_on_deco_ids; // shared
+
+ BiomeManager *biomemgr;
+ OreManager *oremgr;
+ DecorationManager *decomgr;
+ SchematicManager *schemmgr;
+
+private:
+ EmergeParams(EmergeManager *parent, const BiomeManager *biomemgr,
+ const OreManager *oremgr, const DecorationManager *decomgr,
+ const SchematicManager *schemmgr);
+};
+
class EmergeManager {
public:
const NodeDefManager *ndef;
@@ -106,17 +130,22 @@ public:
// Environment is not created until after script initialization.
MapSettingsManager *map_settings_mgr;
- // Managers of various map generation-related components
- BiomeManager *biomemgr;
- OreManager *oremgr;
- DecorationManager *decomgr;
- SchematicManager *schemmgr;
-
// Methods
EmergeManager(Server *server);
~EmergeManager();
DISABLE_CLASS_COPY(EmergeManager);
+ // no usage restrictions
+ const BiomeManager *getBiomeManager() const { return biomemgr; }
+ const OreManager *getOreManager() const { return oremgr; }
+ const DecorationManager *getDecorationManager() const { return decomgr; }
+ const SchematicManager *getSchematicManager() const { return schemmgr; }
+ // only usable before mapgen init
+ BiomeManager *getWritableBiomeManager();
+ OreManager *getWritableOreManager();
+ DecorationManager *getWritableDecorationManager();
+ SchematicManager *getWritableSchematicManager();
+
void initMapgens(MapgenParams *mgparams);
void startThreads();
@@ -160,6 +189,13 @@ private:
u16 m_qlimit_diskonly;
u16 m_qlimit_generate;
+ // Managers of various map generation-related components
+ // Note that each Mapgen gets a copy(!) of these to work with
+ BiomeManager *biomemgr;
+ OreManager *oremgr;
+ DecorationManager *decomgr;
+ SchematicManager *schemmgr;
+
// Requires m_queue_mutex held
EmergeThread *getOptimalThread();