Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Decrease minetest.after globalstep lag
* abort if theres no active timer
* only reduce the timer.time of all timers when its necessary
* move updating timers_to_add into a seperate function
  • Loading branch information
HybridDog authored and est31 committed Jun 6, 2015
1 parent 74d8b34 commit 8383a61
Showing 1 changed file with 50 additions and 18 deletions.
68 changes: 50 additions & 18 deletions builtin/game/misc.lua
Expand Up @@ -4,40 +4,72 @@
-- Misc. API functions
--

core.timers_to_add = {}
core.timers = {}
core.register_globalstep(function(dtime)
for _, timer in ipairs(core.timers_to_add) do
table.insert(core.timers, timer)
end
core.timers_to_add = {}
local index = 1
while index <= #core.timers do
local timer = core.timers[index]
timer.time = timer.time - dtime
local timers = {}
local mintime
local function update_timers(delay)
mintime = false
local sub = 0
for index = 1, #timers do
index = index - sub
local timer = timers[index]
timer.time = timer.time - delay
if timer.time <= 0 then
timer.func(unpack(timer.args or {}))
table.remove(core.timers,index)
table.remove(timers, index)
sub = sub + 1
elseif mintime then
mintime = math.min(mintime, timer.time)
else
index = index + 1
mintime = timer.time
end
end
end

local timers_to_add
local function add_timers()
for _, timer in ipairs(timers_to_add) do
table.insert(timers, timer)
end
timers_to_add = false
end

local delay = 0
core.register_globalstep(function(dtime)
if not mintime then
-- abort if no timers are running
return
end
if timers_to_add then
add_timers()
end
delay = delay + dtime
if delay < mintime then
return
end
update_timers(delay)
delay = 0
end)

function core.after(time, func, ...)
assert(tonumber(time) and type(func) == "function",
"Invalid core.after invocation")
table.insert(core.timers_to_add, {time=time, func=func, args={...}})
if not mintime then
mintime = time
timers_to_add = {{time=time+delay, func=func, args={...}}}
return
end
mintime = math.min(mintime, time)
timers_to_add = timers_to_add or {}
timers_to_add[#timers_to_add+1] = {time=time+delay, func=func, args={...}}
end

function core.check_player_privs(name, privs)
local player_privs = core.get_player_privs(name)
local missing_privileges = {}
for priv, val in pairs(privs) do
if val then
if not player_privs[priv] then
table.insert(missing_privileges, priv)
end
if val
and not player_privs[priv] then

This comment has been minimized.

Copy link
@ShadowNinja

ShadowNinja Jun 15, 2015

Member

This conditional expression should be on one line because it's very short. But if you did have to break the line the correct style is with two more levels of indentation as in:

if foo
        and bar then
    ...
end

See http://dev.minetest.net/Lua_code_style_guidelines

This comment has been minimized.

Copy link
@HybridDog

HybridDog Mar 20, 2016

Contributor

sorry, l found this comment too late

This comment has been minimized.

Copy link
@est31

est31 Mar 20, 2016

Contributor

Well in fact SN commented after the commit was already in master, so nothing to blame you @HybridDog .

table.insert(missing_privileges, priv)
end
end
if #missing_privileges > 0 then
Expand Down

0 comments on commit 8383a61

Please sign in to comment.