class DecorationManager;
class SchematicManager;
class Server;
+class ModApiMapgen;
// Structure containing inputs/outputs for chunk generation
struct BlockMakeData {
};
class EmergeManager {
+ /* The mod API needs unchecked access to allow:
+ * - using decomgr or oremgr to place decos/ores
+ * - using schemmgr to load and place schematics
+ */
+ friend class ModApiMapgen;
public:
const NodeDefManager *ndef;
bool enable_mapgen_debug_info;
// For BiomeGen type 'BiomeGenOriginal'
-Biome *BiomeManager::getBiomeFromNoiseOriginal(float heat, float humidity, v3s16 pos) const
+const Biome *BiomeManager::getBiomeFromNoiseOriginal(float heat,
+ float humidity, v3s16 pos) const
{
Biome *biome_closest = nullptr;
Biome *biome_closest_blend = nullptr;
s32 seed;
};
+// WARNING: this class is not thread-safe
class BiomeGen {
public:
virtual ~BiomeGen() = default;
NoiseParams &np_heat_blend, u64 seed) const;
float getHumidityAtPosOriginal(v3s16 pos, NoiseParams &np_humidity,
NoiseParams &np_humidity_blend, u64 seed) const;
- Biome *getBiomeFromNoiseOriginal(float heat, float humidity, v3s16 pos) const;
+ const Biome *getBiomeFromNoiseOriginal(float heat, float humidity,
+ v3s16 pos) const;
private:
BiomeManager() {};
bool Schematic::serializeToMts(std::ostream *os,
- const std::vector<std::string> &names)
+ const std::vector<std::string> &names) const
{
std::ostream &ss = *os;
bool Schematic::serializeToLua(std::ostream *os,
- const std::vector<std::string> &names, bool use_comments, u32 indent_spaces)
+ const std::vector<std::string> &names, bool use_comments,
+ u32 indent_spaces) const
{
std::ostream &ss = *os;
bool getSchematicFromMap(Map *map, v3s16 p1, v3s16 p2);
bool deserializeFromMts(std::istream *is, std::vector<std::string> *names);
- bool serializeToMts(std::ostream *os, const std::vector<std::string> &names);
+ bool serializeToMts(std::ostream *os,
+ const std::vector<std::string> &names) const;
bool serializeToLua(std::ostream *os, const std::vector<std::string> &names,
- bool use_comments, u32 indent_spaces);
+ bool use_comments, u32 indent_spaces) const;
void blitToVManip(MMVManip *vm, v3s16 p, Rotation rot, bool force_place);
bool placeOnVManip(MMVManip *vm, v3s16 p, u32 flags, Rotation rot, bool force_place);
// WARNING: Ownership of ObjDefs is transferred to the ObjDefManager it is
// added/set to. Note that ObjDefs managed by ObjDefManager are NOT refcounted,
// so the same ObjDef instance must not be referenced multiple
+// TODO: const correctness for getter methods
class ObjDefManager {
public:
ObjDefManager(IGameDef *gamedef, ObjDefType type);
if (!bmgr)
return 0;
- Biome *biome = (Biome *)bmgr->getByName(biome_str);
+ const Biome *biome = (Biome *)bmgr->getByName(biome_str);
if (!biome || biome->index == OBJDEF_INVALID_INDEX)
return 0;
if (!bmgr)
return 0;
- Biome *b = (Biome *)bmgr->getRaw(biome_id);
+ const Biome *b = (Biome *)bmgr->getRaw(biome_id);
lua_pushstring(L, b->name.c_str());
return 1;
return 0;
float heat = bmgr->getHeatAtPosOriginal(pos, np_heat, np_heat_blend, seed);
- if (!heat)
- return 0;
lua_pushnumber(L, heat);
float humidity = bmgr->getHumidityAtPosOriginal(pos, np_humidity,
np_humidity_blend, seed);
- if (!humidity)
- return 0;
lua_pushnumber(L, humidity);
if (!humidity)
return 0;
- Biome *biome = (Biome *)bmgr->getBiomeFromNoiseOriginal(heat, humidity, pos);
+ const Biome *biome = bmgr->getBiomeFromNoiseOriginal(heat, humidity, pos);
if (!biome || biome->index == OBJDEF_INVALID_INDEX)
return 0;
u32 blockseed = Mapgen::getBlockSeed(pmin, mg.seed);
- OreManager *oremgr = (OreManager*) emerge->getOreManager(); // FIXME FIXME
- oremgr->placeAllOres(&mg, blockseed, pmin, pmax);
+ emerge->oremgr->placeAllOres(&mg, blockseed, pmin, pmax);
return 0;
}
u32 blockseed = Mapgen::getBlockSeed(pmin, mg.seed);
- DecorationManager *decomgr = (DecorationManager*) emerge->getDecorationManager(); // FIXME FIXME
- decomgr->placeAllDecos(&mg, blockseed, pmin, pmax);
+ emerge->decomgr->placeAllDecos(&mg, blockseed, pmin, pmax);
return 0;
}
GET_ENV_PTR;
ServerMap *map = &(env->getServerMap());
- SchematicManager *schemmgr = (SchematicManager*)
- getServer(L)->getEmergeManager()->getSchematicManager(); // FIXME FIXME
+ SchematicManager *schemmgr = getServer(L)->getEmergeManager()->schemmgr;
//// Read position
v3s16 p = check_v3s16(L, 1);
{
NO_MAP_LOCK_REQUIRED;
- SchematicManager *schemmgr = (SchematicManager*)
- getServer(L)->getEmergeManager()->getSchematicManager(); // FIXME FIXME
+ SchematicManager *schemmgr = getServer(L)->getEmergeManager()->schemmgr;
//// Read VoxelManip object
MMVManip *vm = LuaVoxelManip::checkobject(L, 1)->vm;
//// Get schematic
bool was_loaded = false;
- Schematic *schem = (Schematic *)get_objdef(L, 1, schemmgr);
+ const Schematic *schem = (Schematic *)get_objdef(L, 1, schemmgr);
if (!schem) {
schem = load_schematic(L, 1, NULL, NULL);
was_loaded = true;