a325c2ccd8
and improve lag management minetest.conf settings added: biome_lib_dtime_limit: Maximum lag allowed, in seconds. Default 0.5s. Larger values allow for more lag, but make map updates run a bit faster. biome_lib_queue_run_ratio: If positive, this is the approximate number of globalstep ticks to skip between map updates. If negative, it becomes the positive number of map updates to run per globalstep tick before lag is checked. No minimum value, maximum +100. Default: -100 (that is, 100 updates per globalstep tick, with none intentionally skipped). Use positive numbers for slow machines or biome_lib-using mods that tend to cause lag, and negative values for fast machines and mods.
73 lines
2.8 KiB
Lua
73 lines
2.8 KiB
Lua
|
|
-- function to decide if a node has a wall that's in verticals_list{}
|
|
-- returns wall direction of valid node, or nil if invalid.
|
|
|
|
function biome_lib:find_adjacent_wall(pos, verticals, randomflag)
|
|
local verts = dump(verticals)
|
|
if randomflag then
|
|
local walltab = {}
|
|
|
|
if string.find(verts, minetest.get_node({ x=pos.x-1, y=pos.y, z=pos.z }).name) then walltab[#walltab + 1] = 3 end
|
|
if string.find(verts, minetest.get_node({ x=pos.x+1, y=pos.y, z=pos.z }).name) then walltab[#walltab + 1] = 2 end
|
|
if string.find(verts, minetest.get_node({ x=pos.x , y=pos.y, z=pos.z-1 }).name) then walltab[#walltab + 1] = 5 end
|
|
if string.find(verts, minetest.get_node({ x=pos.x , y=pos.y, z=pos.z+1 }).name) then walltab[#walltab + 1] = 4 end
|
|
|
|
if #walltab > 0 then return walltab[math.random(1, #walltab)] end
|
|
|
|
else
|
|
if string.find(verts, minetest.get_node({ x=pos.x-1, y=pos.y, z=pos.z }).name) then return 3 end
|
|
if string.find(verts, minetest.get_node({ x=pos.x+1, y=pos.y, z=pos.z }).name) then return 2 end
|
|
if string.find(verts, minetest.get_node({ x=pos.x , y=pos.y, z=pos.z-1 }).name) then return 5 end
|
|
if string.find(verts, minetest.get_node({ x=pos.x , y=pos.y, z=pos.z+1 }).name) then return 4 end
|
|
end
|
|
return nil
|
|
end
|
|
|
|
-- Function to search downward from the given position, looking for the first
|
|
-- node that matches the ground table. Returns the new position, or nil if
|
|
-- height limit is exceeded before finding it.
|
|
|
|
function biome_lib:search_downward(pos, heightlimit, ground)
|
|
for i = 0, heightlimit do
|
|
if string.find(dump(ground), minetest.get_node({x=pos.x, y=pos.y-i, z = pos.z}).name) then
|
|
return {x=pos.x, y=pos.y-i, z = pos.z}
|
|
end
|
|
end
|
|
return false
|
|
end
|
|
|
|
function biome_lib:find_open_side(pos)
|
|
if minetest.get_node({ x=pos.x-1, y=pos.y, z=pos.z }).name == "air" then
|
|
return {newpos = { x=pos.x-1, y=pos.y, z=pos.z }, facedir = 2}
|
|
end
|
|
if minetest.get_node({ x=pos.x+1, y=pos.y, z=pos.z }).name == "air" then
|
|
return {newpos = { x=pos.x+1, y=pos.y, z=pos.z }, facedir = 3}
|
|
end
|
|
if minetest.get_node({ x=pos.x, y=pos.y, z=pos.z-1 }).name == "air" then
|
|
return {newpos = { x=pos.x, y=pos.y, z=pos.z-1 }, facedir = 4}
|
|
end
|
|
if minetest.get_node({ x=pos.x, y=pos.y, z=pos.z+1 }).name == "air" then
|
|
return {newpos = { x=pos.x, y=pos.y, z=pos.z+1 }, facedir = 5}
|
|
end
|
|
return nil
|
|
end
|
|
|
|
-- "Record" the map chunks being generated by the core mapgen,
|
|
-- split into individual mapblocks to reduce lag
|
|
|
|
minetest.register_on_generated(function(minp, maxp, blockseed)
|
|
for x = 0, 4 do
|
|
local minx = minp.x + x*16
|
|
for y = 0, 4 do
|
|
local miny = minp.y + y*16
|
|
for z = 0, 4 do
|
|
local minz = minp.z + z*16
|
|
|
|
local bmin = {x=minx, y=miny, z=minz}
|
|
local bmax = {x=minx + 15, y=miny + 15, z=minz + 15}
|
|
biome_lib.block_log[#biome_lib.block_log + 1] = { bmin, bmax, true }
|
|
end
|
|
end
|
|
end
|
|
end)
|