1.2.0 #1

Open
tangent wants to merge 6 commits from 1.2.0 into main
Showing only changes of commit 26fe11daf8 - Show all commits
+19 -13
View File
@@ -1,17 +1,12 @@
local is_callable = function(callback) -- This file is public domain. Created by Tangent, the fox, the legend.
local _type = type(callback)
if _type == "function" then return true end
if _type == "table" then
local metatable = getmetatable(callback)
return (type(metatable) == "table") and (type(metatable.__call) == "function")
end
end
local update_after = function(self, delta) local update_after = function(self, delta)
if self.run_time >= self.deadline then return true end if self.run_time >= self.deadline then return true end
self.run_time = self.run_time + delta self.run_time = self.run_time + delta
if self.run_time >= self.deadline then if self.run_time >= self.deadline then
self.callback(unpack(self.args)) if self.callback then
self.callback(unpack(self.args))
end
return true return true
end end
end end
@@ -19,24 +14,35 @@ end
local update_every = function(self, delta) local update_every = function(self, delta)
self.run_time = self.run_time + delta self.run_time = self.run_time + delta
while self.run_time >= self.interval do while self.run_time >= self.interval do
self.callback(unpack(self.args)) if self.callback then
self.callback(unpack(self.args))
end
self.run_time = self.run_time - self.interval self.run_time = self.run_time - self.interval
end end
end end
local timer_metatable = { local timer_metatable = {
__index = { __index = {
get_run_time = function(self)
return self.run_time
end,
reset = function(self, time) reset = function(self, time)
self.run_time = time or 0 self.run_time = time or 0
end, end,
set_deadline = function(self, deadline)
assert(self.deadline, "set_deadline() is only for timer.after() timers.")
self.deadline = deadline
end,
set_interval = function(self, interval)
assert(self.interval, "set_interval() is only for timer.every() timers.")
self.interval = interval
end,
}, },
} }
local timers = {} local timers = {}
local new_timer = function(callback, update, ...) local new_timer = function(callback, update, ...)
assert(is_callable(callback), "callback function must be callable")
local timer = setmetatable({ local timer = setmetatable({
callback = callback, callback = callback,
update = update, update = update,
@@ -49,7 +55,7 @@ local new_timer = function(callback, update, ...)
end end
return { return {
version = "v1.1.0", version = "v1.2.0",
after = function(deadline, callback, ...) after = function(deadline, callback, ...)
local timer = new_timer(callback, update_after, ...) local timer = new_timer(callback, update_after, ...)
timer.deadline = deadline timer.deadline = deadline