diff options
author | Elias Fleckenstein <eliasfleckenstein@web.de> | 2021-08-06 19:19:23 +0200 |
---|---|---|
committer | Elias Fleckenstein <eliasfleckenstein@web.de> | 2021-08-06 19:19:23 +0200 |
commit | a2770298f040307f8dd59c7a88d7e40d37faec14 (patch) | |
tree | 3ce0ec0c31be5b2f87c086488973e8957acf84ad /intervals.lua | |
parent | f6cc945b08e5a89492d92a88a7146da421e42819 (diff) | |
download | lua_async-a2770298f040307f8dd59c7a88d7e40d37faec14.tar.xz |
Add source code
Diffstat (limited to 'intervals.lua')
-rw-r--r-- | intervals.lua | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/intervals.lua b/intervals.lua new file mode 100644 index 0000000..72a0cc7 --- /dev/null +++ b/intervals.lua @@ -0,0 +1,33 @@ +lua_async.intervals = { + pool = {}, + last_id = 0, +} + +function setInterval(callback, ms, ...) + local id = lua_async.intervals.last_id + 1 + lua_async.intervals.last_id = id + local step_time = (ms or 0) / 1000 + lua_async.intervals.pool[id] = { + time_left = step_time, + step_time = step_time, + callback = callback, + args = {...}, + } + return id +end + +function clearInterval(id) + lua_async.intervals.pool[id] = nil +end + +function lua_async.intervals.step(dtime) + for id, interval in pairs(lua_async.intervals.pool) do + interval.time_left = timeout.time_left - dtime + + if interval.time_left <= 0 then + interval.callback(unpack(interval.args)) + interval.time_left = interval.step_time + end + end +end + |