-- LUALOCALS < --------------------------------------------------------- local math, nodecore, pairs, table, vector = math, nodecore, pairs, table, vector local math_random, table_sort = math.random, table.sort -- LUALOCALS > --------------------------------------------------------- local settleorder = {} local groups = {} local keys = {} for x = -5, 5 do for y = -5, 5 do for z = -5, 5 do local p = { x = x, y = y, z = z, } local d = vector.length(p) if d <= 5 then p.v = d + p.y / 100 local g = groups[p.v] if not g then g = {} groups[p.v] = g keys[#keys + 1] = p.v end g[#g + 1] = p end end end end table_sort(keys) for _, k in pairs(keys) do local stamp = 0 local t = groups[k] settleorder[#settleorder + 1] = function() if stamp == nodecore.gametime then return t end local n = #t if n < 2 then return t end for i = 1, n do local j = math_random(1, n) local x = t[i] t[i] = t[j] t[j] = x end stamp = nodecore.gametime return t end end function nodecore.settlescan() local i = 0 local grp = {} local j = 0 return function() if j >= #grp then if i >= #settleorder then return end i = i + 1 grp = settleorder[i]() j = 0 end j = j + 1 return grp[j] end end