Mercurial > wow > kbf
comparison KBF.lua @ 27:9967caf18b2a
updates to how vehicle swapping is handled
| author | Chris Mellon <arkanes@gmail.com> |
|---|---|
| date | Mon, 13 Dec 2010 09:01:53 -0600 |
| parents | 547b70e235fe |
| children | 2986c72f64ba |
comparison
equal
deleted
inserted
replaced
| 26:547b70e235fe | 27:9967caf18b2a |
|---|---|
| 7 | 7 |
| 8 function kbf:OnInitialize() | 8 function kbf:OnInitialize() |
| 9 self.debuffFrames = {} | 9 self.debuffFrames = {} |
| 10 self.anchor = self:CreateAnchorFrame() | 10 self.anchor = self:CreateAnchorFrame() |
| 11 self:RegisterEvent("UNIT_AURA") | 11 self:RegisterEvent("UNIT_AURA") |
| 12 self:RegisterEvent("UNIT_ENTERING_VEHICLE") | 12 self:RegisterEvent("UNIT_ENTERING_VEHICLE", "PollForVehicleChange") |
| 13 self:RegisterEvent("UNIT_EXITING_VEHICLE") | 13 self:RegisterEvent("UNIT_EXITING_VEHICLE", "PollForVehicleChange") |
| 14 -- set up the countdown timer | 14 -- set up the countdown timer |
| 15 -- TODO: Fancy enable/disable based on whether you have any timed buffs. | 15 -- TODO: Fancy enable/disable based on whether you have any timed buffs. |
| 16 -- Not a big deal, how often do you care about that | 16 -- Not a big deal, how often do you care about that |
| 17 -- also TODO: Maybe should bucket OnUpdates somehow | 17 -- also TODO: Maybe should bucket OnUpdates somehow |
| 18 -- AceTimer repeating events can only happen at 0.1 seconds, which is probably | 18 -- AceTimer repeating events can only happen at 0.1 seconds, which is probably |
| 19 -- fast enough for updating, but makes the animation look jerky | 19 -- fast enough for updating, but makes the animation look jerky |
| 20 -- need to experiment with using animation groups | |
| 20 self.update = CreateFrame("FRAME") | 21 self.update = CreateFrame("FRAME") |
| 21 self.update:SetScript("OnUpdate", function() self:OnUpdate() end) | 22 self.update:SetScript("OnUpdate", function() self:OnUpdate() end) |
| 22 self.dirty = true -- force an immediate scan on login | 23 self.dirty = true -- force an immediate scan on login |
| 23 self:HideBlizzardBuffFrames() | 24 self:HideBlizzardBuffFrames() |
| 24 self:RegisterChatCommand("kbf", "ToggleAnchor") | 25 self:RegisterChatCommand("kbf", "ToggleAnchor") |
| 27 -- a "frame" is the top-level button (secure button from the header, or one I make myself) | 28 -- a "frame" is the top-level button (secure button from the header, or one I make myself) |
| 28 -- that will contain the UI information about the buff | 29 -- that will contain the UI information about the buff |
| 29 -- a "bar" is a frame that has the icon, status bar, ect associated with it | 30 -- a "bar" is a frame that has the icon, status bar, ect associated with it |
| 30 | 31 |
| 31 -- Secure aura header doesn't self-bind to vehicle, | 32 -- Secure aura header doesn't self-bind to vehicle, |
| 32 -- so this probably only works out of combat. But thats better than nothing... | 33 -- so this only works out of combat. But thats better than nothing... |
| 33 function kbf:UNIT_ENTERING_VEHICLE(event, unit) | 34 function kbf:PollForVehicleChange(event, unit) |
| 34 if unit ~= "player" then return end | 35 if unit ~= "player" then return end |
| 35 self.dirty = true | 36 self.dirty = true |
| 36 -- hax until SAH supports vehicles - do the swap after we come out of combat | 37 -- hax until SAH supports vehicles - do the swap after we come out of combat |
| 37 if not InCombatLockdown() then | 38 -- always poll instead of insta-swapping OOC in order to simplify the UnitHasVehicleUI logic |
| 38 self.secureFrame:SetAttribute("unit", "vehicle") | 39 self.pollForUnitChange = true |
| 39 else | |
| 40 self.pollForUnitChange = true | |
| 41 end | |
| 42 end | |
| 43 | |
| 44 function kbf:UNIT_EXITING_VEHICLE(event, unit) | |
| 45 if unit ~= "player" then return end | |
| 46 self.dirty = true | |
| 47 -- hax until SAH supports vehicles - do the swap after we come out of combat | |
| 48 if not InCombatLockdown() then | |
| 49 self.secureFrame:SetAttribute("unit", "player") | |
| 50 else | |
| 51 self.pollForUnitChange = true | |
| 52 end | |
| 53 end | 40 end |
| 54 | 41 |
| 55 function kbf:HideBlizzardBuffFrames() | 42 function kbf:HideBlizzardBuffFrames() |
| 56 local function HideBlizFrame(frame) | 43 local function HideBlizFrame(frame) |
| 57 if not frame then return end | 44 if not frame then return end |
| 67 end | 54 end |
| 68 | 55 |
| 69 function kbf:OnUpdate() | 56 function kbf:OnUpdate() |
| 70 if self.pollForUnitChange and not InCombatLockdown() then | 57 if self.pollForUnitChange and not InCombatLockdown() then |
| 71 if UnitHasVehicleUI("player") then | 58 if UnitHasVehicleUI("player") then |
| 59 -- only swap if we're in a "real" vehicle with its own actions | |
| 60 -- There is possibly a timing issue here where | |
| 61 -- we have set the poll flag but the unit is not | |
| 62 -- actually "in" the vehicle yet. I'm hoping thats | |
| 63 -- handled by using exited/entered events instead of exiting/entering | |
| 72 self.secureFrame:SetAttribute("unit", "vehicle") | 64 self.secureFrame:SetAttribute("unit", "vehicle") |
| 73 else | 65 else |
| 74 self.secureFrame:SetAttribute("unit", "player") | 66 self.secureFrame:SetAttribute("unit", "player") |
| 75 end | 67 end |
| 76 self.pollForUnitChange = nil | 68 self.pollForUnitChange = nil |
