Luanti 5.15.0-dev
 
Loading...
Searching...
No Matches
emerge.h
Go to the documentation of this file.
1// Luanti
2// SPDX-License-Identifier: LGPL-2.1-or-later
3// Copyright (C) 2010-2013 kwolekr, Ryan Kwolek <kwolekr@minetest.net>
4
5#pragma once
6
7#include <map>
8#include <mutex>
10#include "irr_v3d.h"
11#include "util/metricsbackend.h"
12#include "mapgen/mapgen.h" // for MapgenParams
13#include "map.h"
14
15#define BLOCK_EMERGE_ALLOW_GEN (1 << 0)
16#define BLOCK_EMERGE_FORCE_QUEUE (1 << 1)
17
18#define EMERGE_DBG_OUT(x) { \
19 if (enable_mapgen_debug_info) \
20 infostream << "EmergeThread: " x << std::endl; \
21}
22
23class EmergeManager;
24class EmergeThread;
25class NodeDefManager;
27class BiomeManager;
28class OreManager;
31class Server;
32class ModApiMapgen;
34
35// Structure containing inputs/outputs for chunk generation
37 MMVManip *vmanip = nullptr;
38 // Global map seed
39 u64 seed = 0;
43 const NodeDefManager *nodedef = nullptr;
44
45 BlockMakeData() = default;
46
47 ~BlockMakeData() { delete vmanip; }
48};
49
50// Result from processing an item on the emerge queue
58
59constexpr const char *emergeActionStrs[] = {
60 "cancelled",
61 "errored",
62 "from_memory",
63 "from_disk",
64 "generated",
65};
66
67// Callback
69 v3s16 blockpos, EmergeAction action, void *param);
70
71typedef std::vector<
72 std::pair<
74 void *
75 >
77
83
115
117 /* The mod API needs unchecked access to allow:
118 * - using decomgr or oremgr to place decos/ores
119 * - using schemmgr to load and place schematics
120 */
121 friend class ModApiMapgen;
122public:
125
126 // Generation Notify
129 std::set<std::string> gen_notify_on_custom;
130
131 // Parameters passed to mapgens owned by ServerMap
132 // TODO(hmmmm): Remove this after mapgen helper methods using them
133 // are moved to ServerMap
135
136 // Hackish workaround:
137 // For now, EmergeManager must hold onto a ptr to the Map's setting manager
138 // since the Map can only be accessed through the Environment, and the
139 // Environment is not created until after script initialization.
141
142 // Methods
146
147 const BiomeGen *getBiomeGen() const { return biomegen; }
148
149 // no usage restrictions
150 const BiomeManager *getBiomeManager() const { return biomemgr; }
151 const OreManager *getOreManager() const { return oremgr; }
154 // only usable before mapgen init
159
162 void initMap(MapDatabaseAccessor *holder);
164 void resetMap();
165
166 void startThreads();
167 void stopThreads();
168
170 session_t peer_id,
171 v3s16 blockpos,
172 bool allow_generate,
173 bool ignore_queue_limits=false);
174
176 v3s16 blockpos,
177 session_t peer_id,
178 u16 flags,
180 void *callback_param);
181
182 size_t getQueueSize();
183 bool isBlockInQueue(v3s16 pos);
184
186
187 // Mapgen helpers methods
189 bool isBlockUnderground(v3s16 blockpos);
190
192 static v3s16 getContainingChunk(v3s16 blockpos, v3s16 chunksize);
193
194private:
195 void initThreads(bool should_multithread);
196
197 std::vector<Mapgen *> m_mapgens;
198 std::vector<EmergeThread *> m_threads;
199 bool m_threads_active = false;
200
201 // Server reference
202 Server *m_server = nullptr;
203 // The map database
205
206 std::mutex m_queue_mutex;
207 std::map<v3s16, BlockEmergeData> m_blocks_enqueued;
208 std::unordered_map<u16, u32> m_peer_queue_count;
209
213
214 // Emerge metrics
216
217 // Managers of various map generation-related components
218 // Note that each Mapgen gets a copy(!) of these to work with
224
225 // Requires m_queue_mutex held
227
229 v3s16 pos,
230 u16 peer_requested,
231 u16 flags,
233 void *callback_param,
234 bool *entry_already_exists);
235
236 bool popBlockEmergeData(v3s16 pos, BlockEmergeData *bedata);
237
239
240 friend class EmergeThread;
241};
Definition mg_biome.h:88
Definition mg_biome.h:212
Definition mg_decoration.h:112
Definition emerge.h:116
Server * m_server
Definition emerge.h:202
bool enable_mapgen_debug_info
Definition emerge.h:124
OreManager * oremgr
Definition emerge.h:221
BiomeGen * biomegen
Definition emerge.h:219
MapSettingsManager * map_settings_mgr
Definition emerge.h:140
void initThreads(bool should_multithread)
Definition emerge.cpp:200
std::vector< Mapgen * > m_mapgens
Definition emerge.h:197
u32 gen_notify_on
Definition emerge.h:127
~EmergeManager()
Definition emerge.cpp:103
static v3s16 getContainingChunk(v3s16 blockpos, v3s16 chunksize)
Definition emerge.cpp:339
void stopThreads()
Definition emerge.cpp:256
const BiomeManager * getBiomeManager() const
Definition emerge.h:150
const OreManager * getOreManager() const
Definition emerge.h:151
void reportCompletedEmerge(EmergeAction action)
Definition emerge.cpp:457
OreManager * getWritableOreManager()
Definition emerge.cpp:136
bool isBlockUnderground(v3s16 blockpos)
Definition emerge.cpp:361
u32 m_qlimit_generate
Definition emerge.h:212
void startThreads()
Definition emerge.cpp:244
bool isBlockInQueue(v3s16 pos)
Definition emerge.cpp:327
EmergeManager(Server *server, MetricsBackend *mb)
Definition emerge.cpp:61
bool enqueueBlockEmergeEx(v3s16 blockpos, session_t peer_id, u16 flags, EmergeCompletionCallback callback, void *callback_param)
Definition emerge.cpp:291
MapDatabaseAccessor * m_db
Definition emerge.h:204
const NodeDefManager * ndef
Definition emerge.h:123
BiomeManager * getWritableBiomeManager()
Definition emerge.cpp:129
u32 m_qlimit_diskonly
Definition emerge.h:211
std::set< u32 > gen_notify_on_deco_ids
Definition emerge.h:128
Mapgen * getCurrentMapgen()
Definition emerge.cpp:229
std::set< std::string > gen_notify_on_custom
Definition emerge.h:129
void initMapgens(MapgenParams *mgparams)
Definition emerge.cpp:170
SchematicManager * schemmgr
Definition emerge.h:223
BiomeManager * biomemgr
Definition emerge.h:220
EmergeThread * getOptimalThread()
Definition emerge.cpp:437
bool pushBlockEmergeData(v3s16 pos, u16 peer_requested, u16 flags, EmergeCompletionCallback callback, void *callback_param, bool *entry_already_exists)
Definition emerge.cpp:367
std::mutex m_queue_mutex
Definition emerge.h:206
u32 m_qlimit_total
Definition emerge.h:210
bool m_threads_active
Definition emerge.h:199
void initMap(MapDatabaseAccessor *holder)
Definition emerge.cpp:157
DISABLE_CLASS_COPY(EmergeManager)
SchematicManager * getWritableSchematicManager()
Definition emerge.cpp:150
std::vector< EmergeThread * > m_threads
Definition emerge.h:198
const DecorationManager * getDecorationManager() const
Definition emerge.h:152
MapgenParams * mgparams
Definition emerge.h:134
const SchematicManager * getSchematicManager() const
Definition emerge.h:153
bool enqueueBlockEmerge(session_t peer_id, v3s16 blockpos, bool allow_generate, bool ignore_queue_limits=false)
Definition emerge.cpp:275
void resetMap()
resets the reference
Definition emerge.cpp:164
std::map< v3s16, BlockEmergeData > m_blocks_enqueued
Definition emerge.h:207
std::unordered_map< u16, u32 > m_peer_queue_count
Definition emerge.h:208
bool popBlockEmergeData(v3s16 pos, BlockEmergeData *bedata)
Definition emerge.cpp:414
const BiomeGen * getBiomeGen() const
Definition emerge.h:147
MetricCounterPtr m_completed_emerge_counter[5]
Definition emerge.h:215
DecorationManager * decomgr
Definition emerge.h:222
size_t getQueueSize()
Definition emerge.cpp:321
int getSpawnLevelAtPoint(v2s16 p)
Definition emerge.cpp:348
DecorationManager * getWritableDecorationManager()
Definition emerge.cpp:143
Definition emerge.h:84
bool enable_mapgen_debug_info
Definition emerge.h:92
GenerateNotifier createNotifier() const
Definition emerge.h:104
const std::set< u32 > * gen_notify_on_deco_ids
Definition emerge.h:95
BiomeGen * biomegen
Definition emerge.h:98
EmergeParams()=delete
~EmergeParams()
Definition emerge.cpp:32
DISABLE_CLASS_COPY(EmergeParams)
u32 gen_notify_on
Definition emerge.h:94
OreManager * oremgr
Definition emerge.h:100
BiomeManager * biomemgr
Definition emerge.h:99
const NodeDefManager * ndef
Definition emerge.h:91
DecorationManager * decomgr
Definition emerge.h:101
const std::set< std::string > * gen_notify_on_custom
Definition emerge.h:96
SchematicManager * schemmgr
Definition emerge.h:102
Definition emerge_internal.h:25
Definition mapgen.h:65
Definition map.h:301
Definition map_settings_manager.h:31
Definition mapgen.h:147
Definition metricsbackend.h:39
Definition l_mapgen.h:18
This class is for getting the actual properties of nodes from their content ID.
Definition nodedef.h:509
Definition mg_ore.h:148
Definition mg_schematic.h:114
Definition server.h:178
Definition container.h:26
std::vector< std::pair< EmergeCompletionCallback, void * > > EmergeCallbackList
Definition emerge.h:76
EmergeAction
Definition emerge.h:51
@ EMERGE_FROM_DISK
Definition emerge.h:55
@ EMERGE_FROM_MEMORY
Definition emerge.h:54
@ EMERGE_GENERATED
Definition emerge.h:56
@ EMERGE_CANCELLED
Definition emerge.h:52
@ EMERGE_ERRORED
Definition emerge.h:53
constexpr const char * emergeActionStrs[]
Definition emerge.h:59
void(* EmergeCompletionCallback)(v3s16 blockpos, EmergeAction action, void *param)
Definition emerge.h:68
core::vector2d< s16 > v2s16
Definition irr_v2d.h:12
core::vector3d< s16 > v3s16
Definition irr_v3d.h:13
std::shared_ptr< MetricCounter > MetricCounterPtr
Definition metricsbackend.h:22
Definition activeobjectmgr.cpp:11
u16 session_t
Definition networkprotocol.h:27
Definition emerge.h:78
u16 flags
Definition emerge.h:80
u16 peer_requested
Definition emerge.h:79
EmergeCallbackList callbacks
Definition emerge.h:81
Definition emerge.h:36
BlockMakeData()=default
~BlockMakeData()
Definition emerge.h:47
v3s16 blockpos_max
Definition emerge.h:41
u64 seed
Definition emerge.h:39
const NodeDefManager * nodedef
Definition emerge.h:43
MMVManip * vmanip
Definition emerge.h:37
UniqueQueue< v3s16 > transforming_liquid
Definition emerge.h:42
v3s16 blockpos_min
Definition emerge.h:40
Definition servermap.h:23
Definition mapgen.h:111
static std::string p(std::string path)
Definition test_filesys.cpp:64