diff options
author | chai <chaifix@163.com> | 2018-07-31 20:13:58 +0800 |
---|---|---|
committer | chai <chaifix@163.com> | 2018-07-31 20:13:58 +0800 |
commit | 0efe3cf55bde25c0627899b36dbe1694dd338234 (patch) | |
tree | 0a3e755ab402337985acad191193488db9df7d1e /timer/timer.lua | |
parent | 6d8683c933c55fa117b465c4e35b08c28143ef1c (diff) |
+loghelper
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 |