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