more buggy codes
yaroot [11-25-10 - 11:54]
diff --git a/core.lua b/core.lua
index 2a4c265..6eb7fe5 100644
--- a/core.lua
+++ b/core.lua
@@ -12,6 +12,7 @@ local defaults = {
},
}
+
SATimer.all = {}
SATimer.unused = {}
SATimer.using = {}
@@ -35,30 +36,100 @@ function SATimer:OnSAOFEvent(_, event, ...)
end
function SATimer:SPELL_ACTIVATION_OVERLAY_SHOW(spellID, texture, position, scale, r, g, b)
+ local f = self:Get(spellID)
+ local endTime = self:GetTimeLeft(spellID)
+
+ if(endTime) then
+ -- XXX
+ if(not f) then
+ f = self:GetUnused()
+ self:SetUsing(f)
+ end
+ f.spellID = spellID
+ f.position = position
+ f.scale = scale
+ f.r = r
+ f.g = g
+ f.b = b
+
+ self:Update(f)
+ self:UpdateTimers()
+ else
+ if(f) then
+ self:Remove(f)
+ end
+ end
+
end
function SATimer:SPELL_ACTIVATION_OVERLAY_HIDE(spellID)
local f = self:Get(spellID)
if(f) then
self:Remove(f)
+ self:UpdateTimers()
+ end
+end
+
+function SATimer:UpdateTimers()
+end
+
+do
+ local _SPELLS = setmetatable({}, {__index=function(t,i)
+ local n = GetSpellInfo(i)
+ rawset(t, i, n)
+ return n
+ end})
+ function SATimer:GetTimeLeft(spellID)
+ local spell = _SPELLS[spellID]
+ if(not spell) then return end
+
+ local name, _, _, duration, expiration, caster = UnitAura('player', spell, 'PLAYER')
+ if(name and duration>0 and expiration>GetTime()) then
+ return expiration
+ end
end
end
-function SATimer:Update(spellID, texture, position, scale, r, g, b)
+function SATimer:Update(f)
end
function SATimer:Remove(f)
f:Hide()
f:SetScript('OnUpdate', nil)
+ self:SetUnused(f)
+end
+
+function SATimer:SetUsing(f)
+ self.using[f] = true
+ self.unused[f] = nil
+end
+
+function SATimer:SetUnused(f)
self.using[f] = nil
self.unused[f] = true
end
-function SATimer:Get(spellID, position)
+function SATimer:Get(spellID)
for f in next, self.using do
- if(f.spellID == spellID and (position and f.position == position or true)) then
+ if(f.spellID == spellID) then
return f
end
end
end
+function SATimer:GetUnused()
+ local f = next(self.unused)
+ if(not f) then
+ f = self:CreateTimer()
+ end
+
+ return f
+end
+
+function SATimer:CreateTimer()
+ local f = CreateFrame('Frame', nil, 'SpellActivationOverlayFrame')
+ self:SetUnused(f)
+
+ return f
+end
+