timer v1.1.0 - clearer internals; typo fix

I can't believe I didn't notice that typo. :(
This commit is contained in:
2026-09-22 15:51:29 -06:00
parent 85390caedc
commit 9f829db258
+21 -17
View File
@@ -1,60 +1,64 @@
local is_callable = function(callback) local is_callable = function(callback)
local _type = type(callback) local _type = type(callback)
if _type == "function" then return true end if _type == "function" then return true end
of _type == "table" then if _type == "table" then
local metatable = getmetatable(callback) local metatable = getmetatable(callback)
return (type(metatable) == "table") and (type(metatable.__call) == "function") return (type(metatable) == "table") and (type(metatable.__call) == "function")
end end
end end
local update_after = function(self, delta) local update_after = function(self, delta)
if self.running >= self.time then return true end if self.run_time >= self.deadline then return true end
self.running = self.running + delta self.run_time = self.run_time + delta
if self.running >= self.time then if self.run_time >= self.deadline then
self.callback(unpack(self.args)) self.callback(unpack(self.args))
return true return true
end end
end end
local update_every = function(self, delta) local update_every = function(self, delta)
self.running = self.running + delta self.run_time = self.run_time + delta
while self.running >= self.time do while self.run_time >= self.interval do
self.callback(unpack(self.args)) self.callback(unpack(self.args))
self.running = self.running - self.time self.run_time = self.run_time - self.interval
end end
end end
local metatable = { local timer_metatable = {
__index = { __index = {
reset = function(self, time) reset = function(self, time)
self.running = time or 0 self.run_time = time or 0
end, end,
}, },
} }
local timers = {} local timers = {}
local new_timer = function(time, callback, update, ...) local new_timer = function(callback, update, ...)
assert(is_callable(callback), "callback function must be callable") assert(is_callable(callback), "callback function must be callable")
local timer = setmetatable({ local timer = setmetatable({
time = time,
callback = callback, callback = callback,
update = update, update = update,
args = {...}, args = {...},
running = 0, run_time = 0,
}, metatable) }, timer_metatable)
timers[timer] = timer timers[timer] = timer
return timer return timer
end end
return { return {
after = function(time, callback, ...) version = "v1.1.0",
return new_timer(time, callback, update_after, ...) after = function(deadline, callback, ...)
local timer = new_timer(callback, update_after, ...)
timer.deadline = deadline
return timer
end, end,
every = function(time, callback, ...) every = function(interval, callback, ...)
return new_timer(time, callback, update_every, ...) local timer = new_timer(callback, update_every, ...)
timer.interval = interval
return timer
end, end,
update = function(delta) update = function(delta)
local expired = {} local expired = {}