From 87990efbc1a0e4275fe9c9cb4ee34ee37931f94c Mon Sep 17 00:00:00 2001 From: LukaDev <47296785+lukadev-0@users.noreply.github.com> Date: Wed, 28 Feb 2024 14:21:56 +0100 Subject: [PATCH] feat(timer): add timer package --- packages/timer/config.toml | 6 ++++++ packages/timer/init.luau | 30 ++++++++++++++++++++++++++++++ 2 files changed, 36 insertions(+) create mode 100644 packages/timer/config.toml create mode 100644 packages/timer/init.luau diff --git a/packages/timer/config.toml b/packages/timer/config.toml new file mode 100644 index 0000000..d2a73c2 --- /dev/null +++ b/packages/timer/config.toml @@ -0,0 +1,6 @@ +name = "timer" +description = "Schedule functions to be called at a future time." +version = "1.0.0" + +bundle = "timer" +dependencies = ["env", "future", "threadpool"] diff --git a/packages/timer/init.luau b/packages/timer/init.luau new file mode 100644 index 0000000..6e865bd --- /dev/null +++ b/packages/timer/init.luau @@ -0,0 +1,30 @@ +local Future = require("../future") +local env = require("../env") +local threadpool = require("../threadpool") + +local task = env.libs.task + +local timer = {} + +function timer.delay(duration: number): Future.Future + return Future.spawn(task.wait, duration) +end + +function timer.interval(duration: number, f: (T...) -> (), ...: T...): () -> () + -- selene: allow(shadowing) + local function inner(duration: number, f: (T...) -> (), ...: T...) + local nextTick = os.clock() + duration + while true do + task.wait(nextTick - os.clock()) + threadpool.spawn(f, ...) + nextTick += duration + end + end + + local thread = task.spawn(inner, duration, f, ...) + return function() + task.cancel(thread) + end +end + +return timer