diff --git a/.luacheckrc b/.luacheckrc index e010ab95c..a922bdea9 100644 --- a/.luacheckrc +++ b/.luacheckrc @@ -20,7 +20,7 @@ read_globals = { string = {fields = {"split", "trim"}}, table = {fields = {"copy", "getn", "indexof", "insert_all"}}, - math = {fields = {"hypot"}}, + math = {fields = {"hypot", "round"}}, } globals = { diff --git a/builtin/common/misc_helpers.lua b/builtin/common/misc_helpers.lua index 0f3897f47..d5f25f2fe 100644 --- a/builtin/common/misc_helpers.lua +++ b/builtin/common/misc_helpers.lua @@ -244,6 +244,15 @@ function math.factorial(x) return v 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 d333ca58b..8a8f57eb3 100644 --- a/doc/lua_api.txt +++ b/doc/lua_api.txt @@ -3163,6 +3163,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. @@ -3237,6 +3238,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`