aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.luacheckrc2
-rw-r--r--builtin/common/misc_helpers.lua9
-rw-r--r--builtin/common/vector.lua6
-rw-r--r--doc/lua_api.txt3
4 files changed, 16 insertions, 4 deletions
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`