Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- --[[
- Basic Task Manager by darraghd493
- A basic Roblox task manager.
- ]]
- local Library = {
- ActiveTasks = {};
- }
- Library.__index = Library
- --#region Internal Functions
- local function _removeTask(handle)
- for i, task in ipairs(Library.ActiveTasks) do
- if task == handle then
- table.remove(Library.ActiveTasks, i)
- return
- end
- end
- end
- --#endregion
- function Library.new()
- local self = setmetatable({
- ActiveTasks = {};
- }, Library)
- return self
- end
- function Library:Spawn(func: (cancelled: () -> boolean) -> ())
- local handle = {
- Running = true,
- Completed = false,
- Cancelled = false,
- }
- handle.Cancel = function(self)
- self.Cancelled = true
- self.Running = false
- end
- handle.IsRunning = function(self)
- return self.Running
- end
- task.spawn(function()
- local ok, err = pcall(function()
- func(function()
- return handle.Cancelled
- end)
- end)
- if not ok then
- error("Task error:", err)
- end
- handle.Completed = true
- handle.Running = false
- _removeTask(handle)
- end)
- table.insert(Library.ActiveTasks, handle)
- return handle
- end
- function Library:Delay(seconds: number, func: () -> ())
- return self:Spawn(function(cancelled)
- local elapsed = 0
- while elapsed < seconds do
- if cancelled() then return end
- task.wait(0.1)
- elapsed += 0.1
- end
- if not cancelled() then
- func()
- end
- end)
- end
- function Library:Shutdown()
- for _, handle in ipairs(self.ActiveTasks) do
- handle:Cancel()
- end
- table.clear(self.ActiveTasks)
- end
- function Library:Count()
- return #self.ActiveTasks
- end
- return Library
Advertisement
Add Comment
Please, Sign In to add comment