]> git.lizzy.rs Git - dragonfireclient.git/blob - src/script/lua_api/l_noise.h
40bfd13152b6e914d7e8ec0a2c25d114548c54dd
[dragonfireclient.git] / src / script / lua_api / l_noise.h
1 /*
2 Minetest
3 Copyright (C) 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 L_NOISE_H_
21 #define L_NOISE_H_
22
23 #include "lua_api/l_base.h"
24 #include "irr_v3d.h"
25 #include "noise.h"
26
27 /*
28         LuaPerlinNoise
29 */
30 class LuaPerlinNoise : public ModApiBase {
31 private:
32         NoiseParams np;
33         static const char className[];
34         static const luaL_reg methods[];
35
36         // Exported functions
37
38         // garbage collector
39         static int gc_object(lua_State *L);
40
41         static int l_get2d(lua_State *L);
42         static int l_get3d(lua_State *L);
43
44 public:
45         LuaPerlinNoise(NoiseParams *params);
46         ~LuaPerlinNoise();
47
48         // LuaPerlinNoise(seed, octaves, persistence, scale)
49         // Creates an LuaPerlinNoise and leaves it on top of stack
50         static int create_object(lua_State *L);
51
52         static LuaPerlinNoise *checkobject(lua_State *L, int narg);
53
54         static void Register(lua_State *L);
55 };
56
57 /*
58         LuaPerlinNoiseMap
59 */
60 class LuaPerlinNoiseMap : public ModApiBase {
61         NoiseParams np;
62         Noise *noise;
63         bool m_is3d;
64         static const char className[];
65         static const luaL_reg methods[];
66
67         // Exported functions
68
69         // garbage collector
70         static int gc_object(lua_State *L);
71
72         static int l_get2dMap(lua_State *L);
73         static int l_get2dMap_flat(lua_State *L);
74         static int l_get3dMap(lua_State *L);
75         static int l_get3dMap_flat(lua_State *L);
76
77         static int l_calc2dMap(lua_State *L);
78         static int l_calc3dMap(lua_State *L);
79         static int l_getMapSlice(lua_State *L);
80
81 public:
82         LuaPerlinNoiseMap(NoiseParams *np, s32 seed, v3s16 size);
83
84         ~LuaPerlinNoiseMap();
85
86         // LuaPerlinNoiseMap(np, size)
87         // Creates an LuaPerlinNoiseMap and leaves it on top of stack
88         static int create_object(lua_State *L);
89
90         static LuaPerlinNoiseMap *checkobject(lua_State *L, int narg);
91
92         static void Register(lua_State *L);
93 };
94
95 /*
96         LuaPseudoRandom
97 */
98 class LuaPseudoRandom : public ModApiBase {
99 private:
100         PseudoRandom m_pseudo;
101
102         static const char className[];
103         static const luaL_reg methods[];
104
105         // Exported functions
106
107         // garbage collector
108         static int gc_object(lua_State *L);
109
110         // next(self, min=0, max=32767) -> get next value
111         static int l_next(lua_State *L);
112
113 public:
114         LuaPseudoRandom(s32 seed) :
115                 m_pseudo(seed) {}
116
117         // LuaPseudoRandom(seed)
118         // Creates an LuaPseudoRandom and leaves it on top of stack
119         static int create_object(lua_State *L);
120
121         static LuaPseudoRandom *checkobject(lua_State *L, int narg);
122
123         static void Register(lua_State *L);
124 };
125
126 /*
127         LuaPcgRandom
128 */
129 class LuaPcgRandom : public ModApiBase {
130 private:
131         PcgRandom m_rnd;
132
133         static const char className[];
134         static const luaL_reg methods[];
135
136         // Exported functions
137
138         // garbage collector
139         static int gc_object(lua_State *L);
140
141         // next(self, min=-2147483648, max=2147483647) -> get next value
142         static int l_next(lua_State *L);
143
144         // rand_normal_dist(self, min=-2147483648, max=2147483647, num_trials=6) ->
145         // get next normally distributed random value
146         static int l_rand_normal_dist(lua_State *L);
147
148 public:
149         LuaPcgRandom(u64 seed) :
150                 m_rnd(seed) {}
151         LuaPcgRandom(u64 seed, u64 seq) :
152                 m_rnd(seed, seq) {}
153
154         // LuaPcgRandom(seed)
155         // Creates an LuaPcgRandom and leaves it on top of stack
156         static int create_object(lua_State *L);
157
158         static LuaPcgRandom *checkobject(lua_State *L, int narg);
159
160         static void Register(lua_State *L);
161 };
162
163
164 /*
165         LuaSecureRandom
166 */
167 class LuaSecureRandom : public ModApiBase {
168 private:
169         static const size_t RAND_BUF_SIZE = 2048;
170         static const char className[];
171         static const luaL_reg methods[];
172
173         u32 m_rand_idx;
174         char m_rand_buf[RAND_BUF_SIZE];
175
176         // Exported functions
177
178         // garbage collector
179         static int gc_object(lua_State *L);
180
181         // next_bytes(self, count) -> get count many bytes
182         static int l_next_bytes(lua_State *L);
183
184 public:
185         bool fillRandBuf();
186
187         // LuaSecureRandom()
188         // Creates an LuaSecureRandom and leaves it on top of stack
189         static int create_object(lua_State *L);
190
191         static LuaSecureRandom *checkobject(lua_State *L, int narg);
192
193         static void Register(lua_State *L);
194 };
195
196 #endif /* L_NOISE_H_ */