comparison Modules/BuffFrame.lua @ 61:3f083d389c18

- don't send updates for BuffAnchors hook
author Nenue
date Mon, 15 Aug 2016 09:35:46 -0400
parents 2a636b00c31e
children ef4116179e2f
comparison
equal deleted inserted replaced
60:2a636b00c31e 61:3f083d389c18
1 -- Veneer 1 -- Veneer
2 -- BuffFrame.lua 2 -- BuffFrame.lua
3 -- Created: 7/27/2016 8:08 PM 3 -- Created: 7/27/2016 8:08 PM
4 -- %file-revision% 4 -- %file-revision%
5 -- 5 -- Adds progress bars and cooldown swirls to buffbutton frames
6 6
7 local PLUGIN_NAME = 'BuffFrame' 7 local PLUGIN_NAME = 'BuffFrame'
8 local plugin = {} 8 local plugin = {}
9 local vn, print = LibStub("LibKraken").register(VeneerController, plugin) 9 local vn, print = LibStub("LibKraken").register(VeneerController, plugin)
10 10
64 local veneer = CreateFrame('Frame', name..'Veneer', UIParent) 64 local veneer = CreateFrame('Frame', name..'Veneer', UIParent)
65 local id = frame:GetID() 65 local id = frame:GetID()
66 veneer:SetAllPoints(frame) 66 veneer:SetAllPoints(frame)
67 veneer:SetParent(frame) 67 veneer:SetParent(frame)
68 veneer.bg = veneer:CreateTexture() 68 veneer.bg = veneer:CreateTexture()
69 veneer.bg:SetColorTexture((id / 16),0,1-(id/16),0.5) 69 veneer.bg:SetColorTexture(1,1,1,0)
70 print(id, id/16)
71 veneer.bg:SetAllPoints(veneer) 70 veneer.bg:SetAllPoints(veneer)
72 veneer.bg:Show() 71 veneer.bg:Show()
73 veneer:Hide() 72 veneer:Hide()
74 veneer:EnableMouse(false) 73 veneer:EnableMouse(false)
75 74
85 veneer.progress:Hide() 84 veneer.progress:Hide()
86 veneer.progress:SetPoint('BOTTOMLEFT', veneer, 'BOTTOMLEFT', 3, -6) 85 veneer.progress:SetPoint('BOTTOMLEFT', veneer, 'BOTTOMLEFT', 3, -6)
87 veneer.progress:SetPoint('TOPRIGHT', veneer, 'BOTTOMRIGHT', -3, -1) 86 veneer.progress:SetPoint('TOPRIGHT', veneer, 'BOTTOMRIGHT', -3, -1)
88 87
89 veneer.progress.bg = veneer.progress:CreateTexture(nil, 'BACKGROUND') 88 veneer.progress.bg = veneer.progress:CreateTexture(nil, 'BACKGROUND')
90 veneer.progress.bg:SetColorTexture(0,0,0,0.5) 89 veneer.progress.bg:SetColorTexture(0,0,0,1)
91 veneer.progress.bg:SetAllPoints(veneer.progress) 90 veneer.progress.bg:SetAllPoints(veneer.progress)
92 91
93 veneer.progress.fg = veneer.progress:CreateTexture(nil, 'ARTWORK') 92 veneer.progress.fg = veneer.progress:CreateTexture(nil, 'ARTWORK')
94 veneer.progress.fg:SetColorTexture(0,1,0,1) 93 veneer.progress.fg:SetColorTexture(0,1,0,1)
95 veneer.progress.fg:SetPoint('BOTTOMLEFT', 1,1) 94 veneer.progress.fg:SetPoint('BOTTOMLEFT', 1,1)
97 96
98 veneer.progress.status = veneer.progress:CreateFontString() 97 veneer.progress.status = veneer.progress:CreateFontString()
99 veneer.progress.status:SetFontObject(VeneerNumberFont) 98 veneer.progress.status:SetFontObject(VeneerNumberFont)
100 veneer.progress.status:SetPoint('TOP') 99 veneer.progress.status:SetPoint('TOP')
101 100
101
102 veneer.cooldown = CreateFrame('Cooldown', name ..'VeneerCooldown', veneer, 'CooldownFrameTemplate')
103 veneer.cooldown:SetAllPoints(frame)
104 veneer.cooldown:SetReverse(true)
105
102 end 106 end
103 107
104 108
105 return _G[name..'Veneer'] 109 return _G[name..'Veneer']
106 end 110 end
107 111
112 --- Set widgets to reflect the passed parameters
108 local UpdateVeneer = function (frame, duration, expires) 113 local UpdateVeneer = function (frame, duration, expires)
109 local veneer = GetVeneer(frame) 114 local veneer = GetVeneer(frame)
110 115
111 if expires and (duration ~= 0) then 116 if expires and duration then
112 veneer.progress:Show() 117
113 118 if duration ~= 0 then
114 local startTime = (expires - duration) 119 local startTime = (expires - duration)
115 local endTime = expires or 0 120 local endTime = expires or 0
116 print('|cFF0088FF'..frame:GetName()..'|r', 'has expiration', startTime, 'to', endTime, 'over', duration, 'frame', veneer.progress:GetWidth()) 121 print('|cFF0088FF'..frame:GetName()..'|r', duration, expires)
117 veneer.progress:SetScript('OnUpdate', function(self) 122 veneer.progress:Show()
118 local w = floor(veneer.progress:GetWidth()+.5) 123 veneer.elapsed = 0
119 local t = GetTime() 124 veneer.progress:SetScript('OnUpdate', function(self, elapsed)
120 local progress = (t - startTime) / duration 125 veneer.elapsed = veneer.elapsed + elapsed
121 126
122 local nw = w - ceil(w * progress) 127 local w = floor(veneer.progress:GetWidth()+.5)
123 print(progress, nw, w) 128 local t = GetTime()
124 if (progress >= 1) or not frame:IsVisible() then 129 local progress = (t - startTime) / duration
125 veneer.startTime = nil 130
126 self:Hide() 131 local nw = (w-2) - ceil(w * progress)
127 self:SetScript('OnUpdate', nil) 132 if veneer.elapsed >= 0.25 then
128 else 133
129 self.fg:SetWidth(nw) 134 print(progress, nw, w)
130 end 135 veneer.elapsed = 0.25 - veneer.elapsed
131 end) 136 end
132 end 137 if (progress >= 1) or not frame:IsVisible() then
133 138 veneer.startTime = nil
134 139 self:Hide()
135 140 self:SetScript('OnUpdate', nil)
141 else
142 self.fg:SetWidth(nw)
143 end
144 end)
145
146 veneer.cooldown:Show()
147 veneer.cooldown:SetCooldown(startTime, duration)
148 else
149 print('|cFF00FF88'..frame:GetName()..'|r', 'duration zero')
150 veneer.progress:SetScript('OnUpdate', nil)
151 veneer.progress:Hide()
152 veneer.cooldown:Hide()
153 end
154 else
155 veneer.progress:Hide()
156 veneer.cooldown:SetCooldown(0,0)
157 veneer.cooldown:Hide()
158 print('|cFF88FF00'..frame:GetName()..'|r', 'nil duration')
159 end
136 veneer:Show() 160 veneer:Show()
137 end 161 end
138 162
139 163
140 -- Associates skinning elements with said button 164 -- Associates skinning elements with said button
160 if border then 184 if border then
161 border:SetSize(50,50) 185 border:SetSize(50,50)
162 end 186 end
163 if duration then 187 if duration then
164 duration:ClearAllPoints() 188 duration:ClearAllPoints()
165 duration:SetPoint('BOTTOM') 189 duration:SetPoint('TOP', frame, 'BOTTOM', 0, -8)
166 duration:SetFontObject(VeneerNumberFont) 190 duration:SetFontObject(VeneerNumberFont)
167 duration:SetDrawLayer('OVERLAY') 191 duration:SetDrawLayer('OVERLAY')
168 192
169 end 193 end
170 194
194 local bName = name..index 218 local bName = name..index
195 local frame = _G[bName] 219 local frame = _G[bName]
196 if frame and frame:IsVisible() then 220 if frame and frame:IsVisible() then
197 tickCounter[frame] = (tickCounter[frame] or 0) + 1 221 tickCounter[frame] = (tickCounter[frame] or 0) + 1
198 local cacheDiff = CacheCheck(frame, UnitAura(frame.unit, frame:GetID(), frame.filter)) 222 local cacheDiff = CacheCheck(frame, UnitAura(frame.unit, frame:GetID(), frame.filter))
199 -- did something change? 223 -- if the name or expirationTime changed
200 if (cacheDiff >= 1) or not skinnedFrames[frame] then 224 if (cacheDiff >= 1) then
201 print(frame:GetName(), 'diff:', cacheDiff) 225 print(frame:GetName(), 'diff:', cacheDiff)
202 tinsert(pendingFrames, frame) 226 if not skinnedFrames[frame] then
203 end 227 tinsert(pendingFrames, frame)
204 228 end
205
206 if frame.expirationTime ~= expirationCache[name] then
207 print('|cFFBBFF00expirationTime|r', name, frame.expirationTime)
208 expirationCache[name] = frame.expirationTime 229 expirationCache[name] = frame.expirationTime
209 print(unpack(aurasCache[frame])) 230 print(unpack(aurasCache[frame]))
210 UpdateVeneer(frame, aurasCache[frame][6], aurasCache[frame][7]) 231 UpdateVeneer(frame, aurasCache[frame][6], aurasCache[frame][7])
211 end 232 end
212 233
224 print('|cFFBBFF00AllBuffAnchors|r', #pendingFrames) 245 print('|cFFBBFF00AllBuffAnchors|r', #pendingFrames)
225 while pendingFrames[1] do 246 while pendingFrames[1] do
226 local frame = tremove(pendingFrames) 247 local frame = tremove(pendingFrames)
227 tinsert(todo, frame:GetName()) 248 tinsert(todo, frame:GetName())
228 249
229 UpdateVeneer(frame) 250 -- re-apply custom anchors
230
231
232 end 251 end
233 print(table.concat(todo, ', ')) 252 print(table.concat(todo, ', '))
234 end 253 end
235 --BuffButton1 254 --BuffButton1
236 --DebuffButton1 255 --DebuffButton1
256 --todo: separate frame groups and iterate over them at appropriate times
237 if BuffButton1 then 257 if BuffButton1 then
238 TempEnchant1:SetPoint('TOPRIGHT', BuffButton1, 'TOPRIGHT', BuffButton1:GetWidth()+4, 0) 258 --TempEnchant1:SetPoint('TOPRIGHT', BuffButton1, 'TOPRIGHT', BuffButton1:GetWidth()+4, 0)
239 end 259 end
240 260
241 end 261 end
242 262
243 local AuraButton_UpdateDuration = function(frame, timeLeft) 263 local AuraButton_UpdateDuration = function(frame, timeLeft)
247 local timeString = '%ds' 267 local timeString = '%ds'
248 if timeLeft > 3600 then 268 if timeLeft > 3600 then
249 timeString = format('%d:%02d', hours, minutes) 269 timeString = format('%d:%02d', hours, minutes)
250 elseif timeLeft > 60 then 270 elseif timeLeft > 60 then
251 timeString = format('%d:%02d', minutes, seconds) 271 timeString = format('%d:%02d', minutes, seconds)
252 elseif timeLeft > 10 then 272 else
253 timeString = format('%d', seconds) 273 timeString = format('%d', seconds)
254 else
255 timeString = format('%0.1f', mod(timeLeft, 60))
256 end 274 end
257 275
258 276
259 frame.duration:SetText(timeString) 277 frame.duration:SetText(timeString)
260 frame.duration:SetVertexColor(1,1,1) 278 frame.duration:SetVertexColor(1,1,1)
261
262 end 279 end
263 280
264 local visibility = {} 281 local visibility = {}
265 local TempEnchantButton_OnHide = function(self) 282 local TempEnchantButton_OnHide = function(self)
266 local isVisible = self:IsVisible() 283 local isVisible = self:IsVisible()
303 end 320 end
304 321
305 end 322 end
306 323
307 local BuffFrame_Update = function(...) 324 local BuffFrame_Update = function(...)
308 --print('Time for udpate!', ...) 325
309 end 326 end
310 327
311 328
312 hooksecurefunc("BuffFrame_Update", BuffFrame_Update) 329 hooksecurefunc("BuffFrame_Update", BuffFrame_Update)
313 hooksecurefunc("AuraButton_UpdateDuration", AuraButton_UpdateDuration) 330 hooksecurefunc("AuraButton_UpdateDuration", AuraButton_UpdateDuration)
323 340
324 341
325 end 342 end
326 343
327 plugin.init = function () 344 plugin.init = function ()
345
346
347
328 plugin.db = vn.db[PLUGIN_NAME] 348 plugin.db = vn.db[PLUGIN_NAME]
329 end 349 end