6 #include "util/thread.h"
8 #define BLOCK_EMERGE_ALLOWGEN (1<<0)
10 #define EMERGE_DBG_OUT(x) \
11 { if (enable_mapgen_debug_info) \
12 infostream << "EmergeThread: " x << std::endl; }
18 class BiomeDefManager;
20 class ManualMapVoxelManipulator;
24 struct BlockMakeData {
25 ManualMapVoxelManipulator *vmanip;
29 v3s16 blockpos_requested;
30 UniqueQueue<v3s16> transforming_liquid;
31 INodeDefManager *nodedef;
39 ~BlockMakeData() { delete vmanip; }
42 struct BlockEmergeData {
49 std::map<std::string, MapgenFactory *> mglist;
51 std::vector<Mapgen *> mapgen;
52 std::vector<EmergeThread *> emergethread;
56 bool mapgen_debug_info;
61 //block emerge queue data structures
63 std::map<v3s16, BlockEmergeData *> blocks_enqueued;
64 std::map<u16, u16> peer_queue_count;
66 //Mapgen-related structures
67 BiomeDefManager *biomedef;
68 std::vector<Ore *> ores;
70 EmergeManager(IGameDef *gamedef, BiomeDefManager *bdef);
73 void initMapgens(MapgenParams *mgparams);
74 Mapgen *createMapgen(std::string mgname, int mgid,
75 MapgenParams *mgparams);
76 MapgenParams *createMapgenParams(std::string mgname);
77 bool enqueueBlockEmerge(u16 peer_id, v3s16 p, bool allow_generate);
79 void registerMapgen(std::string name, MapgenFactory *mgfactory);
80 MapgenParams *getParamsFromSettings(Settings *settings);
81 void setParamsToSettings(Settings *settings);
83 //mapgen helper methods
84 Biome *getBiomeAtPoint(v3s16 p);
85 int getGroundLevelAtPoint(v2s16 p);
86 bool isBlockUnderground(v3s16 blockpos);
87 u32 getBlockSeed(v3s16 p);
90 class EmergeThread : public SimpleThread
94 EmergeManager *emerge;
96 bool enable_mapgen_debug_info;
101 std::queue<v3s16> blockqueue;
103 EmergeThread(Server *server, int ethreadid):
118 if(IsRunning() == false)
124 bool popBlockEmerge(v3s16 *pos, u8 *flags);
125 bool getBlockOrStartGen(v3s16 p, MapBlock **b,
126 BlockMakeData *data, bool allow_generate);