1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
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
|