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:
parent
c873164878
commit
3570f3e396
13 changed files with 368 additions and 270 deletions
|
@ -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;
|
||||
}
|
||||
|
||||
/******************************************************************************/
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue