summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/script/common/c_content.cpp10
-rw-r--r--src/script/common/c_converter.cpp29
-rw-r--r--src/script/common/c_converter.h3
-rw-r--r--src/script/lua_api/l_settings.cpp38
-rw-r--r--src/script/lua_api/l_settings.h7
5 files changed, 82 insertions, 5 deletions
diff --git a/src/script/common/c_content.cpp b/src/script/common/c_content.cpp
index 4d8cdd352..1bbfac25f 100644
--- a/src/script/common/c_content.cpp
+++ b/src/script/common/c_content.cpp
@@ -1586,13 +1586,13 @@ bool read_noiseparams(lua_State *L, int index, NoiseParams *np)
void push_noiseparams(lua_State *L, NoiseParams *np)
{
lua_newtable(L);
- lua_pushnumber(L, np->offset);
+ push_float_string(L, np->offset);
lua_setfield(L, -2, "offset");
- lua_pushnumber(L, np->scale);
+ push_float_string(L, np->scale);
lua_setfield(L, -2, "scale");
- lua_pushnumber(L, np->persist);
+ push_float_string(L, np->persist);
lua_setfield(L, -2, "persistence");
- lua_pushnumber(L, np->lacunarity);
+ push_float_string(L, np->lacunarity);
lua_setfield(L, -2, "lacunarity");
lua_pushnumber(L, np->seed);
lua_setfield(L, -2, "seed");
@@ -1603,7 +1603,7 @@ void push_noiseparams(lua_State *L, NoiseParams *np)
np->flags);
lua_setfield(L, -2, "flags");
- push_v3f(L, np->spread);
+ push_v3_float_string(L, np->spread);
lua_setfield(L, -2, "spread");
}
diff --git a/src/script/common/c_converter.cpp b/src/script/common/c_converter.cpp
index 8f88aeb60..e81cecac8 100644
--- a/src/script/common/c_converter.cpp
+++ b/src/script/common/c_converter.cpp
@@ -51,6 +51,15 @@ if (value < F1000_MIN || value > F1000_MAX) { \
#define CHECK_POS_TAB(index) CHECK_TYPE(index, "position", LUA_TTABLE)
+void push_float_string(lua_State *L, float value)
+{
+ std::stringstream ss;
+ std::string str;
+ ss << value;
+ str = ss.str();
+ lua_pushstring(L, str.c_str());
+}
+
void push_v3f(lua_State *L, v3f p)
{
lua_newtable(L);
@@ -71,6 +80,26 @@ void push_v2f(lua_State *L, v2f p)
lua_setfield(L, -2, "y");
}
+void push_v3_float_string(lua_State *L, v3f p)
+{
+ lua_newtable(L);
+ push_float_string(L, p.X);
+ lua_setfield(L, -2, "x");
+ push_float_string(L, p.Y);
+ lua_setfield(L, -2, "y");
+ push_float_string(L, p.Z);
+ lua_setfield(L, -2, "z");
+}
+
+void push_v2_float_string(lua_State *L, v2f p)
+{
+ lua_newtable(L);
+ push_float_string(L, p.X);
+ lua_setfield(L, -2, "x");
+ push_float_string(L, p.Y);
+ lua_setfield(L, -2, "y");
+}
+
v2s16 read_v2s16(lua_State *L, int index)
{
v2s16 p;
diff --git a/src/script/common/c_converter.h b/src/script/common/c_converter.h
index 18b8f6531..7827d8146 100644
--- a/src/script/common/c_converter.h
+++ b/src/script/common/c_converter.h
@@ -99,6 +99,9 @@ std::vector<aabb3f> read_aabb3f_vector (lua_State *L, int index, f32 scale);
size_t read_stringlist (lua_State *L, int index,
std::vector<std::string> *result);
+void push_float_string (lua_State *L, float value);
+void push_v3_float_string(lua_State *L, v3f p);
+void push_v2_float_string(lua_State *L, v2f p);
void push_v2s16 (lua_State *L, v2s16 p);
void push_v2s32 (lua_State *L, v2s32 p);
void push_v3s16 (lua_State *L, v3s16 p);
diff --git a/src/script/lua_api/l_settings.cpp b/src/script/lua_api/l_settings.cpp
index 2d6769ea1..141ac61d1 100644
--- a/src/script/lua_api/l_settings.cpp
+++ b/src/script/lua_api/l_settings.cpp
@@ -21,6 +21,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "lua_api/l_internal.h"
#include "cpp_api/s_security.h"
#include "settings.h"
+#include "noise.h"
#include "log.h"
@@ -105,6 +106,24 @@ int LuaSettings::l_get_bool(lua_State* L)
return 1;
}
+// get_np_group(self, key) -> value
+int LuaSettings::l_get_np_group(lua_State *L)
+{
+ NO_MAP_LOCK_REQUIRED;
+ LuaSettings *o = checkobject(L, 1);
+
+ std::string key = std::string(luaL_checkstring(L, 2));
+ if (o->m_settings->exists(key)) {
+ NoiseParams np;
+ o->m_settings->getNoiseParams(key, np);
+ push_noiseparams(L, &np);
+ } else {
+ lua_pushnil(L);
+ }
+
+ return 1;
+}
+
// set(self, key, value)
int LuaSettings::l_set(lua_State* L)
{
@@ -138,6 +157,23 @@ int LuaSettings::l_set_bool(lua_State* L)
return 1;
}
+// set(self, key, value)
+int LuaSettings::l_set_np_group(lua_State *L)
+{
+ NO_MAP_LOCK_REQUIRED;
+ LuaSettings *o = checkobject(L, 1);
+
+ std::string key = std::string(luaL_checkstring(L, 2));
+ NoiseParams value;
+ read_noiseparams(L, 3, &value);
+
+ SET_SECURITY_CHECK(L, key);
+
+ o->m_settings->setNoiseParams(key, value, false);
+
+ return 0;
+}
+
// remove(self, key) -> success
int LuaSettings::l_remove(lua_State* L)
{
@@ -264,8 +300,10 @@ const char LuaSettings::className[] = "Settings";
const luaL_Reg LuaSettings::methods[] = {
luamethod(LuaSettings, get),
luamethod(LuaSettings, get_bool),
+ luamethod(LuaSettings, get_np_group),
luamethod(LuaSettings, set),
luamethod(LuaSettings, set_bool),
+ luamethod(LuaSettings, set_np_group),
luamethod(LuaSettings, remove),
luamethod(LuaSettings, get_names),
luamethod(LuaSettings, write),
diff --git a/src/script/lua_api/l_settings.h b/src/script/lua_api/l_settings.h
index 500917f0a..dcf39a89e 100644
--- a/src/script/lua_api/l_settings.h
+++ b/src/script/lua_api/l_settings.h
@@ -19,6 +19,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#pragma once
+#include "common/c_content.h"
#include "lua_api/l_base.h"
class Settings;
@@ -38,12 +39,18 @@ private:
// get_bool(self, key) -> boolean
static int l_get_bool(lua_State *L);
+ // get_np_group(self, key) -> noiseparam
+ static int l_get_np_group(lua_State *L);
+
// set(self, key, value)
static int l_set(lua_State *L);
// set_bool(self, key, value)
static int l_set_bool(lua_State *L);
+ // set_np_group(self, key, value)
+ static int l_set_np_group(lua_State *L);
+
// remove(self, key) -> success
static int l_remove(lua_State *L);