]> git.lizzy.rs Git - lua_async.git/blob - intervals.lua
Merge branch 'master' of https://github.com/EliasFleckenstein03/lua_async
[lua_async.git] / intervals.lua
1 local unpack = unpack or table.unpack
2 lua_async.intervals = {
3         pool = {},
4         executing = {},
5         last_id = 0,
6 }
7
8 function setInterval(callback, ms, ...)
9         local id = lua_async.intervals.last_id + 1
10         lua_async.intervals.last_id = id
11         local step_time = (ms or 0) / 1000
12         lua_async.intervals.pool[id] = {
13                 time_left = step_time,
14                 step_time = step_time,
15                 callback = callback,
16                 args = {...},
17         }
18         return id
19 end
20
21 function clearInterval(id)
22         lua_async.intervals.pool[id] = nil
23         lua_async.intervals.executing[id] = nil
24 end
25
26 function lua_async.intervals.step(dtime)
27         lua_async.intervals.executing = {}
28
29         for k, v in pairs(lua_async.intervals.pool) do
30                 lua_async.intervals.executing[k] = v
31         end
32
33         for id, interval in pairs(lua_async.intervals.executing) do
34                 interval.time_left = interval.time_left - dtime
35
36                 if interval.time_left <= 0 then
37                         interval.callback(unpack(interval.args))
38                         interval.time_left = interval.step_time
39                 end
40         end
41 end
42