/*
Minetest
-Copyright (C) 2010-2015 celeron55, Perttu Ahola <celeron55@gmail.com>
-Copyright (C) 2013-2016 kwolekr, Ryan Kwolek <kwolekr@minetest.net>
-Copyright (C) 2015-2017 paramat
+Copyright (C) 2010-2018 celeron55, Perttu Ahola <celeron55@gmail.com>
+Copyright (C) 2013-2018 kwolekr, Ryan Kwolek <kwolekr@minetest.net>
+Copyright (C) 2015-2018 paramat
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU Lesser General Public License as published by
#define MG_FLAT 0x08 // Deprecated. Moved into mgv6 flags
#define MG_LIGHT 0x10
#define MG_DECORATIONS 0x20
+#define MG_BIOMES 0x40
typedef u8 biome_t; // copy from mg_biome.h to avoid an unnecessary include
class Settings;
class MMVManip;
-class INodeDefManager;
+class NodeDefManager;
extern FlagDesc flagdesc_mapgen[];
extern FlagDesc flagdesc_gennotify[];
NUM_GENNOTIFY_TYPES
};
-enum MgStoneType {
- MGSTONE_STONE,
- MGSTONE_DESERT_STONE,
- MGSTONE_SANDSTONE,
- MGSTONE_OTHER,
-};
-
struct GenNotifyEvent {
GenNotifyType type;
v3s16 pos;
void setNotifyOnDecoIds(std::set<u32> *notify_on_deco_ids);
bool addEvent(GenNotifyType type, v3s16 pos, u32 id=0);
- void getEvents(std::map<std::string, std::vector<v3s16> > &event_map,
- bool peek_events=false);
+ void getEvents(std::map<std::string, std::vector<v3s16> > &event_map);
+ void clearEvents();
private:
u32 m_notify_on = 0;
std::list<GenNotifyEvent> m_notify_events;
};
+// Order must match the order of 'static MapgenDesc g_reg_mapgens[]' in mapgen.cpp
enum MapgenType {
- MAPGEN_V5,
- MAPGEN_V6,
MAPGEN_V7,
+ MAPGEN_VALLEYS,
+ MAPGEN_CARPATHIAN,
+ MAPGEN_V5,
MAPGEN_FLAT,
MAPGEN_FRACTAL,
- MAPGEN_VALLEYS,
MAPGEN_SINGLENODE,
- MAPGEN_CARPATHIAN,
+ MAPGEN_V6,
MAPGEN_INVALID,
};
u64 seed = 0;
s16 water_level = 1;
s16 mapgen_limit = MAX_MAP_GENERATION_LIMIT;
- u32 flags = MG_CAVES | MG_LIGHT | MG_DECORATIONS;
+ u32 flags = MG_CAVES | MG_LIGHT | MG_DECORATIONS | MG_BIOMES;
BiomeParams *bparams = nullptr;
virtual void readParams(const Settings *settings);
virtual void writeParams(Settings *settings) const;
- bool saoPosOverLimit(const v3f &p);
s32 getSpawnRangeMax();
private:
void calcMapgenEdges();
-
- float m_sao_limit_min = -MAX_MAP_GENERATION_LIMIT * BS;
- float m_sao_limit_max = MAX_MAP_GENERATION_LIMIT * BS;
bool m_mapgen_edges_calculated = false;
};
int id = -1;
MMVManip *vm = nullptr;
- INodeDefManager *ndef = nullptr;
+ const NodeDefManager *ndef = nullptr;
u32 blockseed;
s16 *heightmap = nullptr;
// Mapgen management functions
static MapgenType getMapgenType(const std::string &mgname);
static const char *getMapgenName(MapgenType mgtype);
- static Mapgen *createMapgen(MapgenType mgtype, int mgid,
- MapgenParams *params, EmergeManager *emerge);
+ static Mapgen *createMapgen(MapgenType mgtype, MapgenParams *params,
+ EmergeManager *emerge);
static MapgenParams *createMapgenParams(MapgenType mgtype);
static void getMapgenNames(std::vector<const char *> *mgnames, bool include_hidden);
MapgenBasic(int mapgenid, MapgenParams *params, EmergeManager *emerge);
virtual ~MapgenBasic();
- virtual void generateCaves(s16 max_stone_y, s16 large_cave_depth);
- virtual bool generateCaverns(s16 max_stone_y);
- virtual void generateDungeons(s16 max_stone_y,
- MgStoneType stone_type, content_t biome_stone);
- virtual void generateBiomes(MgStoneType *mgstone_type,
- content_t *biome_stone);
+ virtual void generateBiomes();
virtual void dustTopNodes();
+ virtual void generateCavesNoiseIntersection(s16 max_stone_y);
+ virtual void generateCavesRandomWalk(s16 max_stone_y, s16 large_cave_depth);
+ virtual bool generateCavernsNoise(s16 max_stone_y);
+ virtual void generateDungeons(s16 max_stone_y);
protected:
EmergeManager *m_emerge;
v3s16 full_node_min;
v3s16 full_node_max;
- // Content required for generateBiomes
content_t c_stone;
- content_t c_desert_stone;
- content_t c_sandstone;
content_t c_water_source;
content_t c_river_water_source;
content_t c_lava_source;
-
- // Content required for generateDungeons
content_t c_cobble;
- content_t c_stair_cobble;
- content_t c_mossycobble;
- content_t c_stair_desert_stone;
- content_t c_sandstonebrick;
- content_t c_stair_sandstone_block;
int ystride;
int zstride;
NoiseParams np_cave1;
NoiseParams np_cave2;
NoiseParams np_cavern;
+ NoiseParams np_dungeons;
float cave_width;
float cavern_limit;
float cavern_taper;
float cavern_threshold;
+ // TODO 'lava_depth' is deprecated and should be removed. Cave liquids are
+ // now defined and located using biome definitions.
int lava_depth;
};