comparison classes/StanceButton.lua @ 179:bf64e71701e2

Remove support for hunter aspects in stance bar. Remove option to disable DK/paladin auras in stance bar. (drycoded)
author Flick <flickerstreak@gmail.com>
date Wed, 20 Oct 2010 23:40:41 +0000
parents df68b5a40490
children e63aefb8a555
comparison
equal deleted inserted replaced
178:2e2abdaad2e5 179:bf64e71701e2
16 -- 16 --
17 -- private 17 -- private
18 -- 18 --
19 local playerClass = select(2,UnitClass("player")) 19 local playerClass = select(2,UnitClass("player"))
20 20
21 local aspects = {
22 -- All rank one, so that the usable check works
23 GetSpellInfo(13163), -- monkey
24 GetSpellInfo(13165), -- hawk
25 GetSpellInfo(5118), -- cheetah
26 GetSpellInfo(34074), -- viper
27 GetSpellInfo(13161), -- beast
28 GetSpellInfo(13159), -- pack
29 GetSpellInfo(20043), -- wild
30 GetSpellInfo(61846), -- dragonhawk
31 }
32
33 local aspectLinks = { }
34
35 local eventList = { 21 local eventList = {
36 "PLAYER_REGEN_ENABLED", 22 "PLAYER_REGEN_ENABLED",
37 "PLAYER_ENTERING_WORLD", 23 "PLAYER_ENTERING_WORLD",
38 "UPDATE_SHAPESHIFT_FORM", 24 "UPDATE_SHAPESHIFT_FORM",
39 "UPDATE_SHAPESHIFT_FORMS", 25 "UPDATE_SHAPESHIFT_FORMS",
40 "UPDATE_SHAPESHIFT_USABLE", 26 "UPDATE_SHAPESHIFT_USABLE",
41 "UPDATE_SHAPESHIFT_COOLDOWN", 27 "UPDATE_SHAPESHIFT_COOLDOWN",
42 "UPDATE_BINDINGS", 28 "UPDATE_BINDINGS",
43 } 29 }
44
45 local eventListHunter = {
46 "PLAYER_REGEN_ENABLED",
47 "PLAYER_ENTERING_WORLD",
48 "SPELL_UPDATE_COOLDOWN",
49 "SPELL_UPDATE_USABLE",
50 "UNIT_AURA",
51 "SPELLS_CHANGED",
52 "UPDATE_BINDINGS",
53 }
54
55 if playerClass == "HUNTER" then
56 eventList = eventListHunter
57 end
58 30
59 -- 31 --
60 -- Stance Button class 32 -- Stance Button class
61 -- 33 --
62 local Super = ReAction.Button 34 local Super = ReAction.Button
66 function Stance:New( idx, moduleConfig, bar, idHint ) 38 function Stance:New( idx, moduleConfig, bar, idHint )
67 local name = format("ReAction_%s_Stance_%d",bar:GetName(),idx) 39 local name = format("ReAction_%s_Stance_%d",bar:GetName(),idx)
68 40
69 self = Super.New(self, name, moduleConfig.buttons[bar:GetName()][idx], bar, idx, "SecureActionButtonTemplate, ActionButtonTemplate" ) 41 self = Super.New(self, name, moduleConfig.buttons[bar:GetName()][idx], bar, idx, "SecureActionButtonTemplate, ActionButtonTemplate" )
70 self.moduleConfig = moduleConfig 42 self.moduleConfig = moduleConfig
71 self.hunterIdx = 1
72 43
73 local f = self:GetFrame() 44 local f = self:GetFrame()
74 local barFrame = bar:GetFrame() 45 local barFrame = bar:GetFrame()
75 local config = self:GetConfig() 46 local config = self:GetConfig()
76 47
108 self:Refresh() 79 self:Refresh()
109 80
110 return self 81 return self
111 end 82 end
112 83
113 function Stance:GetModuleConfig()
114 -- this is the Stance module config structure,
115 -- not the config structure of the bar itself
116 return self.moduleConfig
117 end
118
119 function Stance:GetActionID() 84 function Stance:GetActionID()
120 return self.config.stanceID 85 return self.config.stanceID
121 end 86 end
122 87
123 function Stance:UpdateAction() 88 function Stance:UpdateAction()
125 self.updatePending = true 90 self.updatePending = true
126 else 91 else
127 self.updatePending = false 92 self.updatePending = false
128 local idx = self:GetActionID() 93 local idx = self:GetActionID()
129 local f = self:GetFrame() 94 local f = self:GetFrame()
130 local c = self:GetModuleConfig() 95 if idx > GetNumShapeshiftForms() then
131 if playerClass == "HUNTER" then
132 if c.showHunterAspects then
133 -- re-map the index in the case of "hide monkey/hawk"
134 if c.hideMonkeyHawk then
135 local usable, outOfMana = IsUsableSpell(aspects[8])
136 if usable or outOfMana then
137 idx = idx + 2
138 if idx > 8 then
139 f:Hide()
140 return
141 end
142 end
143 end
144 self.hunterIdx = idx
145 -- cache the highest rank spellID
146 if not aspectLinks[aspects[idx]] then
147 aspectLinks[aspects[idx]] = GetSpellLink(aspects[idx],"")
148 end
149 local usable, outOfMana = IsUsableSpell(aspects[idx])
150 if usable or outOfMana then
151 f:SetAttribute("spell",aspects[idx])
152 f:Show()
153 self:Update()
154 else
155 -- haven't learned this spell yet
156 f:Hide()
157 end
158 else
159 f:Hide()
160 end
161 elseif idx > GetNumShapeshiftForms() or
162 playerClass == "PALADIN" and c.hidePaladinAuras or
163 playerClass == "DEATHKNIGHT" and c.hideDKPresences then
164 f:Hide() 96 f:Hide()
165 else 97 else
166 f:SetAttribute("spell", select(2,GetShapeshiftFormInfo(idx))) 98 f:SetAttribute("spell", select(2,GetShapeshiftFormInfo(idx)))
167 f:Show() 99 f:Show()
168 self:Update() 100 self:Update()
175 self:UpdateHotkey() 107 self:UpdateHotkey()
176 self:UpdateAction() 108 self:UpdateAction()
177 end 109 end
178 110
179 function Stance:Update() 111 function Stance:Update()
180 local texture, isActive, isCastable 112 local texture, _, isActive, isCastable = GetShapeshiftFormInfo(self:GetActionID())
181 if playerClass == "HUNTER" then
182 local name, rank
183 local spell = aspects[self.hunterIdx]
184 name, rank, texture = GetSpellInfo(spell)
185 isCastable = IsUsableSpell(spell)
186 for i = 1, 40 do
187 local buff = UnitBuff("player",i,true)
188 if not buff then break end
189 if buff == spell then
190 isActive = true
191 texture = "Interface\\Icons\\Spell_Nature_WispSplode"
192 break
193 end
194 end
195 else
196 local _
197 texture, _, isActive, isCastable = GetShapeshiftFormInfo(self:GetActionID())
198 end
199 113
200 local icon = self.frames.icon 114 local icon = self.frames.icon
201 icon:SetTexture(texture) 115 icon:SetTexture(texture)
202 self:GetFrame():SetChecked( isActive and 1 or 0 ) 116 self:GetFrame():SetChecked( isActive and 1 or 0 )
203 if isCastable then 117 if isCastable then
209 123
210 self:UpdateCooldown() 124 self:UpdateCooldown()
211 end 125 end
212 126
213 function Stance:UpdateCooldown() 127 function Stance:UpdateCooldown()
214 local start, duration, enabled 128 local start, duration, enabled = GetShapeshiftFormCooldown(self:GetActionID())
215 if playerClass == "HUNTER" then
216 local spell = aspects[self.hunterIdx]
217 if spell then
218 start, duration, enabled = GetSpellCooldown(spell)
219 end
220 else
221 start, duration, enabled = GetShapeshiftFormCooldown(self:GetActionID())
222 end
223 if start then 129 if start then
224 CooldownFrame_SetTimer(self.frames.cooldown, start, duration, enabled) 130 CooldownFrame_SetTimer(self.frames.cooldown, start, duration, enabled)
225 end 131 end
226 end 132 end
227 133
229 if GetCVar("UberTooltips") == "1" then 135 if GetCVar("UberTooltips") == "1" then
230 GameTooltip_SetDefaultAnchor(GameTooltip, self:GetFrame()) 136 GameTooltip_SetDefaultAnchor(GameTooltip, self:GetFrame())
231 else 137 else
232 GameTooltip:SetOwner(self:GetFrame(), "ANCHOR_RIGHT") 138 GameTooltip:SetOwner(self:GetFrame(), "ANCHOR_RIGHT")
233 end 139 end
234 if playerClass == "HUNTER" then 140 GameTooltip:SetShapeshift(self:GetActionID())
235 local aspect = aspects[self.hunterIdx]
236 if aspect and aspectLinks[aspect] then
237 GameTooltip:SetHyperlink(aspectLinks[aspect])
238 end
239 else
240 GameTooltip:SetShapeshift(self:GetActionID())
241 end
242 end 141 end
243 142
244 function Stance:OnEnter() 143 function Stance:OnEnter()
245 self:SetTooltip() 144 self:SetTooltip()
246 end 145 end
259 if self.updatePending then 158 if self.updatePending then
260 self:UpdateAction() 159 self:UpdateAction()
261 end 160 end
262 elseif event == "UPDATE_SHAPESHIFT_COOLDOWN" then 161 elseif event == "UPDATE_SHAPESHIFT_COOLDOWN" then
263 self:UpdateCooldown() 162 self:UpdateCooldown()
264 elseif event == "UPDATE_SHAPESHIFT_FORMS" or 163 elseif event == "UPDATE_SHAPESHIFT_FORMS" then
265 event == "SPELLS_CHANGED" then
266 aspectLinks = { } -- force repopulate of the spellIDs
267 self:UpdateAction() 164 self:UpdateAction()
268 elseif event == "UNIT_AURA" then 165 elseif event == "UNIT_AURA" then
269 if arg == "player" then 166 if arg == "player" then
270 self:Update() 167 self:Update()
271 end 168 end