/trunk/ReadySpells/libs/AceTimer-3.0
-- make into AceTimer. |
-- @class file |
-- @name AceTimer-3.0 |
-- @release $Id: AceTimer-3.0.lua 1119 2014-10-14 17:23:29Z nevcairiel $ |
-- @release $Id: AceTimer-3.0.lua 1202 2019-05-15 23:11:22Z nevcairiel $ |
local MAJOR, MINOR = "AceTimer-3.0", 17 -- Bump minor on changes |
local AceTimer, oldminor = LibStub:NewLibrary(MAJOR, MINOR) |
delay = 0.01 -- Restrict to the lowest time that the C_Timer API allows us |
end |
local timer = {...} |
timer.object = self |
timer.func = func |
timer.looping = loop |
timer.argsCount = select("#", ...) |
timer.delay = delay |
timer.ends = GetTime() + delay |
local timer = { |
object = self, |
func = func, |
looping = loop, |
argsCount = select("#", ...), |
delay = delay, |
ends = GetTime() + delay, |
... |
} |
activeTimers[timer] = timer |
-- Create new timer closure to wrap the "timer" object |
timer.callback = function() |
timer.callback = function() |
if not timer.cancelled then |
if type(timer.func) == "string" then |
-- We manually set the unpack count to prevent issues with an arg set that contains nil and ends with nil |
--- Cancels all timers registered to the current addon object ('self') |
function AceTimer:CancelAllTimers() |
for k,v in pairs(activeTimers) do |
for k,v in next, activeTimers do |
if v.object == self then |
AceTimer.CancelTimer(self, k) |
end |
AceTimer.frame:SetScript("OnEvent", nil) |
AceTimer.frame:UnregisterAllEvents() |
-- convert timers |
for object,timers in pairs(AceTimer.selfs) do |
for handle,timer in pairs(timers) do |
for object,timers in next, AceTimer.selfs do |
for handle,timer in next, timers do |
if type(timer) == "table" and timer.callback then |
local newTimer |
if timer.delay then |
-- Clear old timer table and update upvalue |
AceTimer.activeTimers = {} |
activeTimers = AceTimer.activeTimers |
for handle, timer in pairs(oldTimers) do |
for handle, timer in next, oldTimers do |
local newTimer |
-- Stop the old timer animation |
local duration, elapsed = timer:GetDuration(), timer:GetElapsed() |
-- Migrate transitional handles |
if oldminor < 13 and AceTimer.hashCompatTable then |
for handle, id in pairs(AceTimer.hashCompatTable) do |
for handle, id in next, AceTimer.hashCompatTable do |
local t = activeTimers[id] |
if t then |
activeTimers[id] = nil |
function AceTimer:Embed(target) |
AceTimer.embeds[target] = true |
for _,v in pairs(mixins) do |
for _,v in next, mixins do |
target[v] = AceTimer[v] |
end |
return target |
target:CancelAllTimers() |
end |
for addon in pairs(AceTimer.embeds) do |
for addon in next, AceTimer.embeds do |
AceTimer:Embed(addon) |
end |