3 Copyright (C) 2013 celeron55, Perttu Ahola <celeron55@gmail.com>
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.
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.
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.
23 #include "lua_api/l_base.h"
29 class LuaPerlinNoise : public ModApiBase
33 static const char className[];
34 static const luaL_Reg methods[];
39 static int gc_object(lua_State *L);
41 static int l_get_2d(lua_State *L);
42 static int l_get_3d(lua_State *L);
45 LuaPerlinNoise(NoiseParams *params);
46 ~LuaPerlinNoise() = default;
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);
52 static LuaPerlinNoise *checkobject(lua_State *L, int narg);
54 static void Register(lua_State *L);
60 class LuaPerlinNoiseMap : public ModApiBase
65 static const char className[];
66 static const luaL_Reg methods[];
71 static int gc_object(lua_State *L);
73 static int l_get_2d_map(lua_State *L);
74 static int l_get_2d_map_flat(lua_State *L);
75 static int l_get_3d_map(lua_State *L);
76 static int l_get_3d_map_flat(lua_State *L);
78 static int l_calc_2d_map(lua_State *L);
79 static int l_calc_3d_map(lua_State *L);
80 static int l_get_map_slice(lua_State *L);
83 LuaPerlinNoiseMap(NoiseParams *np, s32 seed, v3s16 size);
87 // LuaPerlinNoiseMap(np, size)
88 // Creates an LuaPerlinNoiseMap and leaves it on top of stack
89 static int create_object(lua_State *L);
91 static LuaPerlinNoiseMap *checkobject(lua_State *L, int narg);
93 static void Register(lua_State *L);
99 class LuaPseudoRandom : public ModApiBase
102 PseudoRandom m_pseudo;
104 static const char className[];
105 static const luaL_Reg methods[];
107 // Exported functions
110 static int gc_object(lua_State *L);
112 // next(self, min=0, max=32767) -> get next value
113 static int l_next(lua_State *L);
116 LuaPseudoRandom(s32 seed) : m_pseudo(seed) {}
118 // LuaPseudoRandom(seed)
119 // Creates an LuaPseudoRandom and leaves it on top of stack
120 static int create_object(lua_State *L);
122 static LuaPseudoRandom *checkobject(lua_State *L, int narg);
124 static void Register(lua_State *L);
130 class LuaPcgRandom : public ModApiBase
135 static const char className[];
136 static const luaL_Reg methods[];
138 // Exported functions
141 static int gc_object(lua_State *L);
143 // next(self, min=-2147483648, max=2147483647) -> get next value
144 static int l_next(lua_State *L);
146 // rand_normal_dist(self, min=-2147483648, max=2147483647, num_trials=6) ->
147 // get next normally distributed random value
148 static int l_rand_normal_dist(lua_State *L);
151 LuaPcgRandom(u64 seed) : m_rnd(seed) {}
152 LuaPcgRandom(u64 seed, u64 seq) : m_rnd(seed, seq) {}
154 // LuaPcgRandom(seed)
155 // Creates an LuaPcgRandom and leaves it on top of stack
156 static int create_object(lua_State *L);
158 static LuaPcgRandom *checkobject(lua_State *L, int narg);
160 static void Register(lua_State *L);
166 class LuaSecureRandom : public ModApiBase
169 static const size_t RAND_BUF_SIZE = 2048;
170 static const char className[];
171 static const luaL_Reg methods[];
174 char m_rand_buf[RAND_BUF_SIZE];
176 // Exported functions
179 static int gc_object(lua_State *L);
181 // next_bytes(self, count) -> get count many bytes
182 static int l_next_bytes(lua_State *L);
188 // Creates an LuaSecureRandom and leaves it on top of stack
189 static int create_object(lua_State *L);
191 static LuaSecureRandom *checkobject(lua_State *L, int narg);
193 static void Register(lua_State *L);