1
0
Fork 0
mirror of https://github.com/luanti-org/luanti.git synced 2025-06-27 16:36:03 +00:00

Add minetest.set_noiseparam_defaults() Lua API

This commit is contained in:
kwolekr 2014-02-15 18:20:15 -05:00
parent c873164878
commit 3570f3e396
13 changed files with 368 additions and 270 deletions

View file

@ -958,25 +958,36 @@ void luaentity_get(lua_State *L, u16 id)
/******************************************************************************/
NoiseParams *read_noiseparams(lua_State *L, int index)
{
NoiseParams *np = new NoiseParams;
if (!read_noiseparams_nc(L, index, np)) {
delete np;
np = NULL;
}
return np;
}
bool read_noiseparams_nc(lua_State *L, int index, NoiseParams *np)
{
if (index < 0)
index = lua_gettop(L) + 1 + index;
if (!lua_istable(L, index))
return NULL;
return false;
NoiseParams *np = new NoiseParams;
np->offset = getfloatfield_default(L, index, "offset", 0.0);
np->scale = getfloatfield_default(L, index, "scale", 0.0);
np->persist = getfloatfield_default(L, index, "persist", 0.0);
np->seed = getintfield_default(L, index, "seed", 0);
np->octaves = getintfield_default(L, index, "octaves", 0);
np->offset = getfloatfield_default(L, index, "offset", 0.0);
np->scale = getfloatfield_default(L, index, "scale", 0.0);
lua_getfield(L, index, "spread");
np->spread = read_v3f(L, -1);
lua_pop(L, 1);
np->seed = getintfield_default(L, index, "seed", 0);
np->octaves = getintfield_default(L, index, "octaves", 0);
np->persist = getfloatfield_default(L, index, "persist", 0.0);
return np;
return true;
}
/******************************************************************************/

View file

@ -144,6 +144,9 @@ bool string_to_enum (const EnumString *spec,
NoiseParams* read_noiseparams (lua_State *L, int index);
bool read_noiseparams_nc (lua_State *L, int index,
NoiseParams *np);
bool read_schematic (lua_State *L, int index,
DecoSchematic *dschem,
Server *server);

View file

@ -229,6 +229,33 @@ int ModApiMapgen::l_set_mapgen_params(lua_State *L)
return 0;
}
// minetest.set_noiseparam_defaults({np1={noise params}, ...})
// set default values for noise parameters if not present in global settings
int ModApiMapgen::l_set_noiseparam_defaults(lua_State *L)
{
NoiseParams np;
std::string val, name;
if (!lua_istable(L, 1))
return 0;
lua_pushnil(L);
while (lua_next(L, 1)) {
if (read_noiseparams_nc(L, -1, &np)) {
if (!serializeStructToString(&val, NOISEPARAMS_FMT_STR, &np))
continue;
if (!lua_isstring(L, -2))
continue;
name = lua_tostring(L, -2);
g_settings->setDefault(name, val);
}
lua_pop(L, 1);
}
return 0;
}
// set_gen_notify(string)
int ModApiMapgen::l_set_gen_notify(lua_State *L)
{
@ -607,6 +634,7 @@ void ModApiMapgen::Initialize(lua_State *L, int top)
API_FCT(get_mapgen_object);
API_FCT(set_mapgen_params);
API_FCT(set_noiseparam_defaults);
API_FCT(set_gen_notify);
API_FCT(register_biome);

View file

@ -32,6 +32,9 @@ private:
// set mapgen parameters
static int l_set_mapgen_params(lua_State *L);
// minetest.set_noiseparam_defaults({np1={noise params}, ...})
static int l_set_noiseparam_defaults(lua_State *L);
// set_gen_notify(flagstring)
static int l_set_gen_notify(lua_State *L);