forked from minetest-mods/technic
Make Rubber tree using L-Systems
This commit is contained in:
parent
67c0d2834d
commit
23e1d8e0ca
@ -51,7 +51,7 @@ minetest.register_abm({
|
|||||||
minetest.register_node("technic:rubber_leaves", {
|
minetest.register_node("technic:rubber_leaves", {
|
||||||
drawtype = "allfaces_optional",
|
drawtype = "allfaces_optional",
|
||||||
visual_scale = 1.3,
|
visual_scale = 1.3,
|
||||||
tiles = {"default_leaves.png"},
|
tiles = {"technic_rubber_leaves.png"},
|
||||||
paramtype = "light",
|
paramtype = "light",
|
||||||
groups = {snappy=3, leafdecay=3, flammable=2, not_in_creative_inventory=1},
|
groups = {snappy=3, leafdecay=3, flammable=2, not_in_creative_inventory=1},
|
||||||
drop = {
|
drop = {
|
||||||
@ -71,7 +71,20 @@ minetest.register_abm({
|
|||||||
interval = 60,
|
interval = 60,
|
||||||
chance = 20,
|
chance = 20,
|
||||||
action = function(pos, node)
|
action = function(pos, node)
|
||||||
generate_tree(pos, "technic:rubber_tree_full", "technic:rubber_leaves", {"default:dirt", "default:dirt_with_grass"})
|
rubber_tree={
|
||||||
|
axiom="FFFFA",
|
||||||
|
rules_a="[&FFBFA]////[&BFFFA]////[&FBFFA]",
|
||||||
|
rules_b="[&FFA]////[&FFA]////[&FFA]",
|
||||||
|
trunk="technic:rubber_tree_full",
|
||||||
|
leaves="technic:rubber_leaves",
|
||||||
|
angle=35,
|
||||||
|
iterations=3,
|
||||||
|
random_level=1,
|
||||||
|
thin_trunks=false;
|
||||||
|
fruit_tree=false,
|
||||||
|
fruit=""
|
||||||
|
}
|
||||||
|
minetest.env:spawn_tree(pos,rubber_tree)
|
||||||
end
|
end
|
||||||
})
|
})
|
||||||
|
|
||||||
@ -82,7 +95,20 @@ minetest.register_on_generated(function(minp, maxp, blockseed)
|
|||||||
local tmp = {x=(maxp.x-minp.x)/2+minp.x, y=(maxp.y-minp.y)/2+minp.y, z=(maxp.z-minp.z)/2+minp.z}
|
local tmp = {x=(maxp.x-minp.x)/2+minp.x, y=(maxp.y-minp.y)/2+minp.y, z=(maxp.z-minp.z)/2+minp.z}
|
||||||
local pos = minetest.env:find_node_near(tmp, maxp.x-minp.x, {"default:dirt_with_grass"})
|
local pos = minetest.env:find_node_near(tmp, maxp.x-minp.x, {"default:dirt_with_grass"})
|
||||||
if pos ~= nil then
|
if pos ~= nil then
|
||||||
generate_tree({x=pos.x, y=pos.y+1, z=pos.z}, "technic:rubber_tree_full", "technic:rubber_leaves", {"default:dirt", "default:dirt_with_grass"})
|
rubber_tree={
|
||||||
|
axiom="FFFFA",
|
||||||
|
rules_a="[&FFBFA]////[&BFFFA]////[&FBFFA]",
|
||||||
|
rules_b="[&FFA]////[&FFA]////[&FFA]",
|
||||||
|
trunk="technic:rubber_tree_full",
|
||||||
|
leaves="technic:rubber_leaves",
|
||||||
|
angle=35,
|
||||||
|
iterations=3,
|
||||||
|
random_level=1,
|
||||||
|
thin_trunks=false;
|
||||||
|
fruit_tree=false,
|
||||||
|
fruit=""
|
||||||
|
}
|
||||||
|
minetest.env:spawn_tree({x=pos.x, y=pos.y+1, z=pos.z},rubber_tree)
|
||||||
end
|
end
|
||||||
end)
|
end)
|
||||||
|
|
||||||
@ -93,94 +119,3 @@ minetest.register_craft({
|
|||||||
recipe = "technic:rubber_sapling",
|
recipe = "technic:rubber_sapling",
|
||||||
burntime = 10
|
burntime = 10
|
||||||
})
|
})
|
||||||
|
|
||||||
function generate_tree(pos, trunk, leaves, underground, replacements)
|
|
||||||
pos.y = pos.y-1
|
|
||||||
local nodename = minetest.env:get_node(pos).name
|
|
||||||
local ret = true
|
|
||||||
for _,name in ipairs(underground) do
|
|
||||||
if nodename == name then
|
|
||||||
ret = false
|
|
||||||
break
|
|
||||||
end
|
|
||||||
end
|
|
||||||
pos.y = pos.y+1
|
|
||||||
if ret or minetest.env:get_node_light(pos) < 8 then
|
|
||||||
return
|
|
||||||
end
|
|
||||||
|
|
||||||
node = {name = ""}
|
|
||||||
for dy=1,4 do
|
|
||||||
pos.y = pos.y+dy
|
|
||||||
if minetest.env:get_node(pos).name ~= "air" then
|
|
||||||
return
|
|
||||||
end
|
|
||||||
pos.y = pos.y-dy
|
|
||||||
end
|
|
||||||
node.name = trunk
|
|
||||||
for dy=0,4 do
|
|
||||||
pos.y = pos.y+dy
|
|
||||||
minetest.env:set_node(pos, node)
|
|
||||||
pos.y = pos.y-dy
|
|
||||||
end
|
|
||||||
|
|
||||||
if not replacements then
|
|
||||||
replacements = {}
|
|
||||||
end
|
|
||||||
|
|
||||||
node.name = leaves
|
|
||||||
pos.y = pos.y+3
|
|
||||||
for dx=-2,2 do
|
|
||||||
for dz=-2,2 do
|
|
||||||
for dy=0,3 do
|
|
||||||
pos.x = pos.x+dx
|
|
||||||
pos.y = pos.y+dy
|
|
||||||
pos.z = pos.z+dz
|
|
||||||
|
|
||||||
if dx == 0 and dz == 0 and dy==3 then
|
|
||||||
if minetest.env:get_node(pos).name == "air" and math.random(1, 5) <= 4 then
|
|
||||||
minetest.env:set_node(pos, node)
|
|
||||||
for name,rarity in pairs(replacements) do
|
|
||||||
if math.random(1, rarity) == 1 then
|
|
||||||
minetest.env:set_node(pos, {name=name})
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
elseif dx == 0 and dz == 0 and dy==4 then
|
|
||||||
if minetest.env:get_node(pos).name == "air" and math.random(1, 5) <= 4 then
|
|
||||||
minetest.env:set_node(pos, node)
|
|
||||||
for name,rarity in pairs(replacements) do
|
|
||||||
if math.random(1, rarity) == 1 then
|
|
||||||
minetest.env:set_node(pos, {name=name})
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
elseif math.abs(dx) ~= 2 and math.abs(dz) ~= 2 then
|
|
||||||
if minetest.env:get_node(pos).name == "air" then
|
|
||||||
minetest.env:set_node(pos, node)
|
|
||||||
for name,rarity in pairs(replacements) do
|
|
||||||
if math.random(1, rarity) == 1 then
|
|
||||||
minetest.env:set_node(pos, {name=name})
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
else
|
|
||||||
if math.abs(dx) ~= 2 or math.abs(dz) ~= 2 then
|
|
||||||
if minetest.env:get_node(pos).name == "air" and math.random(1, 5) <= 4 then
|
|
||||||
minetest.env:set_node(pos, node)
|
|
||||||
for name,rarity in pairs(replacements) do
|
|
||||||
if math.random(1, rarity) == 1 then
|
|
||||||
minetest.env:set_node(pos, {name=name})
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
pos.x = pos.x-dx
|
|
||||||
pos.y = pos.y-dy
|
|
||||||
pos.z = pos.z-dz
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
BIN
technic/technic/textures/technic_rubber_leaves.png
Normal file
BIN
technic/technic/textures/technic_rubber_leaves.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 444 B |
Loading…
Reference in New Issue
Block a user