Skip to content

Commit

Permalink
Change approach
Browse files Browse the repository at this point in the history
  • Loading branch information
Zughy committed Aug 30, 2024
1 parent 4f00dcd commit e1ac569
Showing 1 changed file with 15 additions and 11 deletions.
26 changes: 15 additions & 11 deletions builtin/common/after.lua
Original file line number Diff line number Diff line change
Expand Up @@ -107,7 +107,7 @@ end
local function remove_first_jobs()
local removed_expiry = heap_pop(expiries)
local removed = job_map[removed_expiry]
removed.elapsed_time = removed_expiry
removed.expired = true
job_map[removed_expiry] = nil
return removed
end
Expand All @@ -118,12 +118,6 @@ local time_next = math.huge
core.register_globalstep(function(dtime)
time = time + dtime

for _, job in pairs(job_map) do
if job.elapsed_time then
job.elapsed_time = job.elapsed_time + dtime
end
end

if time < time_next then
return
end
Expand Down Expand Up @@ -158,27 +152,37 @@ local function dummy_func() end
function job_metatable.__index:cancel()
self.func = dummy_func
self.args = {n = 0}
self.elapsed_time = nil
self.expiring_time = nil
end

function core.after(after, func, ...)
assert(tonumber(after) and not core.is_nan(after) and type(func) == "function",
"Invalid minetest.after invocation")

local expiry = time + after
local new_job = {
mod_origin = core.get_last_run_mod(),
func = func,
elapsed_time = 0,
args = {
n = select("#", ...),
...
},
start_time = time,
expiring_time = expiry,
expired = false,

get_elapsed_time = function(self)
return self.elapsed_time
if self.expired then
return after
else
if self.expiring_time then
return time - self.start_time
end
end
end
}

local expiry = time + after

add_job(expiry, new_job)
time_next = math.min(time_next, expiry)

Expand Down

0 comments on commit e1ac569

Please sign in to comment.