Mercurial > wow > reaction
comparison StanceButton.lua @ 257:920d17851a93 stable
Merge 1.1 beta 4 to stable
author | Flick |
---|---|
date | Tue, 12 Apr 2011 16:06:31 -0700 |
parents | 65f2805957a0 |
children | 9e708a155ab9 |
comparison
equal
deleted
inserted
replaced
210:b2b105747466 | 257:920d17851a93 |
---|---|
1 local addonName, addonTable = ... | |
2 local ReAction = addonTable.ReAction | |
3 local L = ReAction.L | |
4 local _G = _G | |
5 local CreateFrame = CreateFrame | |
6 local format = string.format | |
7 local GetCVar = GetCVar | |
8 local GameTooltip_SetDefaultAnchor = GameTooltip_SetDefaultAnchor | |
9 local CooldownFrame_SetTimer = CooldownFrame_SetTimer | |
10 local InCombatLockdown = InCombatLockdown | |
11 local GetNumShapeshiftForms = GetNumShapeshiftForms | |
12 local GetShapeshiftFormInfo = GetShapeshiftFormInfo | |
13 local IsUsableSpell = IsUsableSpell | |
14 local GetSpellInfo = GetSpellInfo | |
15 | |
16 -- | |
17 -- private | |
18 -- | |
19 local playerClass = select(2,UnitClass("player")) | |
20 | |
21 local eventList = { | |
22 "PLAYER_REGEN_ENABLED", | |
23 "PLAYER_ENTERING_WORLD", | |
24 "UPDATE_SHAPESHIFT_FORM", | |
25 "UPDATE_SHAPESHIFT_FORMS", | |
26 "UPDATE_SHAPESHIFT_USABLE", | |
27 "UPDATE_SHAPESHIFT_COOLDOWN", | |
28 "UPDATE_BINDINGS", | |
29 } | |
30 | |
31 -- | |
32 -- Stance Button class | |
33 -- | |
34 local buttonTypeID = "Stance" | |
35 local Super = ReAction.Button | |
36 local Stance = setmetatable( | |
37 { | |
38 defaultConfig = { | |
39 type = buttonTypeID, | |
40 btnHeight = 36, | |
41 btnWidth = 36, | |
42 btnRows = 1, | |
43 btnColumns = 6, | |
44 spacing = 3 | |
45 }, | |
46 | |
47 barType = L["Stance Bar"], | |
48 buttonTypeID = buttonTypeID | |
49 }, | |
50 { __index = Super } ) | |
51 | |
52 ReAction.Button.Stance = Stance | |
53 ReAction:RegisterBarType(Stance) | |
54 | |
55 function Stance:New( config, bar, idx, idHint ) | |
56 local name = format("ReAction_%s_Stance_%d",bar:GetName(),idx) | |
57 | |
58 self = Super.New(self, name, config, bar, idx, "SecureActionButtonTemplate, ActionButtonTemplate" ) | |
59 | |
60 local f = self:GetFrame() | |
61 local barFrame = bar:GetFrame() | |
62 local config = self:GetConfig() | |
63 | |
64 -- set up the base stance ID | |
65 self:SetActionIDPool("stance",8) | |
66 config.stanceID = self:AcquireActionID(config.stanceID, idHint, true) | |
67 | |
68 -- attribute setup | |
69 f:SetAttribute("type","spell") | |
70 | |
71 -- non secure scripts | |
72 f:SetScript("OnEvent", function(frame, ...) self:OnEvent(...) end) | |
73 f:SetScript("OnEnter", function(frame) self:OnEnter() end) | |
74 f:SetScript("OnLeave", function(frame) self:OnLeave() end) | |
75 f:SetScript("PreClick", function(frame, ...) self:PreClick(...) end) | |
76 | |
77 -- secure handlers | |
78 -- (none) | |
79 | |
80 -- event registration | |
81 f:EnableMouse(true) | |
82 f:RegisterForClicks("AnyUp") | |
83 for _, evt in pairs(eventList) do | |
84 f:RegisterEvent(evt) | |
85 end | |
86 | |
87 -- attach to skinner | |
88 bar:SkinButton(self) | |
89 | |
90 -- initial display | |
91 if ReAction:GetConfigMode() then | |
92 self:GetFrame():Show() | |
93 end | |
94 | |
95 self:Refresh() | |
96 | |
97 return self | |
98 end | |
99 | |
100 function Stance:GetActionID() | |
101 return self.config.stanceID | |
102 end | |
103 | |
104 function Stance:UpdateAction() | |
105 if InCombatLockdown() then | |
106 self.updatePending = true | |
107 else | |
108 self.updatePending = false | |
109 local idx = self:GetActionID() | |
110 local f = self:GetFrame() | |
111 if idx > GetNumShapeshiftForms() then | |
112 f:Hide() | |
113 else | |
114 f:SetAttribute("spell", select(2,GetShapeshiftFormInfo(idx))) | |
115 f:Show() | |
116 self:Update() | |
117 end | |
118 end | |
119 end | |
120 | |
121 function Stance:Refresh() | |
122 Super.Refresh(self) | |
123 self:UpdateHotkey() | |
124 self:UpdateAction() | |
125 end | |
126 | |
127 function Stance:Update() | |
128 local texture, _, isActive, isCastable = GetShapeshiftFormInfo(self:GetActionID()) | |
129 | |
130 local icon = self.frames.icon | |
131 icon:SetTexture(texture) | |
132 self:GetFrame():SetChecked( isActive and 1 or 0 ) | |
133 if isCastable then | |
134 self.frames.hotkey:Show() | |
135 icon:SetVertexColor(1.0, 1.0, 1.0) | |
136 else | |
137 icon:SetVertexColor(0.4, 0.4, 0.4) | |
138 end | |
139 | |
140 self:UpdateCooldown() | |
141 end | |
142 | |
143 function Stance:UpdateCooldown() | |
144 local start, duration, enabled = GetShapeshiftFormCooldown(self:GetActionID()) | |
145 if start then | |
146 CooldownFrame_SetTimer(self.frames.cooldown, start, duration, enabled) | |
147 end | |
148 end | |
149 | |
150 function Stance:SetTooltip() | |
151 if GetCVar("UberTooltips") == "1" then | |
152 GameTooltip_SetDefaultAnchor(GameTooltip, self:GetFrame()) | |
153 else | |
154 GameTooltip:SetOwner(self:GetFrame(), "ANCHOR_RIGHT") | |
155 end | |
156 GameTooltip:SetShapeshift(self:GetActionID()) | |
157 end | |
158 | |
159 function Stance:OnEnter() | |
160 self:SetTooltip() | |
161 end | |
162 | |
163 function Stance:OnLeave() | |
164 GameTooltip:Hide() | |
165 end | |
166 | |
167 function Stance:PreClick() | |
168 local f = self:GetFrame() | |
169 f:SetChecked( not f:GetChecked() ) | |
170 end | |
171 | |
172 function Stance:OnEvent(event, arg) | |
173 if event == "PLAYER_REGEN_ENABLED" then | |
174 if self.updatePending then | |
175 self:UpdateAction() | |
176 end | |
177 elseif event == "UPDATE_SHAPESHIFT_COOLDOWN" then | |
178 self:UpdateCooldown() | |
179 elseif event == "UPDATE_SHAPESHIFT_FORMS" then | |
180 self:UpdateAction() | |
181 elseif event == "UNIT_AURA" then | |
182 if arg == "player" then | |
183 self:Update() | |
184 end | |
185 elseif event == "UPDATE_BINDINGS" then | |
186 self:UpdateHotkey() | |
187 else | |
188 self:Update() | |
189 end | |
190 end | |
191 | |
192 function Stance:ShowGridTemp(show) | |
193 if show then | |
194 self:GetFrame():Show() | |
195 else | |
196 self:UpdateAction() | |
197 end | |
198 end |