fixed leaf decay to work with seasons

master
Izzy 2018-04-24 22:08:34 -06:00
parent 1f492b80a5
commit aefc9cec0b
3 changed files with 85 additions and 21 deletions

View File

@ -343,9 +343,11 @@ end
-- Leafdecay
-- for trunks
local function leafdecay_after_destruct(pos, oldnode, def)
for _, v in pairs(minetest.find_nodes_in_area(vector.subtract(pos, def.radius),
vector.add(pos, def.radius), def.leaves)) do
local function leafdecay_after_destruct(pos, oldnode, trunk)
local radius = default._leafdecay.radii[trunk]
local leaves = default._leafdecay.by_trunk[trunk]
for _, v in pairs(minetest.find_nodes_in_area(vector.subtract(pos, radius),
vector.add(pos, radius), leaves)) do
local node = minetest.get_node(v)
local timer = minetest.get_node_timer(v)
if node.param2 == 0 and not timer:is_started() then
@ -355,8 +357,10 @@ local function leafdecay_after_destruct(pos, oldnode, def)
end
-- for leaves
local function leafdecay_on_timer(pos, def)
if minetest.find_node_near(pos, def.radius, def.trunks) then
local function leafdecay_on_timer(pos, leaf)
local radius = default._leafdecay.radii[leaf]
local trunks = default._leafdecay.by_leaf[leaf]
if minetest.find_node_near(pos, radius, trunks) then
return false
end
@ -364,10 +368,8 @@ local function leafdecay_on_timer(pos, def)
local drops = minetest.get_node_drops(node.name)
for _, item in ipairs(drops) do
local is_leaf
for _, v in pairs(def.leaves) do
if v == item then
is_leaf = true
end
if default._leafdecay.by_leaf[item] then
is_leaf = true
end
if minetest.get_item_group(item, "leafdecay_drop") ~= 0 or
not is_leaf then
@ -383,23 +385,54 @@ local function leafdecay_on_timer(pos, def)
minetest.check_for_falling(pos)
end
default._leafdecay = {
by_trunk = {},
by_leaf = {},
radii = {},
}
function concat(t1,t2)
for i=1, #t2 do
t1[#t1+1] = t2[i]
end
return t1
end
function default.register_leafdecay(def)
assert(def.leaves)
assert(def.trunks)
assert(def.radius)
for _, v in pairs(def.trunks) do
minetest.override_item(v, {
after_destruct = function(pos, oldnode)
leafdecay_after_destruct(pos, oldnode, def)
end,
})
-- only override the trunk once
if default._leafdecay.by_trunk[v] == nil then
minetest.override_item(v, {
after_destruct = function(pos, oldnode)
leafdecay_after_destruct(pos, oldnode, v)
end,
})
default._leafdecay.radii[v] = def.radius
default._leafdecay.by_trunk[v] = {}
end
concat(default._leafdecay.by_trunk[v], def.leaves)
end
for _, v in pairs(def.leaves) do
minetest.override_item(v, {
on_timer = function(pos)
leafdecay_on_timer(pos, def)
end,
})
-- only override each leaf once
if default._leafdecay.by_leaf[v] == nil then
minetest.override_item(v, {
on_timer = function(pos)
leafdecay_on_timer(pos, v)
end,
})
default._leafdecay.radii[v] = def.radius
default._leafdecay.by_leaf[v] = {}
end
concat(default._leafdecay.by_leaf[v], def.trunks)
end
end

View File

@ -139,8 +139,26 @@ reg_generic("default", "bush_leaves", {
nil)
reg_generic("default", "jungleleaves", nil, nil)
default.register_leafdecay({
trunks = {"default:live_jungletree"},
leaves = {
"seasons:winter_default_jungleleaves",
"seasons:fall_default_jungleleaves",
"seasons:spring_default_jungleleaves",
},
radius = 2,
})
reg_generic("default", "acacia_leaves", nil, nil)
default.register_leafdecay({
trunks = {"default:acacia_tree"},
leaves = {
"seasons:winter_default_acacia_leaves",
"seasons:fall_default_acacia_leaves",
"seasons:spring_default_acacia_leaves",
},
radius = 2,
})
--[[
saplings
@ -193,6 +211,12 @@ function reg_leaves(ssn)
after_place_node = default.after_place_leaves,
})
default.register_leafdecay({
trunks = {"default:live_tree", "default:tree"},
leaves = {"seasons:"..ssn.."_default_leaves"},
radius = 2,
})
end
reg_leaves("spring")
reg_leaves("fall")
@ -223,6 +247,12 @@ function reg_aspen_leaves(ssn)
after_place_node = default.after_place_leaves,
})
default.register_leafdecay({
trunks = {"default:aspen_tree"},
leaves = {"seasons:"..ssn.."_default_aspen_leaves"},
radius = 3,
})
end
reg_aspen_leaves("spring")

3
todo
View File

@ -57,7 +57,7 @@ have to breed maize
wood processing machine
farming checks season and cold to grow
nodes:
@ -65,3 +65,4 @@ nodes:
copper pot
copper kettle
corn
mousetrap