mirror of
https://github.com/FaceDeer/dfcaverns.git
synced 2025-02-03 14:00:25 +01:00
replace bloodthorn ABM with node timers, much more efficient.
This commit is contained in:
parent
edae8c1104
commit
d1620a6f39
@ -26,6 +26,9 @@ local blood_thorn_after_dig = function(pos, oldnode, oldmetadata, digger)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
local blood_thorn_min_delay = df_trees.config.blood_thorn_delay_multiplier*df_trees.config.tree_min_growth_delay
|
||||||
|
local blood_thorn_max_delay = df_trees.config.blood_thorn_delay_multiplier*df_trees.config.tree_max_growth_delay
|
||||||
|
|
||||||
minetest.register_node("df_trees:blood_thorn", {
|
minetest.register_node("df_trees:blood_thorn", {
|
||||||
description = S("Blood Thorn Stem"),
|
description = S("Blood Thorn Stem"),
|
||||||
_doc_items_longdesc = df_trees.doc.blood_thorn_desc,
|
_doc_items_longdesc = df_trees.doc.blood_thorn_desc,
|
||||||
@ -40,6 +43,35 @@ minetest.register_node("df_trees:blood_thorn", {
|
|||||||
is_ground_content = false,
|
is_ground_content = false,
|
||||||
on_place = minetest.rotate_node,
|
on_place = minetest.rotate_node,
|
||||||
after_dig_node = blood_thorn_after_dig,
|
after_dig_node = blood_thorn_after_dig,
|
||||||
|
|
||||||
|
on_construct = function(pos)
|
||||||
|
minetest.get_node_timer(pos):start(math.random(blood_thorn_min_delay, blood_thorn_max_delay))
|
||||||
|
end,
|
||||||
|
on_destruct = function(pos)
|
||||||
|
minetest.get_node_timer(pos):stop()
|
||||||
|
local below = {x=pos.x, y=pos.y-1, z=pos.z}
|
||||||
|
local below_node = minetest.get_node(below)
|
||||||
|
while below_node.name == "df_trees:blood_thorn" do
|
||||||
|
-- if you chop down a bloodthorn it can start growing again
|
||||||
|
minetest.get_node_timer(below):start(math.random(blood_thorn_min_delay, blood_thorn_max_delay))
|
||||||
|
below.y = below.y-1
|
||||||
|
below_node = minetest.get_node(below)
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
|
||||||
|
on_timer = function(pos, elapsed)
|
||||||
|
while elapsed > blood_thorn_max_delay do
|
||||||
|
-- catch up if the block was unloaded for a long time
|
||||||
|
elapsed = elapsed - blood_thorn_max_delay
|
||||||
|
if not df_trees.grow_blood_thorn(vector.new(pos), minetest.get_node(pos)) then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
end
|
||||||
|
if df_trees.grow_blood_thorn(vector.new(pos), minetest.get_node(pos)) then
|
||||||
|
minetest.get_node_timer(pos):start(math.random(blood_thorn_min_delay, blood_thorn_max_delay))
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
|
||||||
})
|
})
|
||||||
|
|
||||||
minetest.register_node("df_trees:blood_thorn_dead", {
|
minetest.register_node("df_trees:blood_thorn_dead", {
|
||||||
@ -222,15 +254,14 @@ function df_trees.grow_blood_thorn(pos, node)
|
|||||||
return true
|
return true
|
||||||
end
|
end
|
||||||
|
|
||||||
minetest.register_abm({
|
minetest.register_lbm({
|
||||||
label = "Grow Blood Thorn",
|
label = "Start timers for bloodthorn nodes that used to depend on the ABM",
|
||||||
|
name = "df_trees:start_bloodthorn_timers",
|
||||||
nodenames = {"df_trees:blood_thorn"},
|
nodenames = {"df_trees:blood_thorn"},
|
||||||
catch_up = true,
|
run_at_every_load = false,
|
||||||
interval = df_trees.config.blood_thorn_growth_interval,
|
|
||||||
chance = df_trees.config.blood_thorn_growth_chance,
|
|
||||||
action = function(pos, node)
|
action = function(pos, node)
|
||||||
df_trees.grow_blood_thorn(pos, node)
|
minetest.get_node_timer(pos):start(math.random(blood_thorn_min_delay, blood_thorn_max_delay))
|
||||||
end
|
end,
|
||||||
})
|
})
|
||||||
|
|
||||||
function df_trees.spawn_blood_thorn(pos)
|
function df_trees.spawn_blood_thorn(pos)
|
||||||
|
@ -31,6 +31,7 @@ local trees = {
|
|||||||
{name="nether_cap", delay_multiplier = 1},
|
{name="nether_cap", delay_multiplier = 1},
|
||||||
{name="goblin_cap", delay_multiplier = 1},
|
{name="goblin_cap", delay_multiplier = 1},
|
||||||
{name="tower_cap", delay_multiplier = 1},
|
{name="tower_cap", delay_multiplier = 1},
|
||||||
|
{name="blood_thorn", delay_multiplier = 1},
|
||||||
}
|
}
|
||||||
|
|
||||||
--Trees
|
--Trees
|
||||||
@ -42,9 +43,6 @@ for _, tree in pairs(trees) do
|
|||||||
setting("float", tree.name.."_delay_multiplier", tree.delay_multiplier, tree.name.." growth delay multiplier")
|
setting("float", tree.name.."_delay_multiplier", tree.delay_multiplier, tree.name.." growth delay multiplier")
|
||||||
end
|
end
|
||||||
|
|
||||||
setting("int", "blood_thorn_growth_interval", 12, "blood_thorn growth ABM interval")
|
|
||||||
setting("int", "blood_thorn_growth_chance", 83, "blood_thorn growth ABM chance")
|
|
||||||
|
|
||||||
if minetest.get_modpath("tnt") then
|
if minetest.get_modpath("tnt") then
|
||||||
df_trees.config.enable_tnt = minetest.settings:get_bool("enable_tnt")
|
df_trees.config.enable_tnt = minetest.settings:get_bool("enable_tnt")
|
||||||
if df_trees.config.enable_tnt == nil then
|
if df_trees.config.enable_tnt == nil then
|
||||||
|
@ -7,5 +7,4 @@ dfcaverns_black_cap_delay_multiplier (black_cap growth delay multiplier) float 1
|
|||||||
dfcaverns_nether_cap_delay_multiplier (nether_cap growth delay multiplier) float 1
|
dfcaverns_nether_cap_delay_multiplier (nether_cap growth delay multiplier) float 1
|
||||||
dfcaverns_goblin_cap_delay_multiplier (goblin_cap growth delay multiplier) float 1
|
dfcaverns_goblin_cap_delay_multiplier (goblin_cap growth delay multiplier) float 1
|
||||||
dfcaverns_tower_cap_delay_multiplier (tower_cap growth delay multiplier) float 1
|
dfcaverns_tower_cap_delay_multiplier (tower_cap growth delay multiplier) float 1
|
||||||
dfcaverns_blood_thorn_growth_interval (blood_thorn growth ABM interval) int 12
|
dfcaverns_blood_thorn_delay_multiplier (tower_cap growth delay multiplier) float 1
|
||||||
dfcaverns_blood_thorn_growth_chance (blood_thorn growth ABM chance) int 83
|
|
Loading…
Reference in New Issue
Block a user