forked from Mineclonia/Mineclonia
Compare commits
1 Commits
master
...
add-podzol
Author | SHA1 | Date |
---|---|---|
Nils Dagsson Moskopp | 6059b79785 |
|
@ -585,6 +585,69 @@ mcl_core.generate_spruce_tree = function(pos)
|
|||
minetest.place_schematic({ x = pos.x - 3, y = pos.y - 1, z = pos.z - 3 }, path, "0", nil, false)
|
||||
end
|
||||
|
||||
local vector_distance_xz = function(a, b)
|
||||
return vector.distance(
|
||||
{ x=a.x, y=0, z=a.z },
|
||||
{ x=b.x, y=0, z=b.z }
|
||||
)
|
||||
end
|
||||
|
||||
local podzol_spread_randomizer = PseudoRandom(minetest.get_mapgen_setting("seed"))
|
||||
|
||||
local generate_spruce_podzol = function(pos)
|
||||
local podzol_positions = {}
|
||||
local podzol_positions_xz = {}
|
||||
local add_podzol = function(position)
|
||||
podzol_positions[#podzol_positions+1] = position
|
||||
local x,z = position.x, position.z
|
||||
if nil == podzol_positions_xz[x] then
|
||||
podzol_positions_xz[x] = {}
|
||||
end
|
||||
podzol_positions_xz[x][z] = true
|
||||
end
|
||||
-- add podzol under tree
|
||||
add_podzol( { x=pos.x+0, y=pos.y, z=pos.z+0 } )
|
||||
add_podzol( { x=pos.x+0, y=pos.y, z=pos.z+1 } )
|
||||
add_podzol( { x=pos.x+1, y=pos.y, z=pos.z+0 } )
|
||||
add_podzol( { x=pos.x+1, y=pos.y, z=pos.z+1 } )
|
||||
local corner_1 = { x=pos.x-5, y=pos.y-3, z=pos.z-5 }
|
||||
local corner_2 = { x=pos.x+5, y=pos.y+3, z=pos.z+5 }
|
||||
local dirt_positions = minetest.find_nodes_in_area_under_air(
|
||||
corner_1,
|
||||
corner_2,
|
||||
{ "group:dirt" }
|
||||
)
|
||||
-- sort dirt positions according to distance from origin
|
||||
table.sort(
|
||||
dirt_positions,
|
||||
function(a, b)
|
||||
return vector_distance_xz(pos, a) < vector_distance_xz(pos, b)
|
||||
end
|
||||
)
|
||||
-- spread podzol
|
||||
for j=1, #dirt_positions do
|
||||
local dirt_position = dirt_positions[j]
|
||||
local distance = math.ceil(vector_distance_xz(pos, dirt_position) + 0.5)
|
||||
local k = podzol_spread_randomizer:next(0, distance)
|
||||
local x, z = dirt_position.x, dirt_position.z
|
||||
if (
|
||||
k < (10 - distance) and
|
||||
not (podzol_positions_xz[x] and podzol_positions_xz[x][z]) and (
|
||||
podzol_positions_xz[x] and podzol_positions_xz[x][z-1] or
|
||||
podzol_positions_xz[x] and podzol_positions_xz[x][z+1] or
|
||||
podzol_positions_xz[x-1] and podzol_positions_xz[x-1][z] or
|
||||
podzol_positions_xz[x+1] and podzol_positions_xz[x+1][z]
|
||||
)
|
||||
) then
|
||||
add_podzol(dirt_position)
|
||||
end
|
||||
end
|
||||
minetest.bulk_set_node(
|
||||
podzol_positions,
|
||||
{ name = "mcl_core:podzol" }
|
||||
)
|
||||
end
|
||||
|
||||
mcl_core.generate_huge_spruce_tree = function(pos)
|
||||
local r1 = math.random(1, 2)
|
||||
local r2 = math.random(1, 4)
|
||||
|
@ -601,6 +664,14 @@ mcl_core.generate_huge_spruce_tree = function(pos)
|
|||
path = minetest.get_modpath("mcl_core") .. "/schematics/mcl_core_spruce_huge_up_"..r2..".mts"
|
||||
end
|
||||
minetest.place_schematic(vector.add(pos, offset), path, "0", nil, false)
|
||||
generate_spruce_podzol(
|
||||
-- position under +x/+z sapling
|
||||
{
|
||||
x = pos.x + offset.x + 4,
|
||||
y = pos.y - 1,
|
||||
z = pos.z + offset.z + 4
|
||||
}
|
||||
)
|
||||
end
|
||||
|
||||
-- END of spruce tree functions --
|
||||
|
|
Loading…
Reference in New Issue