Mercurial > wow > buffalo2
comparison Modules/BuffFrame.lua @ 75:d9d16e67725c
- refactor objectives plugin
author | Nenue |
---|---|
date | Sat, 27 Aug 2016 07:09:54 -0400 |
parents | cd6e78091b04 |
children | 08951972041a |
comparison
equal
deleted
inserted
replaced
74:cd6e78091b04 | 75:d9d16e67725c |
---|---|
9 - Individual BuffButton frames are created upon use, making it difficult to do any sort of securestate priming | 9 - Individual BuffButton frames are created upon use, making it difficult to do any sort of securestate priming |
10 - TempEnchant info returns relative values only, and they don't synchronize with aura events | 10 - TempEnchant info returns relative values only, and they don't synchronize with aura events |
11 - BuffButtons can only be hidden/shown by blizzcode, so functions doing that have to be accounted for | 11 - BuffButtons can only be hidden/shown by blizzcode, so functions doing that have to be accounted for |
12 --]] | 12 --]] |
13 | 13 |
14 local BUFFS_PER_ROW = 12 | |
14 local BUFF_BUTTON_SIZE = 48 | 15 local BUFF_BUTTON_SIZE = 48 |
15 local BUFF_BUTTON_SPACING_H = 4 | 16 local BUFF_BUTTON_SPACING_H = 4 |
16 local BUFF_BUTTON_SPACING_V = 14 | 17 local BUFF_BUTTON_SPACING_V = 14 |
17 local BUFF_PROGRESS_SIZE = 4 | 18 local BUFF_PROGRESS_SIZE = 4 |
18 local BUFF_PROGRESS_INSET = 1 | 19 local BUFF_PROGRESS_INSET = 1 |
19 local BUFF_BUTTON_ZOOM = .15 | 20 local BUFF_BUTTON_ZOOM = .15 |
20 local BORDER_SIZE_L = 0 | 21 local BORDER_SIZE_L = 0 |
21 local BORDER_SIZE_R = 0 | 22 local BORDER_SIZE_R = 0 |
22 local BORDER_SIZE_U = 4 | 23 local BORDER_SIZE_U = 4 |
23 local BORDER_SIZE_D = 0 | 24 local BORDER_SIZE_D = 0 |
25 local BUFF_FRAMES_X = -230 | |
26 local BUFF_FRAMES_Y = -4 | |
24 | 27 |
25 | 28 |
26 local plugin = CreateFrame('Frame', 'VeneerBuffFrame', UIParent) | 29 local plugin = CreateFrame('Frame', 'VeneerBuffFrame', UIParent) |
27 local vn, print = LibStub("LibKraken").register(VeneerController, plugin) | 30 local vn, print = LibStub("LibKraken").register(Veneer, plugin) |
28 local tprint = DEVIAN_WORKSPACE and function(...) _G.print('Timer', ...) end or function() end | 31 local tprint = DEVIAN_WORKSPACE and function(...) _G.print('Timer', ...) end or function() end |
29 | 32 |
30 local _G, UIParent = _G, UIParent | 33 local _G, UIParent = _G, UIParent |
31 local tinsert, tremove, unpack, select, tconcat = table.insert, table.remove, unpack, select, table.concat | 34 local tinsert, tremove, unpack, select, tconcat = table.insert, table.remove, unpack, select, table.concat |
32 local floor, tonumber, format = math.floor, tonumber, string.format | 35 local floor, tonumber, format = math.floor, tonumber, string.format |
33 local UnitAura, GetTime, CreateFrame = UnitAura, GetTime, CreateFrame | 36 local UnitAura, GetTime, CreateFrame = UnitAura, GetTime, CreateFrame |
34 local hooksecurefunc = hooksecurefunc | 37 local hooksecurefunc = hooksecurefunc |
35 | 38 |
36 local buttons = {} | |
37 local buffTypes = { | |
38 { | |
39 name = 'buff', | |
40 pattern = 'BuffButton(%d)', | |
41 filters = 'HELPFUL', | |
42 }, | |
43 { | |
44 name = 'debuff', | |
45 pattern = 'DebuffButton(%d)', | |
46 filters = 'HARMFUL', | |
47 }, | |
48 { | |
49 name = 'tempenchant', | |
50 pattern = 'TempEnchant(%d)', | |
51 filters = 'TEMPENCHANT' | |
52 } | |
53 } | |
54 | |
55 local textureMapping = { | |
56 [1] = 16, --Main hand | |
57 [2] = 17, --Off-hand | |
58 [3] = 18, --Ranged | |
59 } | |
60 | |
61 local tickCounter = {} | |
62 local aurasCache = {} | 39 local aurasCache = {} |
63 local skinnedFrames = {} | 40 local skinnedFrames = {} |
64 local pendingFrames = {} | 41 local pendingFrames = {} |
65 local anchors = {} | 42 local veneers = {} |
66 local expirationCache = {} | 43 local expirationCache = {} |
67 local visibility = {} | 44 local visibility = {} |
68 | 45 local isHooked = {} |
46 | |
47 plugin.options = { | |
48 nameString = 'Buff Frames', | |
49 { | |
50 name = 'BuffButtonZoom', | |
51 type = 'slider', | |
52 min = 0, | |
53 max = 100, | |
54 fullwidth = true, | |
55 }, | |
56 { | |
57 name = 'BuffBorderLeft', | |
58 type = 'slider', | |
59 min = 0, | |
60 max = 16, | |
61 }, | |
62 { | |
63 name = 'BuffBorderLeft', | |
64 type = 'slider', | |
65 min = 0, | |
66 max = 16, | |
67 } | |
68 } | |
69 | 69 |
70 | 70 |
71 local GetVeneer = function(frame) | 71 local GetVeneer = function(frame) |
72 local name = frame:GetName() | 72 |
73 if not (_G[name..'Veneer']) then | 73 if not (veneers[frame]) then |
74 local name = frame:GetName() | |
74 print('|cFF88FF00Creating', name,'Veneer') | 75 print('|cFF88FF00Creating', name,'Veneer') |
75 local veneer = vn.GetVeneer(frame, 'VeneerBuffTemplate') | 76 local veneer = vn.GetVeneer(frame, 'VeneerBuffTemplate') |
76 local id = frame:GetID() | 77 local id = frame:GetID() |
77 | 78 |
78 | 79 |
79 veneer.progress:SetPoint('BOTTOMLEFT', veneer, 'BOTTOMLEFT', 0, -6) | 80 veneer.progress:SetPoint('BOTTOMLEFT', veneer, 'BOTTOMLEFT', 0, -6) |
80 veneer.progress:SetPoint('TOPRIGHT', veneer, 'BOTTOMRIGHT', 0, -1) | 81 veneer.progress:SetPoint('TOPRIGHT', veneer, 'BOTTOMRIGHT', 0, -1) |
81 veneer.progress:SetHeight(BUFF_PROGRESS_SIZE + (BUFF_PROGRESS_INSET * 2)) | 82 veneer.progress:SetHeight(BUFF_PROGRESS_SIZE + (BUFF_PROGRESS_INSET * 2)) |
82 | 83 |
83 veneer.progress.fg:SetColorTexture(0,1,0,1) | 84 veneer.progress.bg:SetColorTexture(0,0,0,1) |
85 | |
86 veneer.progress.fg:SetColorTexture(1,1,1,1) | |
87 veneer.progress.fg:ClearAllPoints() | |
84 veneer.progress.fg:SetPoint('BOTTOMLEFT', BUFF_PROGRESS_INSET,BUFF_PROGRESS_INSET) | 88 veneer.progress.fg:SetPoint('BOTTOMLEFT', BUFF_PROGRESS_INSET,BUFF_PROGRESS_INSET) |
85 veneer.progress.fg:SetPoint('TOP', 0, -BUFF_PROGRESS_INSET) | 89 veneer.progress.fg:SetPoint('TOP', 0, -BUFF_PROGRESS_INSET) |
86 | 90 |
87 veneer.duration:SetFontObject(VeneerNumberFont) | 91 veneer.duration:SetFontObject(VeneerNumberFont) |
88 veneer.duration:ClearAllPoints() | 92 veneer.duration:ClearAllPoints() |
98 veneer.border:SetPoint('TOPLEFT', veneer, 'TOPLEFT', -BORDER_SIZE_L, BORDER_SIZE_U) | 102 veneer.border:SetPoint('TOPLEFT', veneer, 'TOPLEFT', -BORDER_SIZE_L, BORDER_SIZE_U) |
99 veneer.border:SetPoint('BOTTOMRIGHT', veneer, 'BOTTOMRIGHT', BORDER_SIZE_R, -BORDER_SIZE_D) | 103 veneer.border:SetPoint('BOTTOMRIGHT', veneer, 'BOTTOMRIGHT', BORDER_SIZE_R, -BORDER_SIZE_D) |
100 veneer.border:Show() | 104 veneer.border:Show() |
101 | 105 |
102 | 106 |
103 end | 107 veneers[frame] = veneer |
104 | 108 end |
105 | 109 |
106 return _G[name..'Veneer'] | 110 |
111 return veneers[frame] | |
107 end | 112 end |
108 | 113 |
109 | 114 |
110 -- Associates skinning elements with said button | 115 -- Associates skinning elements with said button |
111 local SkinFrame = function(name) | 116 local SkinFrame = function(name) |
139 if aurasCache[frame] and aurasCache[frame][5] then | 144 if aurasCache[frame] and aurasCache[frame][5] then |
140 color = DebuffTypeColor[aurasCache[frame][5]] | 145 color = DebuffTypeColor[aurasCache[frame][5]] |
141 end | 146 end |
142 | 147 |
143 veneer.progress.fg:SetColorTexture(color.r,color.g,color.b) | 148 veneer.progress.fg:SetColorTexture(color.r,color.g,color.b) |
144 veneer.border:SetColorTexture(color.r,color.g,color.b) | 149 veneer.border:SetColorTexture(0,0,0,1) |
145 end | 150 end |
146 if duration then | 151 if duration then |
147 duration:ClearAllPoints() | 152 duration:ClearAllPoints() |
148 --duration:SetPoint('TOP', frame, 'BOTTOM', 0, -8) | 153 --duration:SetPoint('TOP', frame, 'BOTTOM', 0, -8) |
149 --duration:SetFontObject(VeneerNumberFont) | 154 --duration:SetFontObject(VeneerNumberFont) |
203 visibility[self] = isVisible | 208 visibility[self] = isVisible |
204 end | 209 end |
205 veneer.underlay:Show() | 210 veneer.underlay:Show() |
206 end) | 211 end) |
207 | 212 |
208 anchors[frame] = veneer | 213 end |
209 end | 214 |
210 | |
211 local Aura_SetBorderColor = function(self, r,g,b,a) end | |
212 local Aura_OnShow = function(self) end | |
213 local Aura_OnHide = function(self) end | |
214 | 215 |
215 --- Set widgets to reflect the passed parameters | 216 --- Set widgets to reflect the passed parameters |
216 local UpdateVeneer = function (frame, duration, expires) | 217 local UpdateVeneer = function (frame, duration, expires) |
217 local veneer = GetVeneer(frame) | 218 local veneer = GetVeneer(frame) |
218 -- is it a new button? | 219 -- is it a new button? |
292 | 293 |
293 local AuraButton_Update = function(name, index, filter) | 294 local AuraButton_Update = function(name, index, filter) |
294 local bName = name..index | 295 local bName = name..index |
295 local frame = _G[bName] | 296 local frame = _G[bName] |
296 if frame and frame:IsVisible() then | 297 if frame and frame:IsVisible() then |
297 tickCounter[frame] = (tickCounter[frame] or 0) + 1 | |
298 local cacheDiff = CacheCheck(frame, UnitAura(frame.unit, frame:GetID(), frame.filter)) | 298 local cacheDiff = CacheCheck(frame, UnitAura(frame.unit, frame:GetID(), frame.filter)) |
299 -- if the name or expirationTime changed | 299 -- if the name or expirationTime changed |
300 if (cacheDiff >= 1) then | 300 if (cacheDiff >= 1) then |
301 print('|cFFFF4400', frame:GetName(), 'diff:', cacheDiff) | 301 print('|cFFFF4400', frame:GetName(), 'diff:', cacheDiff) |
302 if not skinnedFrames[frame] then | 302 if not skinnedFrames[frame] then |
336 for i = 1, BUFF_ACTUAL_DISPLAY do | 336 for i = 1, BUFF_ACTUAL_DISPLAY do |
337 local buff = _G['BuffButton'..i] | 337 local buff = _G['BuffButton'..i] |
338 if buff then | 338 if buff then |
339 numBuffs = numBuffs + 1 | 339 numBuffs = numBuffs + 1 |
340 buff:ClearAllPoints() | 340 buff:ClearAllPoints() |
341 if mod(numBuffs,12) == 1 then | 341 if mod(numBuffs,BUFFS_PER_ROW) == 1 then |
342 if numBuffs == 1 then | 342 if numBuffs == 1 then |
343 buff:SetPoint('TOPRIGHT', UIParent, 'TOPRIGHT', -120, -6) | 343 buff:SetPoint('TOPRIGHT', UIParent, 'TOPRIGHT', BUFF_FRAMES_X, BUFF_FRAMES_Y) |
344 plugin.currentTop = buff:GetTop() | 344 plugin.currentTop = buff:GetTop() |
345 else | 345 else |
346 buff:SetPoint('TOPRIGHT', topBuff, 'BOTTOMRIGHT', 0, -BUFF_BUTTON_SPACING_V) | 346 buff:SetPoint('TOPRIGHT', topBuff, 'BOTTOMRIGHT', 0, -BUFF_BUTTON_SPACING_V) |
347 end | 347 end |
348 topBuff = buff | 348 topBuff = buff |
363 debuff:SetPoint('TOPRIGHT', topBuff, 'BOTTOMRIGHT', 0, -BUFF_BUTTON_SPACING_V) | 363 debuff:SetPoint('TOPRIGHT', topBuff, 'BOTTOMRIGHT', 0, -BUFF_BUTTON_SPACING_V) |
364 else | 364 else |
365 debuff:SetPoint('TOPRIGHT', UIParent, 'TOPRIGHT', -120, -6) | 365 debuff:SetPoint('TOPRIGHT', UIParent, 'TOPRIGHT', -120, -6) |
366 end | 366 end |
367 topBuff = debuff | 367 topBuff = debuff |
368 elseif mod(numBuffs, 12) == 1 then | 368 elseif mod(numBuffs, BUFFS_PER_ROW) == 1 then |
369 debuff:SetPoint('TOPRIGHT', topBuff, 'BOTTOMRIGHT', 0, -BUFF_BUTTON_SPACING_V) | 369 debuff:SetPoint('TOPRIGHT', topBuff, 'BOTTOMRIGHT', 0, -BUFF_BUTTON_SPACING_V) |
370 topBuff = debuff | 370 topBuff = debuff |
371 else | 371 else |
372 debuff:SetPoint('TOPRIGHT', lastBuff, 'TOPLEFT', -BUFF_BUTTON_SPACING_H, 0) | 372 debuff:SetPoint('TOPRIGHT', lastBuff, 'TOPLEFT', -BUFF_BUTTON_SPACING_H, 0) |
373 end | 373 end |
396 | 396 |
397 if timeLeft < 10 then | 397 if timeLeft < 10 then |
398 if not veneer.duration.getHuge then | 398 if not veneer.duration.getHuge then |
399 veneer.duration.getHuge = true | 399 veneer.duration.getHuge = true |
400 veneer.duration:SetFontObject(VeneerNumberFontLarge) | 400 veneer.duration:SetFontObject(VeneerNumberFontLarge) |
401 veneer.duration:SetTextColor(1,0,0,1) | 401 veneer.duration:SetTextColor(1,1,0,1) |
402 end | 402 end |
403 else | 403 else |
404 if veneer.duration.getHuge then | 404 if veneer.duration.getHuge then |
405 veneer.duration.getHuge = nil | 405 veneer.duration.getHuge = nil |
406 veneer.duration:SetFontObject(VeneerNumberFont) | 406 veneer.duration:SetFontObject(VeneerNumberFont) |