comparison KBF.lua @ 68:f5bd73181349

true in-combat vehicle swapping hooray!
author Chris Mellon <arkanes@gmail.com>
date Sat, 30 Jun 2012 18:18:18 -0500
parents 673fd9893f1e
children b467bba0224d
comparison
equal deleted inserted replaced
67:673fd9893f1e 68:f5bd73181349
9 self.oocQueue = {} 9 self.oocQueue = {}
10 -- config settings - account wide shared profile by default 10 -- config settings - account wide shared profile by default
11 self.db = LibStub("AceDB-3.0"):New("KBFSavedVars", self.defaultConfig, true) 11 self.db = LibStub("AceDB-3.0"):New("KBFSavedVars", self.defaultConfig, true)
12 -- create frames here so that they will be correctly stored in location cache by 12 -- create frames here so that they will be correctly stored in location cache by
13 -- the UI. 13 -- the UI.
14 self.anchor, self.secureHeader, self.consolidateHeader, self.consolidateProxy = self:CreateCoreFrames() 14 self.anchor, self.secureHeader, self.consolidateHeader, self.consolidateProxy, self.vehicleHeader = self:CreateCoreFrames()
15 self.debuffFrames = {} 15 self.debuffFrames = {}
16 self:RegisterEvent("UNIT_AURA") 16 self:RegisterEvent("UNIT_AURA")
17 self:RegisterEvent("UNIT_ENTERING_VEHICLE", "PollForVehicleChange")
18 self:RegisterEvent("UNIT_EXITING_VEHICLE", "PollForVehicleChange")
19 LibStub("AceConfig-3.0"):RegisterOptionsTable("KBF", self.options); 17 LibStub("AceConfig-3.0"):RegisterOptionsTable("KBF", self.options);
20 self.profilesFrame = LibStub("AceConfigDialog-3.0"):AddToBlizOptions("KBF", "KBF"); 18 self.profilesFrame = LibStub("AceConfigDialog-3.0"):AddToBlizOptions("KBF", "KBF");
21 self:RegisterChatCommand("kbf", "ToggleAnchor") 19 self:RegisterChatCommand("kbf", "ToggleAnchor")
22 20
23 21
39 -- naming convention 37 -- naming convention
40 -- a "frame" is the top-level button (secure button from the header, or one I make myself) 38 -- a "frame" is the top-level button (secure button from the header, or one I make myself)
41 -- that will contain the UI information about the buff 39 -- that will contain the UI information about the buff
42 -- a "bar" is a frame that has the icon, status bar, ect associated with it 40 -- a "bar" is a frame that has the icon, status bar, ect associated with it
43 41
44 -- Secure aura header doesn't self-bind to vehicle,
45 -- so this only works out of combat. But thats better than nothing...
46 function kbf:PollForVehicleChange(event, unit)
47 if unit ~= "player" then return end
48 self.dirty = true
49 local function performSwap()
50 if UnitHasVehicleUI("player") then
51 -- only swap if we're in a "real" vehicle with its own actions
52 -- There is possibly a timing issue here where
53 -- we have set the poll flag but the unit is not
54 -- actually "in" the vehicle yet. I'm hoping thats
55 -- handled by using exited/entered events instead of exiting/entering
56 self.secureHeader:SetAttribute("unit", "vehicle")
57 else
58 self.secureHeader:SetAttribute("unit", "player")
59 end
60 end
61 self:QueueForOOC(performSwap)
62 end
63 42
64 function kbf:HideBlizzardBuffFrames() 43 function kbf:HideBlizzardBuffFrames()
65 local function HideBlizFrame(frame) 44 local function HideBlizFrame(frame)
66 if not frame then return end 45 if not frame then return end
67 frame:UnregisterAllEvents() 46 frame:UnregisterAllEvents()
145 self:OnEnter(frame) 124 self:OnEnter(frame)
146 end 125 end
147 end 126 end
148 buffCount = buffCount+1 127 buffCount = buffCount+1
149 end 128 end
129
130 if self.vehicleHeader:IsShown() then
131 local unit = "vehicle"
132 for idx=1,99 do
133 local frame = self.vehicleHeader:GetAttribute("child"..idx)
134 if not (frame and frame:IsShown()) then break end
135 if true then
136 if self:BindBarToBuff(frame, unit) then break end
137 end
138 self:UpdateBarExpirationTime(frame)
139 -- Don't forget to refresh shown tooltips
140 if ( GameTooltip:IsOwned(frame) ) then
141 self:OnEnter(frame)
142 end
143 end
144 end
145
150 -- SAH correctly binds the weapon enchant templates now, but when temp enchants 146 -- SAH correctly binds the weapon enchant templates now, but when temp enchants
151 -- are present and used, it seems that it doesn't correctly hide un-bound 147 -- are present and used, it seems that it doesn't correctly hide un-bound
152 -- buff frames, which breaks all the layout and so forth. 148 -- buff frames, which breaks all the layout and so forth.
153 for weapon=3,1,-1 do 149 for weapon=3,1,-1 do
154 local tempEnchant = self.secureHeader:GetAttribute("tempEnchant"..weapon) 150 local tempEnchant = self.secureHeader:GetAttribute("tempEnchant"..weapon)
174 if bar then bar:Hide() else break end 170 if bar then bar:Hide() else break end
175 end 171 end
176 break 172 break
177 end 173 end
178 if not frame then 174 if not frame then
179 frame = self:ConstructBar(nil, 1, 0, 0) 175 frame = self:ConstructBar(nil, 1, 0, 0, self.secureHeader)
180 self.debuffFrames[idx] = frame 176 self.debuffFrames[idx] = frame
181 end 177 end
182 self:SetBarAppearance(frame, name, icon, stacks, duration, expirationTime) 178 self:SetBarAppearance(frame, name, icon, stacks, duration, expirationTime)
183 frame:ClearAllPoints() 179 frame:ClearAllPoints()
184 -- position it under all the buffs, with a half-bar spacing 180 -- position it under all the buffs, with a half-bar spacing
360 end 356 end
361 end 357 end
362 end 358 end
363 359
364 -- creates a icon + statusbar bar 360 -- creates a icon + statusbar bar
365 function kbf:ConstructBar(frame, r, g, b) 361 function kbf:ConstructBar(frame, r, g, b, parent)
366 local texture = "Interface\\TargetingFrame\\UI-StatusBar" 362 local texture = "Interface\\TargetingFrame\\UI-StatusBar"
367 -- Because of secureframe suckiness, these height & width numbers 363 -- Because of secureframe suckiness, these height & width numbers
368 -- have to be consistent with the stuff in KBF.xml 364 -- have to be consistent with the stuff in KBF.xml
369 local height = self.staticConfig.BAR_HEIGHT 365 local height = self.staticConfig.BAR_HEIGHT
370 local width = self.staticConfig.BAR_WIDTH -- this is the width *without* the icon 366 local width = self.staticConfig.BAR_WIDTH -- this is the width *without* the icon
377 local fontsize = 11 373 local fontsize = 11
378 local timertextwidth = fontsize * 3.6 374 local timertextwidth = fontsize * 3.6
379 local textcolor = {1, 1, 1, 1} 375 local textcolor = {1, 1, 1, 1}
380 local timertextcolor = {1, 1, 1, 1} 376 local timertextcolor = {1, 1, 1, 1}
381 if not frame then 377 if not frame then
382 frame = CreateFrame("Button", "ABC", UIParent) -- the "top level" frame that represents the bar as a whole 378 parent = parent or UIParent
379 frame = CreateFrame("Button", "ABC", parent) -- the "top level" frame that represents the bar as a whole
383 frame:SetHeight(height) 380 frame:SetHeight(height)
384 frame:SetWidth(width + height) 381 frame:SetWidth(width + height)
385 end 382 end
386 local bar = frame 383 local bar = frame
387 bar.icon = CreateFrame("Button", "ABC-Icon", bar) -- the icon 384 bar.icon = CreateFrame("Button", "ABC-Icon", bar) -- the icon
506 consolidateHeader:SetPoint("TOPRIGHT", anchor, "TOPLEFT", 0, 0) 503 consolidateHeader:SetPoint("TOPRIGHT", anchor, "TOPLEFT", 0, 0)
507 consolidateHeader:SetWidth(height + width) 504 consolidateHeader:SetWidth(height + width)
508 consolidateHeader:SetHeight(height) 505 consolidateHeader:SetHeight(height)
509 consolidateHeader:Show() 506 consolidateHeader:Show()
510 507
511 return anchor, secureHeader, consolidateHeader, consolidateProxy 508 local vehicleHeader = CreateFrame("FRAME", "KBFBuffFrame", UIParent, "SecureAuraHeaderTemplate")
509 self:SetCommonSecureHeaderAttributes(vehicleHeader)
510 vehicleHeader:SetAttribute("unit", "vehicle")
511 vehicleHeader:SetPoint("TOP", anchor, "TOP", 0, 0)
512 vehicleHeader:SetWidth(height + width)
513 vehicleHeader:SetHeight(height)
514 RegisterUnitWatch(vehicleHeader)
515
516
517 local frameHider = CreateFrame("FRAME", "KBFFrameHider", UIParent, "SecureHandlerStateTemplate")
518 frameHider:SetAttribute("unit", "vehicle")
519 frameHider:SetFrameRef("frame1", secureHeader)
520 frameHider:SetFrameRef("frame2", consolidateHeader)
521 frameHider:SetFrameRef("frame3", consolidateProxy)
522 frameHider:SetAttribute("_onstate-unitexists", [[
523 for idx=1,99 do
524 local frame = self:GetFrameRef("frame"..idx)
525 if frame then
526 if newstate then
527 frame:Hide()
528 else
529 frame:Show()
530 end
531 end
532 end
533 ]])
534 RegisterUnitWatch(frameHider, true)
535
536
537 return anchor, secureHeader, consolidateHeader, consolidateProxy, vehicleHeader
512 end 538 end
513 539
514 --- sets the attributes needed by all the headers 540 --- sets the attributes needed by all the headers
515 function kbf:SetCommonSecureHeaderAttributes(frame) 541 function kbf:SetCommonSecureHeaderAttributes(frame)
516 frame:SetAttribute("filter", "HELPFUL") 542 frame:SetAttribute("filter", "HELPFUL")