mirror of
https://github.com/sys4-fr/server-nalc.git
synced 2025-12-08 12:05:29 +01:00
Updated plantlife
This commit is contained in:
@@ -1,44 +1,64 @@
|
||||
-- helper functions
|
||||
|
||||
local function process_blossom_queue_item()
|
||||
local pos = nature.blossomqueue[1][1]
|
||||
local node = nature.blossomqueue[1][2]
|
||||
local replace = nature.blossomqueue[1][3]
|
||||
if (nature.blossomqueue[1][3] == nature.blossom_node and not nature:is_near_water(pos)) then
|
||||
table.remove(nature.blossomqueue, 1) -- don't grow if it's not near water, pop from queue.
|
||||
return
|
||||
end
|
||||
nature:grow_node(pos, replace) -- now actually grow it.
|
||||
table.remove(nature.blossomqueue, 1)
|
||||
end
|
||||
|
||||
minetest.register_globalstep(function(dtime)
|
||||
nature.dtime = dtime
|
||||
if #nature.blossomqueue > 0 and dtime < 0.2 then
|
||||
local pos = nature.blossomqueue[1][1]
|
||||
local node = nature.blossomqueue[1][2]
|
||||
if (nature.blossomqueue[1][3] and not nature:is_near_water(pos)) then
|
||||
table.remove(nature.blossomqueue, 1) -- don't grow if it's not near water, pop from queue.
|
||||
return
|
||||
local i = 1
|
||||
if dtime < 0.1 then
|
||||
i = i + 4
|
||||
end
|
||||
if dtime < 0.05 then
|
||||
i = i + 10
|
||||
end
|
||||
while #nature.blossomqueue > 0 and i > 0 do
|
||||
process_blossom_queue_item()
|
||||
i = i - 1
|
||||
end
|
||||
nature:grow_node(pos, nature.blossom_node) -- now actually grow it.
|
||||
table.remove(nature.blossomqueue, 1)
|
||||
end
|
||||
end)
|
||||
|
||||
function nature.enqueue_node(pos, node, fcn)
|
||||
function nature.enqueue_node(pos, node, replace)
|
||||
local idx = #nature.blossomqueue
|
||||
nature.blossomqueue[idx+1] = {}
|
||||
nature.blossomqueue[idx+1][1] = pos
|
||||
nature.blossomqueue[idx+1][2] = node
|
||||
nature.blossomqueue[idx+1][3] = fcn
|
||||
if idx < nature.blossomqueue_max then
|
||||
local enqueue_prob = 0
|
||||
if idx < nature.blossomqueue_max * 0.8 then
|
||||
enqueue_prob = 1
|
||||
else
|
||||
-- Reduce queue growth as it gets closer to its max.
|
||||
enqueue_prob = 1 - (idx - nature.blossomqueue_max * 0.8) / (nature.blossomqueue_max * 0.2)
|
||||
end
|
||||
if enqueue_prob == 1 or math.random(100) <= 100 * enqueue_prob then
|
||||
nature.blossomqueue[idx+1] = {}
|
||||
nature.blossomqueue[idx+1][1] = pos
|
||||
nature.blossomqueue[idx+1][2] = node
|
||||
nature.blossomqueue[idx+1][3] = replace
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
local function set_young_node(pos)
|
||||
local meta = minetest.get_meta(pos)
|
||||
|
||||
meta:set_string(nature.node_young, nature.setting_true)
|
||||
minetest.after(nature.youth_delay,
|
||||
function(pos)
|
||||
local meta = minetest.get_meta(pos)
|
||||
meta:set_string(nature.node_young, nature.setting_false)
|
||||
end,
|
||||
pos)
|
||||
meta:set_int(nature.meta_blossom_time, minetest.get_gametime())
|
||||
end
|
||||
|
||||
local function is_not_young(pos)
|
||||
local meta = minetest.get_meta(pos)
|
||||
|
||||
local young = meta:get_string(nature.node_young)
|
||||
return young ~= nature.setting_true
|
||||
local blossom_time = meta:get_int(nature.meta_blossom_time)
|
||||
return not (blossom_time and minetest.get_gametime() - blossom_time < nature.blossom_duration)
|
||||
end
|
||||
|
||||
function nature:grow_node(pos, nodename)
|
||||
@@ -47,7 +67,6 @@ function nature:grow_node(pos, nodename)
|
||||
>= nature.minimum_growth_light
|
||||
|
||||
if is_not_young(pos) and light_enough then
|
||||
minetest.remove_node(pos)
|
||||
minetest.set_node(pos, { name = nodename })
|
||||
set_young_node(pos)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user