From 384a15898c42a0fdc7c3d156ad5819bc4f876701 Mon Sep 17 00:00:00 2001 From: Pawel Date: Sat, 29 Jul 2017 18:42:56 +0200 Subject: [PATCH] v7.2.6 - LibActionButton support --- MaxDps.toc | 2 +- buttons.lua | 211 +++++++++++++++++++++++++---------------------------------- core.lua | 9 +++ 3 files changed, 98 insertions(+), 124 deletions(-) diff --git a/MaxDps.toc b/MaxDps.toc index 0aa359b..52eb09b 100644 --- a/MaxDps.toc +++ b/MaxDps.toc @@ -1,6 +1,6 @@ ## Title: MaxDps ## Notes: Rotation helper framework. -## Version: 7.2.5.4 +## Version: 7.2.6 ## Author: Kaminaris ## Interface: 70200 ## SavedVariables: MaxDpsOptions diff --git a/buttons.lua b/buttons.lua index 65e0bfb..e144c39 100644 --- a/buttons.lua +++ b/buttons.lua @@ -10,11 +10,12 @@ function MaxDps:CreateOverlay(parent, id, texture, r, g, b) frame = CreateFrame('Frame', 'MaxDps_Overlay_' .. id, parent); end + local sizeMult = self.db.global.sizeMult or 1.4; frame:SetParent(parent); frame:SetFrameStrata('HIGH'); frame:SetPoint('CENTER', 0, 0); - frame:SetWidth(parent:GetWidth() * 1.4); - frame:SetHeight(parent:GetHeight() * 1.4); + frame:SetWidth(parent:GetWidth() * sizeMult); + frame:SetHeight(parent:GetHeight() * sizeMult); local t = frame.texture; if not t then @@ -106,6 +107,50 @@ function MaxDps:HideGlow(button, id) end end +function MaxDps:AddButton(actionName, button) + if actionName then + if self.Spells[actionName] == nil then + self.Spells[actionName] = {}; + end + tinsert(self.Spells[actionName], button); + end +end + +function MaxDps:AddStandardButton(button) + local type = button:GetAttribute('type'); + if type then + local actionType = button:GetAttribute(type); + local id; + local actionName; + + if type == 'action' then + local slot = ActionButton_GetPagedID(button) or ActionButton_CalculateAction(button) + or button:GetAttribute('action') or 0; + + if HasAction(slot) then + type, actionType = GetActionInfo(slot); + else + return; + end + end + + if type == 'macro' then + local name, rank, spellId = GetMacroSpell(actionType); + if spellId then + actionName = GetSpellInfo(spellId); + else + return; + end + elseif type == 'item' then + actionName = GetItemInfo(actionType); + elseif type == 'spell' then + actionName = GetSpellInfo(actionType); + end + + self:AddButton(actionName, button) + end +end + function MaxDps:Fetch() self = MaxDps; if self.rotationEnabled then @@ -117,158 +162,78 @@ function MaxDps:Fetch() self.Spells = {}; self.Flags = {}; self.SpellsGlowing = {}; - local isBartender = IsAddOnLoaded('Bartender4'); - local isElv = IsAddOnLoaded('ElvUI'); - local isSv = IsAddOnLoaded('SVUI_ActionBars'); - - if (isBartender) then - self:FetchBartender4(); - elseif (isElv) then - self:FetchElvUI(); - elseif (isSv) then - self:FetchSuperVillain(); - else - self:FetchBlizzard(); - end + + self:FetchLibActionButton(); + self:FetchBlizzard(); -- It does not alter original button frames so it needs to be fetched too if IsAddOnLoaded('ButtonForge') then self:FetchButtonForge(); end + if IsAddOnLoaded('G15Buttons') then + self:FetchG15Buttons(); + end + if self.rotationEnabled then self:EnableRotationTimer(); self:InvokeNextSpell(); end end -function MaxDps:FetchBlizzard() - local TDActionBarsBlizzard = {'Action', 'MultiBarBottomLeft', 'MultiBarBottomRight', 'MultiBarRight', 'MultiBarLeft'}; - for _, barName in pairs(TDActionBarsBlizzard) do - for i = 1, 12 do - local button = _G[barName .. 'Button' .. i]; - local slot = ActionButton_GetPagedID(button) or ActionButton_CalculateAction(button) or button:GetAttribute('action') or 0; - if HasAction(slot) then - local actionName, _; - local actionType, id = GetActionInfo(slot); - if actionType == 'macro' then _, _ , id = GetMacroSpell(id) end - if actionType == 'item' then - actionName = GetItemInfo(id); - elseif actionType == 'spell' or (actionType == 'macro' and id) then - actionName = GetSpellInfo(id); - end - if actionName then - if self.Spells[actionName] == nil then - self.Spells[actionName] = {}; - end +function MaxDps:FetchLibActionButton() + local LAB = { + original = LibStub:GetLibrary('LibActionButton-1.0', true), + elvui = LibStub:GetLibrary('LibActionButton-1.0-ElvUI', true), + } - tinsert(self.Spells[actionName], button); + for _, lib in pairs(LAB) do + if lib and lib.GetAllButtons then + for button in pairs(lib:GetAllButtons()) do + local spellId = button:GetSpellId(); + if spellId then + local actionName, _ = GetSpellInfo(spellId); + self:AddButton(actionName, button); end end end end end -function MaxDps:FetchButtonForge() - local i = 1; +function MaxDps:FetchBlizzard() + local BlizzardBars = {'Action', 'MultiBarBottomLeft', 'MultiBarBottomRight', 'MultiBarRight', 'MultiBarLeft'}; + for _, barName in pairs(BlizzardBars) do + for i = 1, 12 do + local button = _G[barName .. 'Button' .. i]; + self:AddStandardButton(button); + end + end +end + +function MaxDps:FetchG15Buttons() + local i = 2; -- it starts from 2 while true do - local button = _G['ButtonForge' .. i]; + local button = _G['objG15_btn_' .. i]; if not button then break; end i = i + 1; - local type = button:GetAttribute('type'); - if type then - local actionType = button:GetAttribute(type); - local id; - local actionName; - if type == 'macro' then - local id = GetMacroSpell(actionType); - if id then - actionName = GetSpellInfo(id); - end - elseif type == 'item' then - actionName = GetItemInfo(actionType); - elseif type == 'spell' then - actionName = GetSpellInfo(actionType); - end - if actionName then - if self.Spells[actionName] == nil then - self.Spells[actionName] = {}; - end - - tinsert(self.Spells[actionName], button); - end - end + self:AddStandardButton(button); end end -function MaxDps:FetchElvUI() - local ret = false; - for x = 1, 10 do - for i = 1, 12 do - local button = _G['ElvUI_Bar' .. x .. 'Button' .. i]; - if button then - local spellId = button:GetSpellId(); - if spellId then - local actionName, _ = GetSpellInfo(spellId); - if actionName then - if self.Spells[actionName] == nil then - self.Spells[actionName] = {}; - end - ret = true; - tinsert(self.Spells[actionName], button); - end - end - end - end - end - return ret; -end - -function MaxDps:FetchSuperVillain() - local ret = false; - for x = 1, 10 do - for i = 1, 12 do - local button = _G['SVUI_ActionBar' .. x .. 'Button' .. i]; - if button then - local spellId = button:GetSpellId(); - if spellId then - local actionName, _ = GetSpellInfo(spellId); - if actionName then - if self.Spells[actionName] == nil then - self.Spells[actionName] = {}; - end - ret = true; - tinsert(self.Spells[actionName], button); - end - end - end +function MaxDps:FetchButtonForge() + local i = 1; + while true do + local button = _G['ButtonForge' .. i]; + if not button then + break; end - end - return ret; -end + i = i + 1; -function MaxDps:FetchBartender4() - local ret = false; - for i = 1, 120 do - local button = _G['BT4Button' .. i]; - if button then - local spellId = button:GetSpellId(); - if spellId then - local actionName, _ = GetSpellInfo(spellId); - if actionName then - if self.Spells[actionName] == nil then - self.Spells[actionName] = {}; - end - ret = true; - tinsert(self.Spells[actionName], button); - end - end - end + MaxDps:AddStandardButton(button) end - return ret; end function MaxDps:Dump() diff --git a/core.lua b/core.lua index c4027e9..943be0c 100644 --- a/core.lua +++ b/core.lua @@ -150,6 +150,15 @@ local options = { set = function(info,val) MaxDps.db.global.interval = val end, get = function(info) return MaxDps.db.global.interval end }, + sizeMult = { + name = 'Overlay size multiplier', + desc = 'Sets how big will be overlay on the button. 1 = exactly the same as button', + type = 'range', + min = 0.5, + max = 2, + set = function(info,val) MaxDps.db.global.sizeMult = val end, + get = function(info) return MaxDps.db.global.sizeMult or 1.4 end + }, }, } -- 1.7.9.5