summaryrefslogtreecommitdiff
path: root/timer/timer.lua
blob: 356670932cb7d98cec6e51acb6eba2d72f06a155 (plain)
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