summaryrefslogtreecommitdiff
path: root/timer/timer.lua
diff options
context:
space:
mode:
Diffstat (limited to 'timer/timer.lua')
-rw-r--r--timer/timer.lua60
1 files changed, 60 insertions, 0 deletions
diff --git a/timer/timer.lua b/timer/timer.lua
new file mode 100644
index 0000000..3566709
--- /dev/null
+++ b/timer/timer.lua
@@ -0,0 +1,60 @@
+local timer = {}
+local MODE = {
+ EVERY = 1,
+ REPEATS = 2,
+ AFTER = 3,
+}
+local timers = {}
+
+timer.update = function(sec)
+ for i, pack in ipairs(timers) do
+ pack.count = pack.count + sec
+ if pack.count >= pack.time then
+ if pack.mode == MODE.EVERY then
+ pack.count = 0
+ pack.callback()
+ elseif pack.mode == MODE.REPEATS then
+ pack.count = 0
+ pack.callback()
+ pack.repeats = pack.repeats + 1
+ if pack.repeats >= pack.rpt then
+ table.remove(timers, i)
+ end
+ elseif pack.mode == MODE.AFTER then
+ pack.callback()
+ table.remove(timers, i)
+ end
+ end
+ end
+end
+
+timer.every = function(sec, callback)
+ local pack = {}
+ pack.mode = MODE.EVERY
+ pack.time = sec
+ pack.callback = callback
+ pack.count = 0
+ table.insert(timers, pack)
+end
+
+timer.repeats = function(sec, rpt, callback)
+ local pack = {}
+ pack.mode = MODE.REPEATS
+ pack.time = sec
+ pack.callback = callback
+ pack.count = 0
+ pack.repeats = 0
+ pack.rpt = rpt
+ table.insert(timers, pack)
+end
+
+timer.after = function(sec, callback)
+ local pack = {}
+ pack.mode = MODE.AFTER
+ pack.time = sec
+ pack.callback = callback
+ pack.count = 0
+ table.insert(timers, pack)
+end
+
+return timer