diff options
Diffstat (limited to 'timer/timer.lua')
-rw-r--r-- | timer/timer.lua | 60 |
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 |