6 #include "util/thread.h"
8 #define BLOCK_EMERGE_ALLOWGEN (1<<0)
14 class BiomeDefManager;
16 class ManualMapVoxelManipulator;
20 struct BlockMakeData {
22 ManualMapVoxelManipulator *vmanip;
26 v3s16 blockpos_requested;
27 UniqueQueue<v3s16> transforming_liquid;
28 INodeDefManager *nodedef;
37 ~BlockMakeData() { delete vmanip; }
40 struct BlockEmergeData {
47 std::map<std::string, MapgenFactory *> mglist;
49 std::vector<Mapgen *> mapgen;
50 std::vector<EmergeThread *> emergethread;
58 //block emerge queue data structures
60 std::map<v3s16, BlockEmergeData *> blocks_enqueued;
61 std::map<u16, u16> peer_queue_count;
64 BiomeDefManager *biomedef;
66 EmergeManager(IGameDef *gamedef, BiomeDefManager *bdef);
69 void initMapgens(MapgenParams *mgparams);
70 Mapgen *createMapgen(std::string mgname, int mgid,
71 MapgenParams *mgparams);
72 MapgenParams *createMapgenParams(std::string mgname);
73 bool enqueueBlockEmerge(u16 peer_id, v3s16 p, bool allow_generate);
75 bool registerMapgen(std::string name, MapgenFactory *mgfactory);
76 MapgenParams *getParamsFromSettings(Settings *settings);
77 void setParamsToSettings(Settings *settings);
79 //mapgen helper methods
80 Biome *getBiomeAtPoint(v3s16 p);
81 int getGroundLevelAtPoint(v2s16 p);
82 bool isBlockUnderground(v3s16 blockpos);
83 u32 getBlockSeed(v3s16 p);
86 class EmergeThread : public SimpleThread
90 EmergeManager *emerge;
92 bool enable_mapgen_debug_info;
97 std::queue<v3s16> blockqueue;
99 EmergeThread(Server *server, int ethreadid):
107 enable_mapgen_debug_info = g_settings->getBool("enable_mapgen_debug_info");
115 if(IsRunning() == false)
121 bool popBlockEmerge(v3s16 *pos, u8 *flags);
122 bool getBlockOrStartGen(v3s16 p, MapBlock **b,
123 BlockMakeData *data, bool allow_generate);