diff --git a/core.lua b/core.lua
index 7120297..c7ef33d 100644
--- a/core.lua
+++ b/core.lua
@@ -1,31 +1,44 @@
local L = setmetatable({}, {__index=function(t, i) return i end})
local SATimer = LibStub('AceAddon-3.0'):NewAddon('SATimer')
-
-local db
-local defaults = {
- profile = {
- enabled = true,
- },
+local debug
+
+--local db
+--local defaults = {
+-- profile = {
+-- enabled = true,
+-- },
+--}
+
+local complexLocationTable = {
+ ['RIGHT (FLIPPED)'] = 'RIGHT',
+ ['BOTTOM (FLIPPED)'] = 'BOTTOM',
+ ['LEFT + RIGHT (FLIPPED)'] = 'BOTTOM',
+ ['TOP + BOTTOM (FLIPPED)'] = 'BOTTOM',
}
-SATimer.all = {}
-SATimer.unused = {}
-SATimer.using = {}
-
function SATimer:OnInitialize()
- self.db = LibStub("AceDB-3.0"):New('SATimerDB', defaults, UnitName'player' .. '-' .. GetRealmName())
- db = self.db.profile
+ local debugf = tekDebug and tekDebug:GetFrame'SATimer'
+ debug = debugf and function(...)
+ debugf:AddMessage(string.join(', ', tostringall(...)))
+ end or function() end
+
+ debug'OnLoad'
+ --self.db = LibStub("AceDB-3.0"):New('SATimerDB', defaults, UnitName'player' .. '-' .. GetRealmName())
+ --db = self.db.profile
--self:SetupOption()
- --hooksecurefunc('SpellActivationOverlay_OnEvent', function(...) print(...) end)
+ self.timers = {}
+ self.SAFrame = SpellActivationOverlayFrame
+
SpellActivationOverlayFrame:HookScript('OnEvent', function(...)
SATimer:OnSAOFEvent(...)
end)
end
function SATimer:OnSAOFEvent(_, event, ...)
+ debug('OnEvent', event)
if(event and self[event]) then
self[event](self, ...)
end
@@ -34,21 +47,24 @@ end
function SATimer:SPELL_ACTIVATION_OVERLAY_SHOW(spellID, texture, position, scale, r, g, b)
local f = self:Get(spellID)
local endTime = self:GetTimeLeft(spellID)
+ local POS = strupper(position)
+ debug('SHOW', f, endTime, spellID, texture, position, complexLocationTable[POS], scale, r, g, b)
if(endTime) then
if(not f) then
f = self:GetUnused()
- self:SetUsing(f)
+ f.using = true
end
f.spellID = spellID
f.position = position
+ f.endTime = endTime
+ f.realPosition = complexLocationTable[POS] or POS
f.scale = scale
- f.r = r
- f.g = g
- f.b = b
+ --f.r = r
+ --f.g = g
+ --f.b = b
self:Update(f)
- self:UpdateTimers()
else
if(f) then
self:Remove(f)
@@ -58,16 +74,13 @@ function SATimer:SPELL_ACTIVATION_OVERLAY_SHOW(spellID, texture, position, scale
end
function SATimer:SPELL_ACTIVATION_OVERLAY_HIDE(spellID)
+ debug('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)
@@ -77,54 +90,91 @@ do
function SATimer:GetTimeLeft(spellID)
local spell = _SPELLS[spellID]
+ debug('SPELLID', spellID, spell)
if(not spell) then return end
- local name, _, _, duration, expiration, caster = UnitAura('player', spell, 'PLAYER')
+ local name, rank, icon, count, debuffType, duration, expiration, caster = UnitAura('player', spell)
+ debug('SPELL', spellID, spell, name, duration, expiration, caster)
if(name and duration>0 and expiration>GetTime()) then
return expiration
end
end
-end
-function SATimer:Update(f)
+ local function update(self)
+ local timeLeft = self.endTime - GetTime()
+ if(timeLeft > 0) then
+ self.text:SetText(floor(timeLeft) .. '.')
+
+ local s = timeLeft - floor(timeLeft)
+ self.text2:SetText(floor(s*1000))
+
+ --self.nextUpdate = timeLeft - floor(timeLeft)
+ else
+ SATimer:Remove(self)
+ end
+ end
+
+ --local function onUpdate(self, elps)
+ -- update(self)
+ --end
+
+ function SATimer:Update(f)
+ debug('UPDATE', f.spellID)
+ --f.text:SetTextColor(f.r, f.g, f.b)
+ f:ClearAllPoints()
+ f:SetPoint(f.realPosition, self.SAFrame)
+ f:Show()
+
+ f.nextUpdate = 0
+ update(f)
+ f:SetScript('OnUpdate', update)
+ end
end
function SATimer:Remove(f)
+ debug('REMOVE', f, f.spellID)
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
+ f.using = nil
end
function SATimer:Get(spellID)
- for f in next, self.using do
- if(f.spellID == spellID) then
- return f
+ for k, v in ipairs(self.timers) do
+ if(v.using and v.spellID == spellID) then
+ return v
end
end
end
function SATimer:GetUnused()
- local f = next(self.unused)
- if(not f) then
- f = self:CreateTimer()
+ for k, v in ipairs(self.timers) do
+ if(not v.using) then return v end
end
-
- return f
+ return self:CreateTimer()
end
+local r, g, b, m = 1, .1, .1, .7
+local font = QuestFont_Large:GetFont()
function SATimer:CreateTimer()
- local f = CreateFrame('Frame', nil, 'SpellActivationOverlayFrame')
- self:SetUnused(f)
+ --debug'OnCreateTimer'
+ local f = CreateFrame('Frame', nil, self.SAFrame)
+ tinsert(self.timers, f)
+ f:SetWidth(2)
+ f:SetHeight(2)
+
+ f.text = f:CreateFontString(nil, 'OVERLAY')
+ f.text:SetFont(font, 32, 'OUTLINE')
+ f.text:SetPoint('BOTTOMRIGHT', f)
+ f.text:SetJustifyH('RIGHT')
+ f.text:SetJustifyV('BOTTOM')
+ f.text:SetTextColor(r, g, b)
+
+ f.text2 = f:CreateFontString(nil, 'OVERLAY')
+ f.text2:SetFont(font, 20, 'OUTLINE')
+ f.text2:SetPoint('BOTTOMLEFT', f, 'BOTTOMRIGHT', 0, 2)
+ f.text2:SetJustifyH('LEFT')
+ f.text2:SetJustifyV('BOTTOM')
+ f.text2:SetTextColor(r, g, b)
return f
end