52 lines
1.1 KiB
Lua
52 lines
1.1 KiB
Lua
local tick = 0
|
|
|
|
function SWEP:InitTimers()
|
|
self.ActiveTimers = {} -- { { time, id, func } }
|
|
end
|
|
|
|
function SWEP:SetTimer(time, callback, id)
|
|
if !IsFirstTimePredicted() then return end
|
|
|
|
table.insert(self.ActiveTimers, { time + CurTime(), id or "", callback })
|
|
end
|
|
|
|
function SWEP:TimerExists(id)
|
|
for _, v in pairs(self.ActiveTimers) do
|
|
if v[2] == id then return true end
|
|
end
|
|
|
|
return false
|
|
end
|
|
|
|
function SWEP:KillTimer(id)
|
|
local keeptimers = {}
|
|
|
|
for _, v in pairs(self.ActiveTimers) do
|
|
if v[2] != id then table.insert(keeptimers, v) end
|
|
end
|
|
|
|
self.ActiveTimers = keeptimers
|
|
end
|
|
|
|
function SWEP:KillTimers()
|
|
self.ActiveTimers = {}
|
|
end
|
|
|
|
function SWEP:ProcessTimers()
|
|
local keeptimers, UCT = {}, CurTime()
|
|
|
|
if CLIENT and UCT == tick then return end
|
|
|
|
if !self.ActiveTimers then self:InitTimers() end
|
|
|
|
for _, v in pairs(self.ActiveTimers) do
|
|
if v[1] <= UCT then v[3]() end
|
|
end
|
|
|
|
for _, v in pairs(self.ActiveTimers) do
|
|
if v[1] > UCT then table.insert(keeptimers, v) end
|
|
end
|
|
|
|
self.ActiveTimers = keeptimers
|
|
end
|