61 lines
1.1 KiB
Lua
61 lines
1.1 KiB
Lua
local self = {}
|
|
|
|
local scheduled = {
|
|
}
|
|
local scheduledTicks = {
|
|
}
|
|
|
|
local function getHighestKey(t)
|
|
local s = 0
|
|
for k in pairs(t) do
|
|
s = math.max(s, k)
|
|
end
|
|
return s
|
|
end
|
|
|
|
function self:schedule(when, func)
|
|
local index = getHighestKey(scheduled) + 1
|
|
scheduled[index] = {when, func}
|
|
return index
|
|
end
|
|
|
|
function self:scheduleInTicks(when, func)
|
|
local index = getHighestKey(scheduledTicks) + 1
|
|
scheduledTicks[index] = {when, func}
|
|
return index
|
|
end
|
|
|
|
function self:unschedule(i)
|
|
if not i then
|
|
print('warning: trying to unschedule a non-existent event')
|
|
return
|
|
end
|
|
scheduled[i] = nil
|
|
end
|
|
|
|
function self:unscheduleInTicks(i)
|
|
if not i then
|
|
print('warning: trying to unschedule a non-existent event')
|
|
end
|
|
scheduledTicks[i] = nil
|
|
end
|
|
|
|
uranium.on('update', function(dt)
|
|
for k, s in pairs(scheduledTicks) do
|
|
s[1] = s[1] - 1
|
|
if s[1] <= 0 then
|
|
s[2]()
|
|
scheduledTicks[k] = nil
|
|
end
|
|
end
|
|
|
|
for k, s in pairs(scheduled) do
|
|
s[1] = s[1] - dt
|
|
if s[1] <= 0 then
|
|
s[2]()
|
|
scheduled[k] = nil
|
|
end
|
|
end
|
|
end)
|
|
|
|
return self |