From 7c4d055248a5ec43f83c6c139f170192451c629b Mon Sep 17 00:00:00 2001 From: James Whitehead II Date: Sat, 9 Oct 2010 11:35:34 +0100 Subject: [PATCH] Add support for the 'ooc' click set --- BindConfig.lua | 1 + Clique.lua | 82 +++++++++++++++++++++++++++++++------------------------- Utils.lua | 22 +++++++++++++++ 3 files changed, 68 insertions(+), 37 deletions(-) diff --git a/BindConfig.lua b/BindConfig.lua index 9fd20ce..cb82a20 100755 --- a/BindConfig.lua +++ b/BindConfig.lua @@ -391,6 +391,7 @@ local function toggleSet(binding, set) else binding.sets[set] = true end + addon:UpdateAttributes() CliqueConfig:UpdateList() end end diff --git a/Clique.lua b/Clique.lua index 5aa6fc2..8aed62a 100755 --- a/Clique.lua +++ b/Clique.lua @@ -25,7 +25,7 @@ -- clicking on is an enemy, i.e. a unit that you can attack. -- * friendly - These bindings are ONLY active when the unit you are -- clicking on is a friendly unit, i.e. one that you can assist --- * glabal - These bindings will be available regardless of where +-- * global - These bindings will be available regardless of where -- your mouse is on the screen, be it in the 3D world, or over a -- unit frame. These bindings take up a slot that might otherwise -- be used in the 'Key Bindings' interface options. @@ -99,6 +99,10 @@ function addon:Initialize() end end self:EnableBlizzardFrames() + + -- Register for combat events to ensure we can swap between the two states + self:RegisterEvent("PLAYER_REGEN_DISABLED", "UpdateAttributes") + self:RegisterEvent("PLAYER_REGEN_ENABLED", "UpdateAttributes") end function addon:RegisterFrame(button) @@ -173,38 +177,40 @@ function addon:GetClickAttributes() } for idx, entry in ipairs(self.profile.binds) do - local prefix, suffix = entry.key:match("^(.-)([^%-]+)$") - if prefix:sub(-1, -1) == "-" then - prefix = prefix:sub(1, -2) - end - - prefix = prefix:lower() - - local button = suffix:match("^BUTTON(%d+)$") - if button then - suffix = button - else - suffix = "cliquebutton" .. idx - prefix = "" - end - - -- Build any needed SetAttribute() calls - if entry.type == "target" or entry.type == "menu" then - bits[#bits + 1] = ATTR(prefix, "type", suffix, entry.type) - rembits[#rembits + 1] = REMATTR(prefix, "type", suffix) - elseif entry.type == "spell" then - bits[#bits + 1] = ATTR(prefix, "type", suffix, entry.type) - bits[#bits + 1] = ATTR(prefix, "spell", suffix, entry.spell) - rembits[#rembits + 1] = REMATTR(prefix, "type", suffix) - rembits[#rembits + 1] = REMATTR(prefix, "spell", suffix) - elseif entry.type == "macro" then - bits[#bits + 1] = ATTR(prefix, "type", suffix, entry.type) - bits[#bits + 1] = ATTR(prefix, "macrotext", suffix, entry.macrotext) - rembits[#rembits + 1] = REMATTR(prefix, "type", suffix) - rembits[#rembits + 1] = REMATTR(prefix, "macrotext", suffix) - - else - error(string.format("Invalid action type: '%s'", entry.type)) + if self:ShouldSetBinding(entry) then + local prefix, suffix = entry.key:match("^(.-)([^%-]+)$") + if prefix:sub(-1, -1) == "-" then + prefix = prefix:sub(1, -2) + end + + prefix = prefix:lower() + + local button = suffix:match("^BUTTON(%d+)$") + if button then + suffix = button + else + suffix = "cliquebutton" .. idx + prefix = "" + end + + -- Build any needed SetAttribute() calls + if entry.type == "target" or entry.type == "menu" then + bits[#bits + 1] = ATTR(prefix, "type", suffix, entry.type) + rembits[#rembits + 1] = REMATTR(prefix, "type", suffix) + elseif entry.type == "spell" then + bits[#bits + 1] = ATTR(prefix, "type", suffix, entry.type) + bits[#bits + 1] = ATTR(prefix, "spell", suffix, entry.spell) + rembits[#rembits + 1] = REMATTR(prefix, "type", suffix) + rembits[#rembits + 1] = REMATTR(prefix, "spell", suffix) + elseif entry.type == "macro" then + bits[#bits + 1] = ATTR(prefix, "type", suffix, entry.type) + bits[#bits + 1] = ATTR(prefix, "macrotext", suffix, entry.macrotext) + rembits[#rembits + 1] = REMATTR(prefix, "type", suffix) + rembits[#rembits + 1] = REMATTR(prefix, "macrotext", suffix) + + else + error(string.format("Invalid action type: '%s'", entry.type)) + end end end @@ -222,10 +228,12 @@ function addon:GetBindingAttributes() local clr = {} for idx, entry in ipairs(self.profile.binds) do - if not entry.key:match("BUTTON%d+$") then - -- This is a key binding, so we need a binding for it - set[#set + 1] = B_SET:format(entry.key, "cliquebutton" .. idx) - clr[#clr + 1] = B_CLR:format(entry.key) + if self:ShouldSetBinding(entry) then + if not entry.key:match("BUTTON%d+$") then + -- This is a key binding, so we need a binding for it + set[#set + 1] = B_SET:format(entry.key, "cliquebutton" .. idx) + clr[#clr + 1] = B_CLR:format(entry.key) + end end end diff --git a/Utils.lua b/Utils.lua index 84b3052..3323ed5 100644 --- a/Utils.lua +++ b/Utils.lua @@ -197,3 +197,25 @@ function addon:GetBindingInfoText(binding) return table.concat(bits, ", ") end end + +-- This function examines the current state of the game +function addon:ShouldSetBinding(binding) + local apply = false + + if binding.sets.ooc then + if UnitAffectingCombat("player") then + apply = false + else + apply = true + end + end + + if binding.sets.default then + apply = true + end + + return apply +end + +function addon:ShouldSetBindingOnFrame(binding, frame) +end -- 1.7.9.5