comparison KBF.lua @ 6:bc661466f10c

use deferred processing of unit_aura in order to avoid race conditions with the attributes of the secure frames
author Chris Mellon <arkanes@gmai.com>
date Tue, 12 Oct 2010 18:14:06 -0500
parents 43340216545c
children 31048236391d
comparison
equal deleted inserted replaced
5:43340216545c 6:bc661466f10c
24 -- "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 25
26 function kbf:OnUpdate() 26 function kbf:OnUpdate()
27 for idx=1,99 do 27 for idx=1,99 do
28 local frame = self.secureFrame:GetAttribute("child"..idx) 28 local frame = self.secureFrame:GetAttribute("child"..idx)
29 if not (frame and frame.expirationTime) then break end 29 if not frame then break end
30 local remaining = frame.expirationTime - GetTime() 30 if self.dirty then
31 remaining = math.max(0, remaining) 31 local unit = self.secureFrame:GetAttribute("unit")
32 local perc = remaining / frame.duration 32 self:BindBarToBuff(frame, unit)
33 frame.timertext:SetText(self:FormatTimeText(remaining)) 33 elseif frame.expirationTime then
34 frame.statusbar:SetValue(remaining) 34 local remaining = frame.expirationTime - GetTime()
35 end 35 remaining = math.max(0, remaining)
36 local perc = remaining / frame.duration
37 frame.timertext:SetText(self:FormatTimeText(remaining))
38 frame.statusbar:SetValue(remaining)
39 end
40 end
41 self.dirty = nil
36 end 42 end
37 43
38 function kbf:UNIT_AURA(event, unit) 44 function kbf:UNIT_AURA(event, unit)
39 if unit ~= self.secureFrame:GetAttribute("unit") then return end 45 if unit ~= self.secureFrame:GetAttribute("unit") then return end
40 for idx=1,99 do 46 self.dirty = true
41 local frame = self.secureFrame:GetAttribute("child"..idx)
42 if not frame then break end
43 self:BindBarToBuff(frame, unit)
44 end
45 end 47 end
46 48
47 function kbf:BindBarToBuff(parentFrame, unit) 49 function kbf:BindBarToBuff(parentFrame, unit)
48 local index = parentFrame:GetAttribute("index") 50 local index = parentFrame:GetAttribute("index")
49 local filter = parentFrame:GetAttribute("filter") 51 local filter = parentFrame:GetAttribute("filter")
58 else 60 else
59 parentFrame.text:SetText(name) 61 parentFrame.text:SetText(name)
60 end 62 end
61 parentFrame.timertext:SetText(self:FormatTimeText(duration)) 63 parentFrame.timertext:SetText(self:FormatTimeText(duration))
62 -- store duration information 64 -- store duration information
63 if duration > 0 then 65 if duration and duration > 0 then
64 parentFrame.expirationTime = expirationTime 66 parentFrame.expirationTime = expirationTime
65 parentFrame.duration = duration 67 parentFrame.duration = duration
66 parentFrame.statusbar:SetMinMaxValues(0, duration) 68 parentFrame.statusbar:SetMinMaxValues(0, duration)
67 parentFrame.statusbar:SetValue(duration) 69 parentFrame.statusbar:SetValue(duration)
68 else 70 else