6 #include "util/thread.h"
8 #define BLOCK_EMERGE_ALLOWGEN (1<<0)
14 class BiomeDefManager;
16 class ManualMapVoxelManipulator;
22 struct BlockMakeData {
24 ManualMapVoxelManipulator *vmanip;
28 v3s16 blockpos_requested;
29 UniqueQueue<v3s16> transforming_liquid;
30 INodeDefManager *nodedef;
50 std::map<std::string, MapgenFactory *> mglist;
56 std::map<v3s16, u8> blocks_enqueued; //change to a hashtable later
58 EmergeThread *emergethread;
61 BiomeDefManager *biomedef;
63 EmergeManager(IGameDef *gamedef, BiomeDefManager *bdef);
66 void initMapgens(MapgenParams *mgparams);
67 Mapgen *createMapgen(std::string mgname, int mgid,
68 MapgenParams *mgparams, EmergeManager *emerge);
69 MapgenParams *createMapgenParams(std::string mgname);
71 bool enqueueBlockEmerge(u16 peer_id, v3s16 p, bool allow_generate);
72 bool popBlockEmerge(v3s16 *pos, u8 *flags);
74 bool registerMapgen(std::string name, MapgenFactory *mgfactory);
75 MapgenParams *getParamsFromSettings(Settings *settings);
76 void setParamsToSettings(Settings *settings);
78 //mapgen helper methods
79 Biome *getBiomeAtPoint(v3s16 p);
80 int getGroundLevelAtPoint(v2s16 p);
81 bool isBlockUnderground(v3s16 blockpos);
82 u32 getBlockSeed(v3s16 p);
85 class EmergeThread : public SimpleThread
89 EmergeManager *emerge;
91 bool enable_mapgen_debug_info;
95 std::queue<v3s16> blockqueue;
97 EmergeThread(Server *server):
104 enable_mapgen_debug_info = g_settings->getBool("enable_mapgen_debug_info");
112 if(IsRunning() == false)
118 bool getBlockOrStartGen(v3s16 p, MapBlock **b,
119 BlockMakeData *data, bool allow_generate);