diff --git a/src/coders/binary_json.cpp b/src/coders/binary_json.cpp index bed39be2..5794f921 100644 --- a/src/coders/binary_json.cpp +++ b/src/coders/binary_json.cpp @@ -98,15 +98,15 @@ static Value* value_from_binary(ByteReader& reader) { break; case BJSON_TYPE_BYTE: type = valtype::integer; - val = reader.get(); + val = static_cast(reader.get()); break; case BJSON_TYPE_INT16: type = valtype::integer; - val = reader.getInt16(); + val = static_cast(reader.getInt16()); break; case BJSON_TYPE_INT32: type = valtype::integer; - val = reader.getInt32(); + val = static_cast(reader.getInt32()); break; case BJSON_TYPE_INT64: type = valtype::integer; @@ -119,7 +119,7 @@ static Value* value_from_binary(ByteReader& reader) { case BJSON_TYPE_FALSE: case BJSON_TYPE_TRUE: type = valtype::boolean; - val = typecode - BJSON_TYPE_FALSE; + val = (typecode - BJSON_TYPE_FALSE) != 0; break; case BJSON_TYPE_STRING: type = valtype::string; diff --git a/src/data/dynamic.cpp b/src/data/dynamic.cpp index 62ab3c2b..ef29ce6a 100644 --- a/src/data/dynamic.cpp +++ b/src/data/dynamic.cpp @@ -353,7 +353,7 @@ Value::~Value() { } } -Value Value::of(bool value) { +Value Value::boolean(bool value) { return Value(valtype::boolean, value); } diff --git a/src/data/dynamic.h b/src/data/dynamic.h index c32e20e8..e05875ee 100644 --- a/src/data/dynamic.h +++ b/src/data/dynamic.h @@ -33,7 +33,7 @@ namespace dynamic { Value(valtype type, valvalue value); ~Value(); - static Value of(bool value); + static Value boolean(bool value); static Value of(number_u value); static Value of(const std::string& value); }; diff --git a/src/logic/scripting/lua/LuaState.cpp b/src/logic/scripting/lua/LuaState.cpp index fbffac37..d8a6f3e3 100644 --- a/src/logic/scripting/lua/LuaState.cpp +++ b/src/logic/scripting/lua/LuaState.cpp @@ -280,9 +280,9 @@ dynamic::Value lua::LuaState::tovalue(int idx) { switch (type) { case LUA_TNIL: case LUA_TNONE: - return dynamic::Value(valtype::none, 0); + return dynamic::Value(valtype::none, (integer_t)0); case LUA_TBOOLEAN: - return dynamic::Value::of(lua_toboolean(L, idx) == 1); + return dynamic::Value::boolean(lua_toboolean(L, idx) == 1); case LUA_TNUMBER: { auto number = lua_tonumber(L, idx); auto integer = lua_tointeger(L, idx); diff --git a/src/logic/scripting/lua/libcore.cpp b/src/logic/scripting/lua/libcore.cpp index bb4e57f3..1c27df20 100644 --- a/src/logic/scripting/lua/libcore.cpp +++ b/src/logic/scripting/lua/libcore.cpp @@ -13,6 +13,10 @@ #include #include +namespace scripting { + extern lua::LuaState* state; +} + static int l_get_worlds_list(lua_State* L) { auto paths = scripting::engine->getPaths(); auto worlds = paths->scanForWorlds(); @@ -66,6 +70,13 @@ static int l_get_bindings(lua_State* L) { return 1; } +static int l_get_setting(lua_State* L) { + auto name = lua_tostring(L, 1); + const auto value = scripting::engine->getSettingsHandler().getValue(name); + scripting::state->pushvalue(value); + return 1; +} + static int l_quit(lua_State* L) { Window::setShouldClose(true); return 0; @@ -77,6 +88,7 @@ const luaL_Reg corelib [] = { {"close_world", lua_wrap_errors}, {"delete_world", lua_wrap_errors}, {"get_bindings", lua_wrap_errors}, + {"get_setting", lua_wrap_errors}, {"quit", lua_wrap_errors}, {NULL, NULL} };