]> git.lizzy.rs Git - minetest.git/blob - src/mapgen_indev.h
initial mapgen indev version with farscale feature and huge caves
[minetest.git] / src / mapgen_indev.h
1 /*
2 Minetest
3 Copyright (C) 2010-2013 celeron55, Perttu Ahola <celeron55@gmail.com>
4
5 This program is free software; you can redistribute it and/or modify
6 it under the terms of the GNU Lesser General Public License as published by
7 the Free Software Foundation; either version 2.1 of the License, or
8 (at your option) any later version.
9
10 This program is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13 GNU Lesser General Public License for more details.
14
15 You should have received a copy of the GNU Lesser General Public License along
16 with this program; if not, write to the Free Software Foundation, Inc.,
17 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
18 */
19
20 #ifndef MAPGENINDEV_HEADER
21 #define MAPGENINDEV_HEADER
22
23 #include "mapgen.h"
24 #include "mapgen_v6.h"
25
26 float farscale(float scale, float x, float y, float z);
27
28 struct NoiseIndevParams : public NoiseParams {
29         float farscale;
30
31         NoiseIndevParams(){}
32         NoiseIndevParams(float offset_, float scale_, v3f spread_, int seed_, int octaves_, float persist_, float farscale_) 
33             //:NoiseParams(offset_, scale_, spread_, seed_, octaves_,  persist_)
34         {
35         //NoiseParams(float offset_, float scale_, v3f spread_, int seed_, int octaves_, float persist_) {
36                 offset = offset_;
37                 scale = scale_;
38                 spread = spread_;
39                 seed = seed_;
40                 octaves = octaves_;
41                 persist = persist_;
42         //}
43                 farscale = farscale_;
44         }
45
46 };
47
48 #define getNoiseIndevParams(x) getStruct<NoiseIndevParams>((x), "f,f,v3,s32,s32,f,f")
49 #define setNoiseIndevParams(x, y) setStruct((x), "f,f,v3,s32,s32,f,f", (y))
50
51 class NoiseIndev : public Noise {
52     public:
53         NoiseIndevParams *npindev;
54
55         //NoiseIndev() {};
56         NoiseIndev(NoiseIndevParams *np, int seed, int sx, int sy);
57         NoiseIndev(NoiseIndevParams *np, int seed, int sx, int sy, int sz);
58         void init(NoiseIndevParams *np, int seed, int sx, int sy, int sz);
59         void transformNoiseMapFarScale(float xx = 0, float yy = 0, float zz = 0);
60 };
61
62 extern NoiseIndevParams nparams_indev_def_terrain_base;
63 extern NoiseIndevParams nparams_indev_def_terrain_higher;
64 extern NoiseIndevParams nparams_indev_def_steepness;
65 //extern NoiseIndevParams nparams_indev_def_height_select;
66 //extern NoiseIndevParams nparams_indev_def_trees;
67 extern NoiseIndevParams nparams_indev_def_mud;
68 //extern NoiseIndevParams nparams_indev_def_beach;
69 //extern NoiseIndevParams nparams_indev_def_biome;
70 //extern NoiseIndevParams nparams_indev_def_cave;
71
72
73 struct MapgenIndevParams : public MapgenV6Params {
74         NoiseIndevParams *npindev_terrain_base;
75         NoiseIndevParams *npindev_terrain_higher;
76         NoiseIndevParams *npindev_steepness;
77         //NoiseParams *np_height_select;
78         //NoiseParams *np_trees;
79         NoiseIndevParams *npindev_mud;
80         //NoiseParams *np_beach;
81         //NoiseParams *np_biome;
82         //NoiseParams *np_cave;
83
84         MapgenIndevParams() {
85                 //freq_desert       = 0.45;
86                 //freq_beach        = 0.15;
87                 npindev_terrain_base   = &nparams_indev_def_terrain_base;
88                 npindev_terrain_higher = &nparams_indev_def_terrain_higher;
89                 npindev_steepness      = &nparams_indev_def_steepness;
90                 //np_height_select  = &nparams_v6_def_height_select;
91                 //np_trees          = &nparams_v6_def_trees;
92                 npindev_mud            = &nparams_indev_def_mud;
93                 //np_beach          = &nparams_v6_def_beach;
94                 //np_biome          = &nparams_v6_def_biome;
95                 //np_cave           = &nparams_v6_def_cave;
96         }
97
98         bool readParams(Settings *settings);
99         void writeParams(Settings *settings);
100 };
101
102 class MapgenIndev : public MapgenV6 {
103     public:
104         NoiseIndev *noiseindev_terrain_base;
105         NoiseIndev *noiseindev_terrain_higher;
106         NoiseIndev *noiseindev_steepness;
107         //NoiseIndev *noise_height_select;
108         //NoiseIndev *noise_trees;
109         NoiseIndev *noiseindev_mud;
110         //NoiseIndev *noise_beach;
111         //NoiseIndev *noise_biome;
112         //NoiseIndevParams *np_cave;
113
114         MapgenIndev(int mapgenid, MapgenIndevParams *params);
115         ~MapgenIndev();
116         void calculateNoise();
117
118         float baseTerrainLevelFromNoise(v2s16 p);
119         float baseTerrainLevelFromMap(int index);
120         float getMudAmount(int index);
121         void defineCave(Cave & cave, PseudoRandom ps, v3s16 node_min, bool large_cave);
122 };
123
124 struct MapgenFactoryIndev : public MapgenFactoryV6 {
125         Mapgen *createMapgen(int mgid, MapgenParams *params, EmergeManager *emerge) {
126                 return new MapgenIndev(mgid, (MapgenIndevParams *)params);
127         };
128
129         MapgenParams *createMapgenParams() {
130                 return new MapgenIndevParams();
131         };
132 };
133
134
135 #endif