From faaff0d777d482f6378407289125c2bf32d7e1d9 Mon Sep 17 00:00:00 2001 From: Vincent Robinson Date: Thu, 1 Apr 2021 15:18:58 -0700 Subject: [PATCH] Add `math.round` and fix `vector.round` (#10803) --- .luacheckrc | 82 +++++++++++++++++++++++++++++++++ builtin/common/misc_helpers.lua | 9 ++++ builtin/common/vector.lua | 6 +-- doc/lua_api.txt | 3 ++ 4 files changed, 97 insertions(+), 3 deletions(-) create mode 100644 .luacheckrc diff --git a/.luacheckrc b/.luacheckrc new file mode 100644 index 000000000..a922bdea9 --- /dev/null +++ b/.luacheckrc @@ -0,0 +1,82 @@ +unused_args = false +allow_defined_top = true + +ignore = { + "131", -- Unused global variable + "431", -- Shadowing an upvalue + "432", -- Shadowing an upvalue argument +} + +read_globals = { + "ItemStack", + "INIT", + "DIR_DELIM", + "dump", "dump2", + "fgettext", "fgettext_ne", + "vector", + "VoxelArea", + "profiler", + "Settings", + + string = {fields = {"split", "trim"}}, + table = {fields = {"copy", "getn", "indexof", "insert_all"}}, + math = {fields = {"hypot", "round"}}, +} + +globals = { + "core", + "gamedata", + os = { fields = { "tempfolder" } }, + "_", +} + +files["builtin/client/register.lua"] = { + globals = { + debug = {fields={"getinfo"}}, + } +} + +files["builtin/common/misc_helpers.lua"] = { + globals = { + "dump", "dump2", "table", "math", "string", + "fgettext", "fgettext_ne", "basic_dump", "game", -- ??? + "file_exists", "get_last_folder", "cleanup_path", -- ??? + }, +} + +files["builtin/common/vector.lua"] = { + globals = { "vector" }, +} + +files["builtin/game/voxelarea.lua"] = { + globals = { "VoxelArea" }, +} + +files["builtin/game/init.lua"] = { + globals = { "profiler" }, +} + +files["builtin/common/filterlist.lua"] = { + globals = { + "filterlist", + "compare_worlds", "sort_worlds_alphabetic", "sort_mod_list", -- ??? + }, +} + +files["builtin/mainmenu"] = { + globals = { + "gamedata", + }, + + read_globals = { + "PLATFORM", + }, +} + +files["builtin/common/tests"] = { + read_globals = { + "describe", + "it", + "assert", + }, +} diff --git a/builtin/common/misc_helpers.lua b/builtin/common/misc_helpers.lua index 232586327..b248a2294 100644 --- a/builtin/common/misc_helpers.lua +++ b/builtin/common/misc_helpers.lua @@ -295,6 +295,15 @@ function cleanup_path(temppath) return temppath end + +function math.round(x) + if x >= 0 then + return math.floor(x + 0.5) + end + return math.ceil(x - 0.5) +end + + function core.formspec_escape(text) if text ~= nil then text = string.gsub(text,"\\","\\\\") diff --git a/builtin/common/vector.lua b/builtin/common/vector.lua index d6437deda..b04c12610 100644 --- a/builtin/common/vector.lua +++ b/builtin/common/vector.lua @@ -41,9 +41,9 @@ end function vector.round(v) return { - x = math.floor(v.x + 0.5), - y = math.floor(v.y + 0.5), - z = math.floor(v.z + 0.5) + x = math.round(v.x), + y = math.round(v.y), + z = math.round(v.z) } end diff --git a/doc/lua_api.txt b/doc/lua_api.txt index 9479503d9..0d5fe5914 100644 --- a/doc/lua_api.txt +++ b/doc/lua_api.txt @@ -2392,6 +2392,7 @@ For the following functions, `v`, `v1`, `v2` are vectors, * Returns a vector, each dimension rounded down. * `vector.round(v)`: * Returns a vector, each dimension rounded to nearest integer. + * At a multiple of 0.5, rounds away from zero. * `vector.apply(v, func)`: * Returns a vector where the function `func` has been applied to each component. @@ -2464,6 +2465,8 @@ Helper functions * If the absolute value of `x` is within the `tolerance` or `x` is NaN, `0` is returned. * `math.factorial(x)`: returns the factorial of `x` +* `math.round(x)`: Returns `x` rounded to the nearest integer. + * At a multiple of 0.5, rounds away from zero. * `string.split(str, separator, include_empty, max_splits, sep_is_pattern)` * `separator`: string, default: `","` * `include_empty`: boolean, default: `false`