]> git.lizzy.rs Git - dragonfireclient.git/blobdiff - src/mapgen/mapgen.h
Initialise 'seabed_height' to avoid compilation warning (#8715)
[dragonfireclient.git] / src / mapgen / mapgen.h
index a54f1236e498a2c4cb62c48a389cb13f7794950a..b10aa7b9ed7fb4e4c89fce780028b8287914d0f4 100644 (file)
@@ -1,8 +1,8 @@
 /*
 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
@@ -36,12 +36,13 @@ with this program; if not, write to the Free Software Foundation, Inc.,
 #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[];
@@ -77,13 +78,6 @@ enum GenNotifyType {
        NUM_GENNOTIFY_TYPES
 };
 
-enum MgStoneType {
-       MGSTONE_STONE,
-       MGSTONE_DESERT_STONE,
-       MGSTONE_SANDSTONE,
-       MGSTONE_OTHER,
-};
-
 struct GenNotifyEvent {
        GenNotifyType type;
        v3s16 pos;
@@ -99,8 +93,8 @@ class GenerateNotifier {
        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;
@@ -108,15 +102,16 @@ class GenerateNotifier {
        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,
 };
 
@@ -129,7 +124,7 @@ struct MapgenParams {
        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;
 
@@ -139,14 +134,10 @@ struct MapgenParams {
        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;
 };
 
@@ -170,7 +161,7 @@ class Mapgen {
        int id = -1;
 
        MMVManip *vm = nullptr;
-       INodeDefManager *ndef = nullptr;
+       const NodeDefManager *ndef = nullptr;
 
        u32 blockseed;
        s16 *heightmap = nullptr;
@@ -218,8 +209,8 @@ class Mapgen {
        // 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);
 
@@ -249,13 +240,12 @@ class MapgenBasic : public Mapgen {
        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;
@@ -268,21 +258,11 @@ class MapgenBasic : public Mapgen {
        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;
@@ -294,9 +274,12 @@ class MapgenBasic : public Mapgen {
        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;
 };