Mercurial > wow > skeletonkey
comparison SkeletonKey/BindingsFrame.lua @ 57:9eebce04e69b
- Prevent bind settings from being updated in combat.
- Close the UI during combat.
- Resolve conflicting keybinds and inform the user of any results.
- Resolve conflicts for talents, but only when they are active.
author | Nenue |
---|---|
date | Mon, 22 Aug 2016 09:24:02 -0400 |
parents | 81a7c71c4483 |
children | 2409fe9b81e1 |
comparison
equal
deleted
inserted
replaced
56:2a95f4010c5a | 57:9eebce04e69b |
---|---|
49 local tonumber, tostring = tonumber, tostring | 49 local tonumber, tostring = tonumber, tostring |
50 local GetCursorInfo, ClearCursor, ResetCursor = GetCursorInfo, ClearCursor, ResetCursor | 50 local GetCursorInfo, ClearCursor, ResetCursor = GetCursorInfo, ClearCursor, ResetCursor |
51 local IsShiftKeyDown, IsControlKeyDown, IsAltKeyDown = IsShiftKeyDown, IsControlKeyDown, IsAltKeyDown | 51 local IsShiftKeyDown, IsControlKeyDown, IsAltKeyDown = IsShiftKeyDown, IsControlKeyDown, IsAltKeyDown |
52 local GetBindingAction, GetBindingKey, GetCurrentBindingSet = GetBindingAction, GetBindingKey, GetCurrentBindingSet | 52 local GetBindingAction, GetBindingKey, GetCurrentBindingSet = GetBindingAction, GetBindingKey, GetCurrentBindingSet |
53 local SetBinding, SaveBindings = SetBinding, SaveBindings | 53 local SetBinding, SaveBindings = SetBinding, SaveBindings |
54 local GetSpellInfo, InCombatLockdown = GetSpellInfo, InCombatLockdown | |
54 | 55 |
55 kb.ProcessInput = function(key) | 56 kb.ProcessInput = function(key) |
56 if key == 'ESCAPE' then | 57 if key == 'ESCAPE' then |
57 kb.DeactivateSlot(kb.saveTarget) | 58 kb.DeactivateSlot(kb.saveTarget) |
58 kb.ui() | 59 kb.ui() |
497 kb.SaveSlot = function(self, key) | 498 kb.SaveSlot = function(self, key) |
498 | 499 |
499 if not self.command then | 500 if not self.command then |
500 return | 501 return |
501 end | 502 end |
503 if InCombatLockdown() then | |
504 kb:print(L('Bindings cannot be changed during combat.')) | |
505 return | |
506 end | |
507 | |
508 | |
502 print('|cFFFFFF00received|cFFFFFF00', self:GetID(), '|cFF00FFFF', key) | 509 print('|cFFFFFF00received|cFFFFFF00', self:GetID(), '|cFF00FFFF', key) |
503 | 510 |
504 local modifier = '' | 511 local modifier = '' |
505 if IsAltKeyDown() then | 512 if IsAltKeyDown() then |
506 modifier = 'ALT-' | 513 modifier = 'ALT-' |
542 local currentHotKeys = {GetBindingKey(self.command)} | 549 local currentHotKeys = {GetBindingKey(self.command)} |
543 local found | 550 local found |
544 for i, key in ipairs(currentHotKeys) do | 551 for i, key in ipairs(currentHotKeys) do |
545 if key == binding then | 552 if key == binding then |
546 found = true | 553 found = true |
547 kb:print('hotkey already assigned') | 554 print('|cFFFF4400key already bound to this') |
555 return true | |
548 end | 556 end |
549 end | 557 end |
550 if not found then | 558 if not found then |
551 tinsert(currentHotKeys, 1, binding) | 559 tinsert(currentHotKeys, 1, binding) |
552 kb.UpdateBindingsCache(self.actionType, self.actionID, currentHotKeys) | 560 kb.UpdateBindingsCache(self.actionType, self.actionID, currentHotKeys) |
553 end | 561 end |
554 | 562 |
563 -- scour profile data for any conflicting binds | |
564 local currentAction = GetBindingAction(binding) | |
565 if match(currentAction, 'KeyBinder') then | |
566 if currentAction ~= self.command then | |
567 print('|cFFFF4400removing bindings for:', currentAction) | |
568 for profileID, profileData in ipairs(kb.loadedProfiles) do | |
569 local buttonID = profileData.commands[currentAction] | |
570 if buttonID then | |
571 local buttonAction = profileData.buttons[buttonID][2] | |
572 if buttonAction then | |
573 local talentInfo = profileData.talents[buttonAction] | |
574 if talentInfo and GetSpellInfo(buttonAction) then | |
575 for i = #talentInfo, 5, -1 do | |
576 if binding == talentInfo[i] then | |
577 tremove(talentInfo, i) | |
578 end | |
579 end | |
580 kb:print(L('Overwrote talent |cFF88FF00%s|r in |cFF00FFFF%s|r', buttonAction, kb.configHeaders[profileID])) | |
581 else | |
582 | |
583 kb:print(L('Overwrote |cFFFFFF00%s|r in |cFF00FFFF%s|r', buttonAction, kb.configHeaders[profileID])) | |
584 end | |
585 profileData.bindings[binding] = nil | |
586 end | |
587 end | |
588 end | |
589 end | |
590 end | |
555 | 591 |
556 | 592 |
557 print('SetBinding', binding, self.command) | 593 print('SetBinding', binding, self.command) |
558 SetBinding(binding, self.command) | 594 SetBinding(binding, self.command) |
559 SaveBindings(GetCurrentBindingSet()) | 595 SaveBindings(GetCurrentBindingSet()) |
586 if kb.currentProfile.talents[self.actionID] then | 622 if kb.currentProfile.talents[self.actionID] then |
587 kb.currentProfile.talents[self.actionID] = nil | 623 kb.currentProfile.talents[self.actionID] = nil |
588 end | 624 end |
589 end | 625 end |
590 | 626 |
627 | |
591 kb:print(L('BINDING_ASSIGNED', self.binding, self.actionName, kb.currentHeader)) | 628 kb:print(L('BINDING_ASSIGNED', self.binding, self.actionName, kb.currentHeader)) |
592 kb.UpdateSlot(self, true) | 629 kb.ui() |
593 return true | 630 return true |
594 end | 631 end |
595 | 632 |
596 | 633 |
597 kb.UnbindSlot = function(self) | 634 kb.UnbindSlot = function(self) |