Mercurial > wow > kbf
comparison KBF.lua @ 38:0addebdd412f
Do the refactoring that was needed for the consolidated header, works in a pretty clean way now, still need to get it set up for flyouts and in-combat support
author | Chris Mellon <arkanes@gmail.com> |
---|---|
date | Fri, 31 Dec 2010 13:13:54 -0600 |
parents | 15b9e97ab2d2 |
children | 0aeebc3f4fe9 |
comparison
equal
deleted
inserted
replaced
37:15b9e97ab2d2 | 38:0addebdd412f |
---|---|
5 local kbf = LibStub("AceAddon-3.0"):NewAddon(kbf, "KBF", "AceEvent-3.0", "AceConsole-3.0") | 5 local kbf = LibStub("AceAddon-3.0"):NewAddon(kbf, "KBF", "AceEvent-3.0", "AceConsole-3.0") |
6 | 6 |
7 | 7 |
8 function kbf:OnInitialize() | 8 function kbf:OnInitialize() |
9 self.debuffFrames = {} | 9 self.debuffFrames = {} |
10 self.anchor = self:CreateAnchorFrame() | |
11 self:RegisterEvent("UNIT_AURA") | 10 self:RegisterEvent("UNIT_AURA") |
12 self:RegisterEvent("UNIT_ENTERING_VEHICLE", "PollForVehicleChange") | 11 self:RegisterEvent("UNIT_ENTERING_VEHICLE", "PollForVehicleChange") |
13 self:RegisterEvent("UNIT_EXITING_VEHICLE", "PollForVehicleChange") | 12 self:RegisterEvent("UNIT_EXITING_VEHICLE", "PollForVehicleChange") |
14 -- set up the countdown timer | 13 self:RegisterChatCommand("kbf", "ToggleAnchor") |
14 end | |
15 | |
16 function kbf:OnEnable() | |
17 self.anchor, self.secureHeader, self.consolidateHeader, self.consolidateProxy = self:CreateCoreFrames() | |
18 -- set up the countdown timer | |
15 -- TODO: Fancy enable/disable based on whether you have any timed buffs. | 19 -- TODO: Fancy enable/disable based on whether you have any timed buffs. |
16 -- Not a big deal, how often do you care about that | 20 -- Not a big deal, how often do you care about that |
17 -- also TODO: Maybe should bucket OnUpdates somehow | 21 -- also TODO: Maybe should bucket OnUpdates somehow |
18 -- AceTimer repeating events can only happen at 0.1 seconds, which is probably | 22 -- AceTimer repeating events can only happen at 0.1 seconds, which is probably |
19 -- fast enough for updating, but makes the animation look jerky | 23 -- fast enough for updating, but makes the animation look jerky |
20 -- need to experiment with using animation groups | 24 -- need to experiment with using animation groups |
21 self.update = CreateFrame("FRAME") | 25 self.update = CreateFrame("FRAME") |
22 self.update:SetScript("OnUpdate", function() self:OnUpdate() end) | 26 self.update:SetScript("OnUpdate", function() self:OnUpdate() end) |
23 self.dirty = true -- force an immediate scan on login | 27 self.dirty = true -- force an immediate scan on login |
24 self:HideBlizzardBuffFrames() | 28 self:HideBlizzardBuffFrames() |
25 self:RegisterChatCommand("kbf", "ToggleAnchor") | |
26 end | 29 end |
27 -- naming convention | 30 -- naming convention |
28 -- a "frame" is the top-level button (secure button from the header, or one I make myself) | 31 -- a "frame" is the top-level button (secure button from the header, or one I make myself) |
29 -- that will contain the UI information about the buff | 32 -- that will contain the UI information about the buff |
30 -- a "bar" is a frame that has the icon, status bar, ect associated with it | 33 -- a "bar" is a frame that has the icon, status bar, ect associated with it |
59 -- only swap if we're in a "real" vehicle with its own actions | 62 -- only swap if we're in a "real" vehicle with its own actions |
60 -- There is possibly a timing issue here where | 63 -- There is possibly a timing issue here where |
61 -- we have set the poll flag but the unit is not | 64 -- we have set the poll flag but the unit is not |
62 -- actually "in" the vehicle yet. I'm hoping thats | 65 -- actually "in" the vehicle yet. I'm hoping thats |
63 -- handled by using exited/entered events instead of exiting/entering | 66 -- handled by using exited/entered events instead of exiting/entering |
64 self.secureFrame:SetAttribute("unit", "vehicle") | 67 self.secureHeader:SetAttribute("unit", "vehicle") |
65 else | 68 else |
66 self.secureFrame:SetAttribute("unit", "player") | 69 self.secureHeader:SetAttribute("unit", "player") |
67 end | 70 end |
68 self.pollForUnitChange = nil | 71 self.pollForUnitChange = nil |
69 end | 72 end |
70 local unit = self.secureFrame:GetAttribute("unit") | 73 local unit = self.secureHeader:GetAttribute("unit") |
71 local buffCount = 0 | 74 local buffCount = 0 |
72 for idx=1,99 do | 75 for idx=1,99 do |
73 local frame = self.secureFrame:GetAttribute("child"..idx) | 76 local frame = self.secureHeader:GetAttribute("child"..idx) |
74 if not (frame and frame:IsShown()) then break end | 77 if not (frame and frame:IsShown()) then break end |
75 buffCount = buffCount + 1 | 78 buffCount = buffCount + 1 |
76 if self.dirty then | 79 if self.dirty then |
77 if self:BindBarToBuff(frame, unit) then break end | 80 if self:BindBarToBuff(frame, unit) then break end |
78 end | 81 end |
83 end | 86 end |
84 end | 87 end |
85 | 88 |
86 -- consolidated buffs | 89 -- consolidated buffs |
87 if self.consolidateProxy:IsShown() then | 90 if self.consolidateProxy:IsShown() then |
88 self.consolidateHeader:Show() -- *** STATE DRIVEN | 91 --self.consolidateHeader:Show() -- *** STATE DRIVEN |
89 for idx=1,99 do | 92 for idx=1,99 do |
90 local frame = self.consolidateHeader:GetAttribute("child"..idx) | 93 local frame = self.consolidateHeader:GetAttribute("child"..idx) |
91 if not (frame and frame:IsShown()) then break end | 94 if not (frame and frame:IsShown()) then break end |
92 if self.dirty then | 95 if self.dirty then |
93 if self:BindBarToBuff(frame, unit) then break end | 96 if self:BindBarToBuff(frame, unit) then break end |
97 if ( GameTooltip:IsOwned(frame) ) then | 100 if ( GameTooltip:IsOwned(frame) ) then |
98 self:OnEnter(frame) | 101 self:OnEnter(frame) |
99 end | 102 end |
100 end | 103 end |
101 else | 104 else |
102 self.consolidateHeader:Hide() -- *** STATE DRIVEN | 105 --self.consolidateHeader:Hide() -- *** STATE DRIVEN |
103 end | 106 end |
104 | 107 |
105 -- temporary enchants | 108 -- temporary enchants |
106 local tempEnchant = self.secureFrame:GetAttribute("tempEnchant1") | 109 local tempEnchant = self.secureHeader:GetAttribute("tempEnchant1") |
107 if tempEnchant and tempEnchant:IsShown() then | 110 if tempEnchant and tempEnchant:IsShown() then |
108 if self.dirty or true then | 111 if self.dirty or true then |
109 self:BindBarToWeaponEnchant(tempEnchant, 16) | 112 self:BindBarToWeaponEnchant(tempEnchant, 16) |
110 end | 113 end |
111 self:UpdateBarExpirationTime(tempEnchant) | 114 self:UpdateBarExpirationTime(tempEnchant) |
112 buffCount = buffCount + 1 | 115 buffCount = buffCount + 1 |
113 end | 116 end |
114 tempEnchant = self.secureFrame:GetAttribute("tempEnchant2") | 117 tempEnchant = self.secureHeader:GetAttribute("tempEnchant2") |
115 if tempEnchant and tempEnchant:IsShown() then | 118 if tempEnchant and tempEnchant:IsShown() then |
116 if self.dirty or true then | 119 if self.dirty or true then |
117 self:BindBarToWeaponEnchant(tempEnchant, 17) | 120 self:BindBarToWeaponEnchant(tempEnchant, 17) |
118 end | 121 end |
119 self:UpdateBarExpirationTime(tempEnchant) | 122 self:UpdateBarExpirationTime(tempEnchant) |
174 end | 177 end |
175 self.dirty = nil | 178 self.dirty = nil |
176 end | 179 end |
177 | 180 |
178 function kbf:UNIT_AURA(event, unit) | 181 function kbf:UNIT_AURA(event, unit) |
179 if unit ~= self.secureFrame:GetAttribute("unit") then return end | 182 if unit ~= self.secureHeader:GetAttribute("unit") then return end |
180 self.dirty = true | 183 self.dirty = true |
181 end | 184 end |
182 | 185 |
183 function kbf:UpdateBarExpirationTime(frame) | 186 function kbf:UpdateBarExpirationTime(frame) |
184 if frame.expirationTime then | 187 if frame.expirationTime then |
358 bar.text:SetText("text") | 361 bar.text:SetText("text") |
359 bar.text:SetTextColor(textcolor[1], textcolor[2], textcolor[3], textcolor[4]) | 362 bar.text:SetTextColor(textcolor[1], textcolor[2], textcolor[3], textcolor[4]) |
360 return bar | 363 return bar |
361 end | 364 end |
362 | 365 |
363 function kbf:CreateAnchorFrame() | 366 function kbf:CreateCoreFrames() |
364 -- give it a name so it'll remember its position | 367 -- this is the visible anchor frame that the user interacts with |
368 -- to move the buffs around | |
365 local anchor = CreateFrame("FRAME", "KBFAnchorFrame", UIParent) | 369 local anchor = CreateFrame("FRAME", "KBFAnchorFrame", UIParent) |
366 anchor:SetClampedToScreen(true) | 370 anchor:SetClampedToScreen(true) |
367 anchor:SetBackdrop({bgFile = "Interface/Tooltips/UI-Tooltip-Background", | 371 anchor:SetBackdrop({bgFile = "Interface/Tooltips/UI-Tooltip-Background", |
368 edgeFile = "Interface/Tooltips/UI-Tooltip-Border", | 372 edgeFile = "Interface/Tooltips/UI-Tooltip-Border", |
369 tile = true, tileSize = 16, edgeSize = 12, | 373 tile = true, tileSize = 16, edgeSize = 12, |
384 anchor:SetScript("OnDragStart", anchor.StartMoving) | 388 anchor:SetScript("OnDragStart", anchor.StartMoving) |
385 anchor:SetScript("OnDragStop", anchor.StopMovingOrSizing) | 389 anchor:SetScript("OnDragStop", anchor.StopMovingOrSizing) |
386 anchor:ClearAllPoints() | 390 anchor:ClearAllPoints() |
387 anchor:SetPoint("TOPRIGHT", UIParent, "TOPRIGHT", 0, 0) | 391 anchor:SetPoint("TOPRIGHT", UIParent, "TOPRIGHT", 0, 0) |
388 anchor:Hide() | 392 anchor:Hide() |
393 -- this is the parent & host for the secure aura buttons. | |
389 | 394 |
390 self.secureFrame = self:CreateSecureHeaderFrame("KBFBuffFrame", "SecureAuraHeaderTemplate") | 395 local secureHeader = CreateFrame("FRAME", "KBFBuffFrame", UIParent, "SecureAuraHeaderTemplate") |
391 self.secureFrame:SetPoint("TOP", anchor, "TOP", 0, 0) | 396 self:SetCommonSecureHeaderAttributes(secureHeader) |
392 self.secureFrame:SetAttribute("consolidateTo", 1) | 397 secureHeader:SetAttribute("consolidateTo", 1) |
393 -- pre-create the consolidated proxy & headers so I can decide what they look like | 398 secureHeader:SetPoint("TOP", anchor, "TOP", 0, 0) |
394 -- lazy - just make it a regular bar for now | 399 |
395 self.consolidateProxy = self:ConstructBar() | 400 -- this is the "button" in the aura flow that represents the consolidated buffs. |
396 self.secureFrame:SetAttribute("consolidateProxy", self.consolidateProxy) | 401 -- pre-creating it here in order to perform customization |
397 self.secureFrame:SetAttribute("frameref-proxy", GetFrameHandle(self.consolidateProxy)) | 402 local consolidateProxy = self:ConstructBar() |
398 -- pre-create the consolidated header | 403 secureHeader:SetAttribute("consolidateProxy", consolidateProxy) |
399 self.consolidateHeader = self:CreateSecureHeaderFrame("KBFConsolidatedAnchorFrame") | 404 secureHeader:SetAttribute("frameref-proxy", GetFrameHandle(consolidateProxy)) |
400 self.secureFrame:SetAttribute("consolidateHeader", self.consolidateHeader) | 405 -- this is the equivilent of the secureHeader for the consolidated buffs |
401 self.consolidateHeader:SetPoint("RIGHT", self.consolidateProxy, "LEFT", 0, 0) | 406 -- pre-creating again, so we can customize/size/position it |
402 self.consolidateHeader:SetBackdrop({bgFile = "Interface/Tooltips/UI-Tooltip-Background", | 407 local consolidateHeader = CreateFrame("FRAME", "KBFConsolidatedAnchorFrame", consolidateProxy) |
403 edgeFile = "Interface/Tooltips/UI-Tooltip-Border", | 408 self:SetCommonSecureHeaderAttributes(consolidateHeader) |
404 tile = true, tileSize = 16, edgeSize = 12, | 409 secureHeader:SetAttribute("consolidateHeader", consolidateHeader) |
405 insets = { left = 4, right = 4, top = 4, bottom = 4 }, | 410 -- position it relative to the proxy, so it can appear where we want it |
406 }) | 411 consolidateHeader:SetPoint("TOPRIGHT", consolidateProxy, "TOPLEFT", 0, 0) |
407 self.consolidateHeader:SetWidth(200 +16) | 412 consolidateHeader:SetWidth(200 +16) |
408 self.consolidateHeader:SetHeight(16) | 413 consolidateHeader:SetHeight(16) |
409 self.consolidateHeader:Show() | 414 consolidateHeader:Show() |
410 self.consolidateProxy:SetAttribute("header", self.consolidateHeader); | 415 consolidateProxy:SetAttribute("header", consolidateHeader); |
411 self.consolidateProxy:SetAttribute("frameref-header", GetFrameHandle(self.consolidateHeader)) | 416 consolidateProxy:SetAttribute("frameref-header", GetFrameHandle(consolidateHeader)) |
412 return anchor | 417 return anchor, secureHeader, consolidateHeader, consolidateProxy |
413 end | 418 end |
414 | 419 |
415 function kbf:CreateSecureHeaderFrame(name, template) | 420 --- sets the attributes needed by all the headers |
416 local frame = CreateFrame("FRAME", name, UIParent, template) | 421 function kbf:SetCommonSecureHeaderAttributes(frame) |
417 frame:SetAttribute("filter", "HELPFUL") | 422 frame:SetAttribute("filter", "HELPFUL") |
418 frame:SetAttribute("toggleForVehicle", true) -- this doesn't actually work right now, but maybe it eventually will | 423 frame:SetAttribute("toggleForVehicle", true) -- this doesn't actually work right now, but maybe it eventually will |
419 frame:SetAttribute("template", "KBFSecureUnitAuraTemplate") | 424 frame:SetAttribute("template", "KBFSecureUnitAuraTemplate") |
420 frame:SetAttribute("point", "TOP") | 425 frame:SetAttribute("point", "TOP") |
421 frame:SetAttribute("wrapAfter", 100) -- required due to bugs in secure header | 426 frame:SetAttribute("wrapAfter", 100) -- required due to bugs in secure header |
432 frame:Show() -- has to be shown, otherwise the child frames don't show | 437 frame:Show() -- has to be shown, otherwise the child frames don't show |
433 return frame | 438 return frame |
434 end | 439 end |
435 | 440 |
436 function kbf:ShowAnchor() | 441 function kbf:ShowAnchor() |
437 self.secureFrame:ClearAllPoints() | 442 self.secureHeader:ClearAllPoints() |
438 self.secureFrame:SetPoint("TOP", self.anchor, "BOTTOM", 0, 0) | 443 self.secureHeader:SetPoint("TOP", self.anchor, "BOTTOM", 0, 0) |
439 self.anchor:Show() | 444 self.anchor:Show() |
440 end | 445 end |
441 | 446 |
442 function kbf:HideAnchor() | 447 function kbf:HideAnchor() |
443 self.secureFrame:ClearAllPoints() | 448 self.secureHeader:ClearAllPoints() |
444 self.secureFrame:SetPoint("TOP", self.anchor, "TOP", 0, 0) | 449 self.secureHeader:SetPoint("TOP", self.anchor, "TOP", 0, 0) |
445 self.anchor:Hide() | 450 self.anchor:Hide() |
446 end | 451 end |
447 | 452 |
448 function kbf:ToggleAnchor() | 453 function kbf:ToggleAnchor() |
449 if self.anchor:IsShown() then | 454 if self.anchor:IsShown() then |