Mercurial > wow > kbf
comparison KBF.lua @ 45:ca720b4b5435
fix location not being stored, add a framework for doing stuff when OOC
| author | Chris Mellon <arkanes@gmail.com> |
|---|---|
| date | Sat, 19 Feb 2011 07:23:26 -0600 |
| parents | 81cade22f2f9 |
| children | 04d0d145a676 |
comparison
equal
deleted
inserted
replaced
| 44:81cade22f2f9 | 45:ca720b4b5435 |
|---|---|
| 4 | 4 |
| 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 -- create frames here so that they will be correctly stored in location cache by | |
| 10 -- the UI. | |
| 11 self.anchor, self.secureHeader, self.consolidateHeader, self.consolidateProxy = self:CreateCoreFrames() | |
| 9 self.debuffFrames = {} | 12 self.debuffFrames = {} |
| 10 local defaultSettings = { | 13 local defaultSettings = { |
| 11 -- global bar settings | 14 -- global bar settings |
| 12 -- overrides for buffs | 15 -- overrides for buffs |
| 13 -- overrides for debuffs | 16 -- overrides for debuffs |
| 14 } | 17 } |
| 15 self:RegisterEvent("UNIT_AURA") | 18 self:RegisterEvent("UNIT_AURA") |
| 16 self:RegisterEvent("UNIT_ENTERING_VEHICLE", "PollForVehicleChange") | 19 self:RegisterEvent("UNIT_ENTERING_VEHICLE", "PollForVehicleChange") |
| 17 self:RegisterEvent("UNIT_EXITING_VEHICLE", "PollForVehicleChange") | 20 self:RegisterEvent("UNIT_EXITING_VEHICLE", "PollForVehicleChange") |
| 18 self:RegisterChatCommand("kbf", "ToggleAnchor") | 21 self:RegisterChatCommand("kbf", "ToggleAnchor") |
| 22 | |
| 23 self.oocQueue = {} | |
| 19 end | 24 end |
| 20 | 25 |
| 21 function kbf:OnEnable() | 26 function kbf:OnEnable() |
| 22 self.anchor, self.secureHeader, self.consolidateHeader, self.consolidateProxy = self:CreateCoreFrames() | |
| 23 -- set up the countdown timer | 27 -- set up the countdown timer |
| 24 -- TODO: Fancy enable/disable based on whether you have any timed buffs. | 28 -- TODO: Fancy enable/disable based on whether you have any timed buffs. |
| 25 -- Not a big deal, how often do you care about that | 29 -- Not a big deal, how often do you care about that |
| 26 -- also TODO: Maybe should bucket OnUpdates somehow | 30 -- also TODO: Maybe should bucket OnUpdates somehow |
| 27 -- AceTimer repeating events can only happen at 0.1 seconds, which is probably | 31 -- AceTimer repeating events can only happen at 0.1 seconds, which is probably |
| 57 end | 61 end |
| 58 HideBlizFrame(BuffFrame) | 62 HideBlizFrame(BuffFrame) |
| 59 HideBlizFrame(ConsolidatedBuffs) | 63 HideBlizFrame(ConsolidatedBuffs) |
| 60 HideBlizFrame(TemporaryEnchantFrame) | 64 HideBlizFrame(TemporaryEnchantFrame) |
| 61 | 65 |
| 66 end | |
| 67 | |
| 68 -- enqueues a callable that will be run once in-combat lockdown is past | |
| 69 -- all callables will be executed in a single run, in the order they were enqueued | |
| 70 -- if called when OOC, the function will be called immediately, unless the alwaysQueue parameter is true, | |
| 71 -- in which case it will be appended normally | |
| 72 function kbf:QueueForOOC(func, alwaysQueue) | |
| 73 if InCombatLockDown() or alwaysQueue then | |
| 74 tinsert(self.oocQueue, func) | |
| 75 else | |
| 76 func() | |
| 77 end | |
| 62 end | 78 end |
| 63 | 79 |
| 64 function kbf:OnUpdate() | 80 function kbf:OnUpdate() |
| 65 if self.pollForUnitChange and not InCombatLockdown() then | 81 if self.pollForUnitChange and not InCombatLockdown() then |
| 66 if UnitHasVehicleUI("player") then | 82 if UnitHasVehicleUI("player") then |
| 73 else | 89 else |
| 74 self.secureHeader:SetAttribute("unit", "player") | 90 self.secureHeader:SetAttribute("unit", "player") |
| 75 end | 91 end |
| 76 self.pollForUnitChange = nil | 92 self.pollForUnitChange = nil |
| 77 end | 93 end |
| 94 | |
| 95 while #self.oocQueue > 0 do | |
| 96 func = table.remove(self.oocQueue) | |
| 97 func() | |
| 98 end | |
| 99 | |
| 78 local unit = self.secureHeader:GetAttribute("unit") | 100 local unit = self.secureHeader:GetAttribute("unit") |
| 79 local buffCount = 0 | 101 local buffCount = 0 |
| 80 for idx=1,99 do | 102 for idx=1,99 do |
| 81 local frame = self.secureHeader:GetAttribute("child"..idx) | 103 local frame = self.secureHeader:GetAttribute("child"..idx) |
| 82 if not (frame and frame:IsShown()) then break end | 104 if not (frame and frame:IsShown()) then break end |
| 84 if self.dirty then | 106 if self.dirty then |
| 85 if self:BindBarToBuff(frame, unit) then break end | 107 if self:BindBarToBuff(frame, unit) then break end |
| 86 end | 108 end |
| 87 self:UpdateBarExpirationTime(frame) | 109 self:UpdateBarExpirationTime(frame) |
| 88 -- Don't forget to refresh shown tooltips | 110 -- Don't forget to refresh shown tooltips |
| 89 if ( GameTooltip:IsOwned(frame) ) then | 111 if (GameTooltip:IsOwned(frame)) then |
| 90 self:OnEnter(frame) | 112 self:OnEnter(frame) |
| 91 end | 113 end |
| 92 end | 114 end |
| 93 | 115 |
| 94 -- consolidated buffs | 116 -- consolidated buffs |
| 125 self:UpdateBarExpirationTime(tempEnchant) | 147 self:UpdateBarExpirationTime(tempEnchant) |
| 126 buffCount = buffCount + 1 | 148 buffCount = buffCount + 1 |
| 127 -- SAH binds the offhand enchant to the main hand for removal purposes. | 149 -- SAH binds the offhand enchant to the main hand for removal purposes. |
| 128 -- fix it up if we're out of combat | 150 -- fix it up if we're out of combat |
| 129 -- TODO: maybe this should only happen if we're dirty | 151 -- TODO: maybe this should only happen if we're dirty |
| 130 if not InCombatLockdown() then | 152 QueueForOOC(function() tempEnchant:SetAttribute('target-slot', 17) end) |
| 131 tempEnchant:SetAttribute('target-slot', 17) | |
| 132 end | |
| 133 end | 153 end |
| 134 if ( tempEnchant and GameTooltip:IsOwned(tempEnchant) ) then | 154 if ( tempEnchant and GameTooltip:IsOwned(tempEnchant) ) then |
| 135 self:OnEnter(tempEnchant) | 155 self:OnEnter(tempEnchant) |
| 136 end | 156 end |
| 137 -- make a fake third buff bar. It can't be used to cancel the buff, but | 157 -- make a fake third buff bar. It can't be used to cancel the buff, but |
| 146 self.tempEnchant3:Show() | 166 self.tempEnchant3:Show() |
| 147 self.tempEnchant3:SetScript("OnEnter", function() kbf:OnEnter(self.tempEnchant3) end) | 167 self.tempEnchant3:SetScript("OnEnter", function() kbf:OnEnter(self.tempEnchant3) end) |
| 148 self.tempEnchant3:SetScript("OnLeave", function() GameTooltip:Hide() end) | 168 self.tempEnchant3:SetScript("OnLeave", function() GameTooltip:Hide() end) |
| 149 self.tempEnchant3:EnableMouse(true) | 169 self.tempEnchant3:EnableMouse(true) |
| 150 --TODO: queue up for setting when leaving combat | 170 --TODO: queue up for setting when leaving combat |
| 151 self.tempEnchant3:SetAttribute('target-slot', 18) | 171 QueueForOOC(function() self.tempEnchant3:SetAttribute('target-slot', 18) end) |
| 152 -- set up the tooltip | 172 -- set up the tooltip |
| 153 end | 173 end |
| 154 -- TODO: If we're out of combat and theres an OH enchant, | 174 -- TODO: If we're out of combat and theres an OH enchant, |
| 155 -- create a secure action button & position it relative | 175 -- create a secure action button & position it relative |
| 156 -- to that. What happens when the OH weapon enchant frame | 176 -- to that. What happens when the OH weapon enchant frame |
