Limit the number of blossoms or leaves queued for conversion

This commit is contained in:
Rogier 2015-04-02 12:27:46 +02:00
parent 8348a745f8
commit 4c70d6d160
2 changed files with 38 additions and 12 deletions

View File

@ -1,8 +1,6 @@
-- helper functions -- helper functions
minetest.register_globalstep(function(dtime) local function process_blossom_queue_item()
nature.dtime = dtime
if #nature.blossomqueue > 0 and dtime < 0.2 then
local pos = nature.blossomqueue[1][1] local pos = nature.blossomqueue[1][1]
local node = nature.blossomqueue[1][2] local node = nature.blossomqueue[1][2]
local replace = nature.blossomqueue[1][3] local replace = nature.blossomqueue[1][3]
@ -13,15 +11,42 @@ minetest.register_globalstep(function(dtime)
nature:grow_node(pos, replace) -- now actually grow it. nature:grow_node(pos, replace) -- now actually grow it.
table.remove(nature.blossomqueue, 1) table.remove(nature.blossomqueue, 1)
end end
minetest.register_globalstep(function(dtime)
nature.dtime = dtime
if #nature.blossomqueue > 0 and dtime < 0.2 then
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
end
end) end)
function nature.enqueue_node(pos, node, replace) function nature.enqueue_node(pos, node, replace)
local idx = #nature.blossomqueue local idx = #nature.blossomqueue
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] = {}
nature.blossomqueue[idx+1][1] = pos nature.blossomqueue[idx+1][1] = pos
nature.blossomqueue[idx+1][2] = node nature.blossomqueue[idx+1][2] = node
nature.blossomqueue[idx+1][3] = replace nature.blossomqueue[idx+1][3] = replace
end end
end
end
local function set_young_node(pos) local function set_young_node(pos)
local meta = minetest.get_meta(pos) local meta = minetest.get_meta(pos)

View File

@ -7,6 +7,7 @@ local current_mod_name = minetest.get_current_modname()
nature = {} nature = {}
nature.blossomqueue = {} nature.blossomqueue = {}
nature.blossomqueue_max = 1000
nature.blossom_node = "nature:blossom" nature.blossom_node = "nature:blossom"
nature.blossom_leaves = "default:leaves" nature.blossom_leaves = "default:leaves"