Mercurial > wow > skeletonkey
comparison SkeletonKey/SkeletonKey.lua @ 16:cdd387d39137
filename refactor
author | Nenue |
---|---|
date | Fri, 29 Jul 2016 21:18:15 -0400 |
parents | 32d64e42ec9b |
children | 500f9b2bd9ac |
comparison
equal
deleted
inserted
replaced
15:32d64e42ec9b | 16:cdd387d39137 |
---|---|
34 | 34 |
35 | 35 |
36 local BINDING_TYPE_SPECIALIZATION = 3 | 36 local BINDING_TYPE_SPECIALIZATION = 3 |
37 local BINDING_TYPE_CHARACTER = 2 | 37 local BINDING_TYPE_CHARACTER = 2 |
38 local BINDING_TYPE_GLOBAL = 1 | 38 local BINDING_TYPE_GLOBAL = 1 |
39 | |
40 | |
41 --- Caps Lock derivatives | |
42 local ACTION_SCRIPT = { | |
43 ['mount'] = "/script C_MountJournal.SummonByID(%d)", | |
44 ['macro'] = "%s", | |
45 ['equipset'] = "/script UseEquipmentSet(%d)", | |
46 ['spell'] = "/cast %s", | |
47 ['petaction'] = "/cast %s", | |
48 ['battlepet'] = SLASH_SUMMON_BATTLE_PET1 .. " %s", | |
49 ['item'] = "/use %s" | |
50 } | |
51 | |
52 | |
53 local PETACTION_SCRIPT = { | |
54 [PET_ACTION_MOVE_TO] = SLASH_PET_MOVE_TO1, | |
55 [PET_ACTION_ATTACK] = SLASH_PET_ATTACK1, | |
56 [PET_ACTION_FOLLOW] = SLASH_PET_FOLLOW1, | |
57 [PET_ACTION_WAIT] = SLASH_PET_STAY1, | |
58 [PET_MODE_AGGRESSIVE] = SLASH_PET_AGGRESSIVE1, | |
59 [PET_MODE_DEFENSIVE] = SLASH_PET_DEFENSIVE1, | |
60 [PET_MODE_PASSIVE] = SLASH_PET_PASSIVE1, | |
61 [PET_MODE_ASSIST] = SLASH_PET_ASSIST1, | |
62 } | |
63 | |
64 local professionMappings = { | |
65 [5] = 3, | |
66 [7] = 4, | |
67 [9] = 5, | |
68 [10] = 6 | |
69 } | |
70 kb.configTitle = { | 39 kb.configTitle = { |
71 [BINDING_TYPE_GLOBAL] = 'Global Binds', | 40 [BINDING_TYPE_GLOBAL] = 'Global Binds', |
72 [BINDING_TYPE_CHARACTER] = 'Character: %s', | 41 [BINDING_TYPE_CHARACTER] = 'Character: %s', |
73 [BINDING_TYPE_SPECIALIZATION] = 'Specialization: %s' | 42 [BINDING_TYPE_SPECIALIZATION] = 'Specialization: %s' |
74 } | 43 } |
177 return nil | 146 return nil |
178 end | 147 end |
179 end | 148 end |
180 | 149 |
181 | 150 |
182 --- Resolve the appropriate command and macroText for the given action parameters | 151 |
183 kb.RegisterAction = function(type, id, name) | 152 |
184 local macroText, macroName, command = '', '', '' | |
185 | |
186 if type == 'spell' then | |
187 if kb.ProfessionCache[id] then | |
188 command = CLICK_KEYBINDER_KEY .. "profession_".. kb.ProfessionCache[id].profOffset .. '_' .. kb.ProfessionCache[id].spellNum | |
189 else | |
190 command = CLICK_KEYBINDER_KEY ..name | |
191 end | |
192 else | |
193 macroName = type .. ' ' .. name | |
194 macroText = ACTION_SCRIPT[type]:format(name) | |
195 local baseName, iterative = macroName, 1 | |
196 while (macros[macroName] and macros[macroName][1] ~= macroText) do | |
197 print(' * cannot use|cFF00FF00', macroName, '|r"'.. (macros[macroName][1] or '') .. '"') | |
198 macroName = baseName .. '_' .. iterative | |
199 iterative = iterative + 1 | |
200 end | |
201 if macroName ~= baseName then | |
202 print(' * Creating|cFF00FF00', macroName) | |
203 else | |
204 print(' * Re-using|cFF00FF00', macroName) | |
205 end | |
206 command = 'CLICK KeyBinderMacro:'.. macroName | |
207 macros[macroName] = {macroText, command } | |
208 end | |
209 | |
210 print('RegisterAction', type, id, '->', command , macroText) | |
211 return macroName, macroText, command | |
212 end | |
213 | |
214 --- Updates the current KeyBinding for the button's command | |
215 kb.StoreBinding = function(self, key) | |
216 | |
217 if not self.command then | |
218 return | |
219 end | |
220 | |
221 if key:match('[RL]SHIFT') or key:match('[RL]ALT') or key:match('[RL]CTRL') then | |
222 return | |
223 end | |
224 print('|cFFFFFF00received|cFFFFFF00', self:GetID(), '|cFF00FFFF', key) | |
225 | |
226 local modifier = '' | |
227 if IsAltKeyDown() then | |
228 modifier = 'ALT-' | |
229 end | |
230 if IsControlKeyDown() then | |
231 modifier = modifier.. 'CTRL-' | |
232 end | |
233 if IsShiftKeyDown() then | |
234 modifier = modifier..'SHIFT-' | |
235 end | |
236 local binding = modifier..key | |
237 | |
238 if key == 'ESCAPE' then | |
239 local keys = {GetBindingKey(self.command) } | |
240 --print('detected', #keys, 'bindings') | |
241 for i, key in pairs(keys) do | |
242 --print('clearing', key) | |
243 SetBinding(key, nil) | |
244 SaveBindings(GetCurrentBindingSet()) | |
245 if kb.currentProfile.bindings[key] then | |
246 kb:print(L('BINDING_REMOVED', self.actionName, kb.configHeaders[db.bindMode])) | |
247 kb.currentProfile.bindings[key] = nil | |
248 end | |
249 if kb.currentProfile.talents[self.actionName] then | |
250 kb.currentProfile.talents[self.actionName] = nil | |
251 end | |
252 bindings[self.actionType][self.actionID] = nil | |
253 end | |
254 if kb.currentProfile.bound[self.command] then | |
255 kb.currentProfile.bound[self.command] = nil | |
256 --kb:print(BINDING_REMOVED:format(self.actionName, configHeaders[db.bindMode])) | |
257 end | |
258 | |
259 bindsCommitted = false | |
260 self.active = false | |
261 else | |
262 if kb.SystemBinds[binding] then | |
263 kb.statustext:SetText(L('BINDING_FAILED_PROTECTED', key, kb.SystemBinds[binding])) | |
264 return | |
265 end | |
266 | |
267 | |
268 if self.command then | |
269 | |
270 local previousKeys | |
271 local previousAction = GetBindingAction(binding) | |
272 local binding1, binding2, new1, new2 | |
273 print(type(previousAction), previousAction) | |
274 if previousAction ~= "" and previousAction ~= self.command then | |
275 if protected[previousAction] then | |
276 -- bounce out if trying to use a protected key | |
277 kb.statustext:SetText(L('BINDING_FAILED_PROTECTED', key, GetBindingAction(binding))) | |
278 kb.bindingstext:SetText(nil) | |
279 return | |
280 else | |
281 kb:print('Discarding keybind for', previousAction) | |
282 -- todo: sort out retcon'd talent spells | |
283 end | |
284 end | |
285 | |
286 self.pending = true | |
287 self.binding = binding | |
288 | |
289 bindsCommitted = false | |
290 SetBinding(self.binding, self.command) | |
291 SaveBindings(GetCurrentBindingSet()) | |
292 | |
293 local talentInfo | |
294 if self.actionType == 'spell' and kb.TalentCache[self.actionID] then | |
295 print('conditional binding (talent = "'..self.actionName..'")') | |
296 talentInfo = {self.macroName, self.actionName, self.actionType, self.actionID} | |
297 local bindings = {GetBindingKey(self.command) } | |
298 for i, key in ipairs(bindings) do | |
299 tinsert(talentInfo, key) | |
300 end | |
301 end | |
302 | |
303 for level, profile in ipairs(kb.orderedProfiles) do | |
304 if (level == db.bindMode) then | |
305 profile.bound[self.command] = true | |
306 if talentInfo then | |
307 profile.bindings[self.binding] = nil | |
308 else | |
309 profile.bindings[self.binding] = self.command | |
310 end | |
311 profile.talents[self.actionName] = talentInfo | |
312 else | |
313 profile.bindings[self.binding] = nil | |
314 profile.bound[self.command] = nil | |
315 kb.currentProfile.talents[self.actionName] = nil | |
316 end | |
317 if kb.currentProfile.talents[self.actionID] then | |
318 kb.currentProfile.talents[self.actionID] = nil | |
319 end | |
320 end | |
321 | |
322 kb:print(L('BINDING_ASSIGNED', self.binding, self.actionName, kb.configHeaders[db.bindMode])) | |
323 end | |
324 end | |
325 kb.UpdateSlot(self, true) | |
326 KeyBinderSaveButton:Enable() | |
327 end | |
328 | 153 |
329 | 154 |
330 kb.inactiveTalentBindings = {} | 155 kb.inactiveTalentBindings = {} |
331 kb.ApplyTalentBinding = function(talentInfo, cache) | 156 kb.ApplyTalentBinding = function(talentInfo, cache) |
332 for i = 5, #talentInfo do | 157 for i = 5, #talentInfo do |