timer v1.1.0 - clearer internals; typo fix
I can't believe I didn't notice that typo. :(
This commit is contained in:
@@ -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 = {}
|
||||||
|
|||||||
Reference in New Issue
Block a user