7d29907ab2
- Clean up utils into multiple files. - Standardize limited ABM. - Standardize debug trace handling. Instead of using chat_send_all to debug, and then having to remember to remove before release, allow privileged players to receive all server debug messages.
42 lines
1.0 KiB
Lua
42 lines
1.0 KiB
Lua
-- LUALOCALS < ---------------------------------------------------------
|
|
local ipairs, math, minetest, next, nodecore, pairs, table
|
|
= ipairs, math, minetest, next, nodecore, pairs, table
|
|
local math_random, table_insert
|
|
= math.random, table.insert
|
|
-- LUALOCALS > ---------------------------------------------------------
|
|
|
|
local dirs = nodecore.dirs()
|
|
|
|
function nodecore.scan_flood(pos, range, func)
|
|
local q = {pos}
|
|
local seen = { }
|
|
for d = 0, range do
|
|
local next = {}
|
|
for i, p in ipairs(q) do
|
|
local res = func(p)
|
|
if res then return res end
|
|
if res == nil then
|
|
for k, v in pairs(dirs) do
|
|
local np = {
|
|
x = p.x + v.x,
|
|
y = p.y + v.y,
|
|
z = p.z + v.z
|
|
}
|
|
local nk = minetest.hash_node_position(np)
|
|
if not seen[nk] then
|
|
seen[nk] = true
|
|
np.dir = v
|
|
table_insert(next, np)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
if #next < 1 then break end
|
|
for i = 1, #next do
|
|
local j = math_random(1, #next)
|
|
next[i], next[j] = next[j], next[i]
|
|
end
|
|
q = next
|
|
end
|
|
end
|