comparison KBF.lua @ 4:75634f25a762

correctly update values when timed
author Chris Mellon <arkanes@gmai.com>
date Tue, 12 Oct 2010 17:45:59 -0500
parents bb1143608eb4
children 43340216545c
comparison
equal deleted inserted replaced
3:bb1143608eb4 4:75634f25a762
12 } 12 }
13 self.anchor = self:CreateAnchorFrame() 13 self.anchor = self:CreateAnchorFrame()
14 self.buffBars = {} 14 self.buffBars = {}
15 self.anchor:Show() 15 self.anchor:Show()
16 self:RegisterEvent("UNIT_AURA") 16 self:RegisterEvent("UNIT_AURA")
17 -- set up the countdown timer
18 -- TODO: Fancy enable/disable based on whether you have any timed buffs.
19 -- Not a big deal, how often do you care about that
20 self.anchor:SetScript("OnUpdate", function() self:OnUpdate() end)
17 end 21 end
18 -- naming convention 22 -- naming convention
19 -- "frame" is the secure aura button created by the group handler 23 -- "frame" is the secure aura button created by the group handler
20 -- "bar" is the set of icon + status bars that we create to show the buff time 24 -- "bar" is the set of icon + status bars that we create to show the buff time
25
26 function kbf:OnUpdate()
27 for idx=1,99 do
28 local frame = self.secureFrame:GetAttribute("child"..idx)
29 if not (frame and frame.expirationTime) then break end
30 local remaining = frame.expirationTime - GetTime()
31 remaining = math.max(0, remaining)
32 local perc = remaining / frame.duration
33 frame.timertext:SetText(self:FormatTimeText(remaining))
34 frame.statusbar:SetValue(remaining)
35 end
36 end
21 37
22 function kbf:UNIT_AURA(event, unit) 38 function kbf:UNIT_AURA(event, unit)
23 if unit ~= self.secureFrame:GetAttribute("unit") then return end 39 if unit ~= self.secureFrame:GetAttribute("unit") then return end
24 for idx=1,99 do 40 for idx=1,99 do
25 local frame = self.secureFrame:GetAttribute("child"..idx) 41 local frame = self.secureFrame:GetAttribute("child"..idx)
31 function kbf:BindBarToBuff(parentFrame, unit) 47 function kbf:BindBarToBuff(parentFrame, unit)
32 local index = parentFrame:GetAttribute("index") 48 local index = parentFrame:GetAttribute("index")
33 local filter = parentFrame:GetAttribute("filter") 49 local filter = parentFrame:GetAttribute("filter")
34 local name, rank, icon, count, debuffType, duration, expirationTime, 50 local name, rank, icon, count, debuffType, duration, expirationTime,
35 unitCaster, isStealable, shouldConsolidate, spellId = UnitAura(unit, index, filter) 51 unitCaster, isStealable, shouldConsolidate, spellId = UnitAura(unit, index, filter)
36 -- This shouldn't be neccesary as the bar is parented to the frame, which is
37 -- hidden by the group handler
38 if not parentFrame.icon then 52 if not parentFrame.icon then
39 self:ConstructBar(parentFrame) 53 self:ConstructBar(parentFrame)
40 end 54 end
41 parentFrame.icon:SetNormalTexture(icon) 55 parentFrame.icon:SetNormalTexture(icon)
42 if stacks and stacks > 0 then 56 if stacks and stacks > 0 then
43 parentFrame.text:SetText(string.format("%s(%d)", name, stacks)) 57 parentFrame.text:SetText(string.format("%s(%d)", name, stacks))
44 else 58 else
45 parentFrame.text:SetText(name) 59 parentFrame.text:SetText(name)
46 end 60 end
61 parentFrame.timertext:SetText(self:FormatTimeText(duration))
62 -- store duration information
63 if duration > 0 then
64 parentFrame.expirationTime = expirationTime
65 parentFrame.duration = duration
66 parentFrame.statusbar:SetMinMaxValues(0, duration)
67 parentFrame.statusbar:SetValue(duration)
68 else
69 parentFrame.expirationTime = nil
70 parentFrame.duration = 0
71 parentFrame.statusbar:SetMinMaxValues(0,1)
72 parentFrame.statusbar:SetValue(1)
73 end
74 end
75
76 function kbf:FormatTimeText(time)
77 if not time or time == 0 then return "" end
78 local timetext
79 local h = floor(time/3600)
80 local m = time - (h*3600)
81 m = floor(m/60)
82 local s = time - ((h*3600) + (m*60))
83 if h > 0 then
84 timetext = ("%d:%02d"):format(h, m)
85 elseif m > 0 then
86 timetext = string.format("%d:%02d", m, floor(s))
87 elseif s < 10 then
88 timetext = string.format("%1.1f", s)
89 else
90 timetext = string.format("%.0f", floor(s))
91 end
92 return timetext
47 end 93 end
48 94
49 -- creates a icon + statusbar bar 95 -- creates a icon + statusbar bar
50 function kbf:ConstructBar(frame) 96 function kbf:ConstructBar(frame)
51 local texture = "Interface\\TargetingFrame\\UI-StatusBar" 97 local texture = "Interface\\TargetingFrame\\UI-StatusBar"