summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeija <jeija@mesecons.net>2014-01-11 15:36:30 +0100
committerJeija <jeija@mesecons.net>2014-01-11 15:36:30 +0100
commitff5e3153257ae8789d43297d1c3739e6a22cd105 (patch)
treec6b32ff9abcefc6ba1e25a4ad10a1e45acbf0c15
parentf1211f7dae58ff4298b6bf4fcaa572e7995ab5e2 (diff)
downloadmesecons-ff5e3153257ae8789d43297d1c3739e6a22cd105.tar
mesecons-ff5e3153257ae8789d43297d1c3739e6a22cd105.tar.gz
mesecons-ff5e3153257ae8789d43297d1c3739e6a22cd105.tar.bz2
mesecons-ff5e3153257ae8789d43297d1c3739e6a22cd105.tar.xz
mesecons-ff5e3153257ae8789d43297d1c3739e6a22cd105.zip
Fix ActionQueue delays
-rw-r--r--mesecons/actionqueue.lua21
1 files changed, 13 insertions, 8 deletions
diff --git a/mesecons/actionqueue.lua b/mesecons/actionqueue.lua
index a00054a..1c02b46 100644
--- a/mesecons/actionqueue.lua
+++ b/mesecons/actionqueue.lua
@@ -63,19 +63,24 @@ minetest.register_globalstep(function (dtime)
m_time = m_time + dtime
if (m_time < 5) then return end -- don't even try if server has not been running for 2 seconds
local actions = mesecon:tablecopy(mesecon.queue.actions)
+ local actions_now={}
+
mesecon.queue.actions = {}
- for i, action in ipairs(actions) do
- if action.time > 0 then
- action.time = action.time - dtime
- table.insert(mesecon.queue.actions, action) -- will be handled another time
+ -- sort actions in execute now (actions_now) and for later (mesecon.queue.actions)
+ for i, ac in ipairs(actions) do
+ if ac.time > 0 then
+ ac.time = ac.time - dtime -- executed later
+ table.insert(mesecon.queue.actions, ac)
+ else
+ table.insert(actions_now, ac)
end
end
- while(#actions > 0) do -- execute highest priorities first, until all are executed
- local hp = get_highest_priority(actions)
- mesecon.queue:execute(actions[hp])
- table.remove(actions, hp)
+ while(#actions_now > 0) do -- execute highest priorities first, until all are executed
+ local hp = get_highest_priority(actions_now)
+ mesecon.queue:execute(actions_now[hp])
+ table.remove(actions_now, hp)
end
end)