--[[
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