Files
coa-altoholic/Altoholic/Tasks.lua
T
florian.berthold bbe2492a5b chore: flatten Altoholic-Addon/ wrapper + add standard .gitignore/.gitattributes
Each DataStore_* / Altoholic_* addon now lives at the repo root, matching
the Exiles fork-layout convention (one folder per addon, no wrapper dir).
2026-05-25 10:59:24 +02:00

58 lines
1.3 KiB
Lua

-- Simple task manager
-- Written by : Thaoky, EU-Marécages de Zangar
local addon = Altoholic
addon.Tasks = {}
function addon.Tasks:Init()
self.List = self.List or {}
wipe(self.List)
end
function addon.Tasks:OnUpdate(elapsed)
for name, task in pairs(self.List) do
task.delay = task.delay - elapsed
if task.delay <= 0 then
if task.func then
if not task.func(task.owner, elapsed) then
-- execute the task, if it doesn't return anything, delete it.
-- if it does, keep it in the list, and execute it in every pass (set a delay of 0).
-- if necessary, reschedule by updating the delay
-- The function is responsible for returning the right value
self:Remove(name)
end
end
end
end
end
function addon.Tasks:Add(name, delay, func, owner)
if not self.List[name] then
self.List[name] = {}
end
local p = self.List[name]
p.delay = delay -- time before executing the task
p.func = func -- function pointer to the task
p.owner = owner -- owner (table or frame)
end
function addon.Tasks:Remove(name)
local p = self.List[name]
if p then
wipe(p)
self.List[name] = nil
end
end
function addon.Tasks:Get(name)
return self.List[name]
end
function addon.Tasks:Reschedule(name, delay)
local p = self.List[name]
if p then
p.delay = delay -- time before executing the task
end
end