Luanti 5.11.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 EmergeThread;
24class NodeDefManager;
25class Settings;
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 bool isRunning();
169
171 session_t peer_id,
172 v3s16 blockpos,
173 bool allow_generate,
174 bool ignore_queue_limits=false);
175
177 v3s16 blockpos,
178 session_t peer_id,
179 u16 flags,
181 void *callback_param);
182
183 size_t getQueueSize();
184 bool isBlockInQueue(v3s16 pos);
185
187
188 // Mapgen helpers methods
190 bool isBlockUnderground(v3s16 blockpos);
191
192 static v3s16 getContainingChunk(v3s16 blockpos, s16 chunksize);
193
194private:
195 std::vector<Mapgen *> m_mapgens;
196 std::vector<EmergeThread *> m_threads;
197 bool m_threads_active = false;
198
199 // The map database
201
202 std::mutex m_queue_mutex;
203 std::map<v3s16, BlockEmergeData> m_blocks_enqueued;
204 std::unordered_map<u16, u32> m_peer_queue_count;
205
209
210 // Emerge metrics
212
213 // Managers of various map generation-related components
214 // Note that each Mapgen gets a copy(!) of these to work with
220
221 // Requires m_queue_mutex held
223
225 v3s16 pos,
226 u16 peer_requested,
227 u16 flags,
229 void *callback_param,
230 bool *entry_already_exists);
231
232 bool popBlockEmergeData(v3s16 pos, BlockEmergeData *bedata);
233
235
236 friend class EmergeThread;
237};
Definition mg_biome.h:86
Definition mg_biome.h:210
Definition mg_decoration.h:112
Definition emerge.h:116
bool enable_mapgen_debug_info
Definition emerge.h:124
OreManager * oremgr
Definition emerge.h:217
BiomeGen * biomegen
Definition emerge.h:215
MapSettingsManager * map_settings_mgr
Definition emerge.h:140
std::vector< Mapgen * > m_mapgens
Definition emerge.h:195
u32 gen_notify_on
Definition emerge.h:127
~EmergeManager()
Definition emerge.cpp:120
void stopThreads()
Definition emerge.cpp:233
const BiomeManager * getBiomeManager() const
Definition emerge.h:150
const OreManager * getOreManager() const
Definition emerge.h:151
void reportCompletedEmerge(EmergeAction action)
Definition emerge.cpp:443
OreManager * getWritableOreManager()
Definition emerge.cpp:153
bool isBlockUnderground(v3s16 blockpos)
Definition emerge.cpp:346
u32 m_qlimit_generate
Definition emerge.h:208
void startThreads()
Definition emerge.cpp:221
bool isBlockInQueue(v3s16 pos)
Definition emerge.cpp:310
EmergeManager(Server *server, MetricsBackend *mb)
Definition emerge.cpp:63
bool enqueueBlockEmergeEx(v3s16 blockpos, session_t peer_id, u16 flags, EmergeCompletionCallback callback, void *callback_param)
Definition emerge.cpp:274
MapDatabaseAccessor * m_db
Definition emerge.h:200
const NodeDefManager * ndef
Definition emerge.h:123
bool isRunning()
Definition emerge.cpp:252
BiomeManager * getWritableBiomeManager()
Definition emerge.cpp:146
u32 m_qlimit_diskonly
Definition emerge.h:207
std::set< u32 > gen_notify_on_deco_ids
Definition emerge.h:128
Mapgen * getCurrentMapgen()
Definition emerge.cpp:206
std::set< std::string > gen_notify_on_custom
Definition emerge.h:129
void initMapgens(MapgenParams *mgparams)
Definition emerge.cpp:187
SchematicManager * schemmgr
Definition emerge.h:219
BiomeManager * biomemgr
Definition emerge.h:216
EmergeThread * getOptimalThread()
Definition emerge.cpp:423
static v3s16 getContainingChunk(v3s16 blockpos, s16 chunksize)
Definition emerge.cpp:323
bool pushBlockEmergeData(v3s16 pos, u16 peer_requested, u16 flags, EmergeCompletionCallback callback, void *callback_param, bool *entry_already_exists)
Definition emerge.cpp:352
std::mutex m_queue_mutex
Definition emerge.h:202
u32 m_qlimit_total
Definition emerge.h:206
bool m_threads_active
Definition emerge.h:197
void initMap(MapDatabaseAccessor *holder)
Definition emerge.cpp:174
DISABLE_CLASS_COPY(EmergeManager)
SchematicManager * getWritableSchematicManager()
Definition emerge.cpp:167
std::vector< EmergeThread * > m_threads
Definition emerge.h:196
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:258
void resetMap()
resets the reference
Definition emerge.cpp:181
std::map< v3s16, BlockEmergeData > m_blocks_enqueued
Definition emerge.h:203
std::unordered_map< u16, u32 > m_peer_queue_count
Definition emerge.h:204
bool popBlockEmergeData(v3s16 pos, BlockEmergeData *bedata)
Definition emerge.cpp:400
const BiomeGen * getBiomeGen() const
Definition emerge.h:147
MetricCounterPtr m_completed_emerge_counter[5]
Definition emerge.h:211
DecorationManager * decomgr
Definition emerge.h:218
size_t getQueueSize()
Definition emerge.cpp:304
int getSpawnLevelAtPoint(v2s16 p)
Definition emerge.cpp:333
DecorationManager * getWritableDecorationManager()
Definition emerge.cpp:160
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:33
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:68
Definition map.h:302
Definition map_settings_manager.h:30
Definition mapgen.h:153
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:530
Definition mg_ore.h:148
Definition mg_schematic.h:117
Definition server.h:167
Definition settings.h:109
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:22
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:24
Definition mapgen.h:114
static std::string p(std::string path)
Definition test_filesys.cpp:55