aboutsummaryrefslogtreecommitdiff
path: root/builtin/game
diff options
context:
space:
mode:
authorSmallJoker <SmallJoker@users.noreply.github.com>2018-02-25 12:25:39 +0100
committerGitHub <noreply@github.com>2018-02-25 12:25:39 +0100
commit66372e75d9b584fbb3b3fbce0de572585dd86dca (patch)
treea6eddfb278f2f51b443cbb235e79e8788adf8434 /builtin/game
parent4118e150f8841a507e3fcb546902d1e07150e4a2 (diff)
downloadminetest-66372e75d9b584fbb3b3fbce0de572585dd86dca.tar.gz
minetest-66372e75d9b584fbb3b3fbce0de572585dd86dca.tar.bz2
minetest-66372e75d9b584fbb3b3fbce0de572585dd86dca.zip
is_area_protected: Rename from intersects_protection (#7073)
* is_area_protected: Rename from intersects_protection Return first protected position Clarify docs: Mods may overwrite the function
Diffstat (limited to 'builtin/game')
-rw-r--r--builtin/game/misc.lua20
1 files changed, 12 insertions, 8 deletions
diff --git a/builtin/game/misc.lua b/builtin/game/misc.lua
index 6e54dad5e..2e05cdc41 100644
--- a/builtin/game/misc.lua
+++ b/builtin/game/misc.lua
@@ -175,7 +175,7 @@ end
-- Checks if specified volume intersects a protected volume
-function core.intersects_protection(minp, maxp, player_name, interval)
+function core.is_area_protected(minp, maxp, player_name, interval)
-- 'interval' is the largest allowed interval for the 3D lattice of checks.
-- Compute the optimal float step 'd' for each axis so that all corners and
@@ -188,14 +188,18 @@ function core.intersects_protection(minp, maxp, player_name, interval)
local d = {}
for _, c in pairs({"x", "y", "z"}) do
+ if minp[c] > maxp[c] then
+ -- Repair positions: 'minp' > 'maxp'
+ local tmp = maxp[c]
+ maxp[c] = minp[c]
+ minp[c] = tmp
+ end
+
if maxp[c] > minp[c] then
d[c] = (maxp[c] - minp[c]) /
math.ceil((maxp[c] - minp[c]) / interval) - 1e-4
- elseif maxp[c] == minp[c] then
+ else
d[c] = 1 -- Any value larger than 0 to avoid division by zero
- else -- maxp[c] < minp[c], print error and treat as protection intersected
- minetest.log("error", "maxp < minp in 'minetest.intersects_protection()'")
- return true
end
end
@@ -205,13 +209,13 @@ function core.intersects_protection(minp, maxp, player_name, interval)
local y = math.floor(yf + 0.5)
for xf = minp.x, maxp.x, d.x do
local x = math.floor(xf + 0.5)
- if core.is_protected({x = x, y = y, z = z}, player_name) then
- return true
+ local pos = {x = x, y = y, z = z}
+ if core.is_protected(pos, player_name) then
+ return pos
end
end
end
end
-
return false
end