diff --git a/Interface/AddOns/SVUI/libs/oUF_Plugins/oUF_AuraBars/oUF_AuraBars.lua b/Interface/AddOns/SVUI/libs/oUF_Plugins/oUF_AuraBars/oUF_AuraBars.lua index 5cc402c..0fed82a 100644 --- a/Interface/AddOns/SVUI/libs/oUF_Plugins/oUF_AuraBars/oUF_AuraBars.lua +++ b/Interface/AddOns/SVUI/libs/oUF_Plugins/oUF_AuraBars/oUF_AuraBars.lua @@ -1,3 +1,4 @@ +--[[ MODIFIED FOR SVUI BY MUNGLUNCH ]]-- local _, ns = ... local oUF = oUF or ns.oUF assert(oUF, 'oUF_AuraBars was unable to locate oUF install.') @@ -67,6 +68,45 @@ local function SetAnchors(self) end end +local function SetBackground(frame) + local btop = frame:CreateTexture(nil, "OVERLAY") + btop:SetTexture(0, 0, 0) + btop:SetPoint("TOPLEFT") + btop:SetPoint("TOPRIGHT") + btop:SetHeight(1) + local bbottom = frame:CreateTexture(nil, "OVERLAY") + bbottom:SetTexture(0, 0, 0) + bbottom:SetPoint("BOTTOMLEFT") + bbottom:SetPoint("BOTTOMRIGHT") + bbottom:SetHeight(1) + local bright = frame:CreateTexture(nil, "OVERLAY") + bright:SetTexture(0, 0, 0) + bright:SetPoint("TOPRIGHT") + bright:SetPoint("BOTTOMRIGHT") + bright:SetWidth(1) + local bleft = frame:CreateTexture(nil, "OVERLAY") + bleft:SetTexture(0, 0, 0) + bleft:SetPoint("TOPLEFT") + bleft:SetPoint("BOTTOMLEFT") + bleft:SetWidth(1) + frame:SetBackdrop({ + bgFile = [[Interface\BUTTONS\WHITE8X8]], + edgeFile = [[Interface\BUTTONS\WHITE8X8]], + tile = false, + tileSize = 0, + edgeSize = 1, + insets = + { + left = 0, + right = 0, + top = 0, + bottom = 0, + }, + }) + frame:SetBackdropColor(0,0,0,0.25) + frame:SetBackdropBorderColor(0,0,0) +end + local function CreateAuraBar(oUF, anchor) local auraBarParent = oUF.AuraBars @@ -74,11 +114,7 @@ local function CreateAuraBar(oUF, anchor) frame:SetHeight(auraBarParent.auraBarHeight or 20) frame:SetWidth((auraBarParent.auraBarWidth or auraBarParent:GetWidth()) - (frame:GetHeight() + (auraBarParent.gap or 0))) frame.anchor = anchor - - local bg = frame:CreateTexture(nil, "BORDER") - bg:SetAllPoints(frame) - bg:SetTexture(0, 0, 0, 0.25) - frame.bg = bg + SetBackground(frame) -- the main bar local statusBar = CreateFrame("StatusBar", nil, frame) @@ -108,15 +144,17 @@ local function CreateAuraBar(oUF, anchor) spark:SetPoint('CENTER', statusBar:GetStatusBarTexture(), 'RIGHT') statusBar.spark = spark - statusBar.iconHolder = CreateFrame('Button', nil, statusBar) - statusBar.iconHolder:SetHeight(frame:GetHeight()) - statusBar.iconHolder:SetWidth(frame:GetHeight()) - statusBar.iconHolder:SetPoint('BOTTOMRIGHT', frame, 'BOTTOMLEFT', -auraBarParent.gap, 0) - statusBar.iconHolder.__unit = oUF.unit - statusBar.iconHolder:SetScript('OnEnter', OnEnter) - statusBar.iconHolder:SetScript('OnLeave', OnLeave) - statusBar.iconHolder.UpdateTooltip = UpdateTooltip - + local holder = CreateFrame('Button', nil, statusBar) + holder:SetHeight(frame:GetHeight()) + holder:SetWidth(frame:GetHeight()) + holder:SetPoint('BOTTOMRIGHT', frame, 'BOTTOMLEFT', -auraBarParent.gap, 0) + SetBackground(holder) + holder.__unit = oUF.unit + holder:SetScript('OnEnter', OnEnter) + holder:SetScript('OnLeave', OnLeave) + holder.UpdateTooltip = UpdateTooltip + statusBar.iconHolder = holder + statusBar.icon = statusBar.iconHolder:CreateTexture(nil, 'OVERLAY') statusBar.icon:SetTexCoord(.1, .9, .1, .9) statusBar.icon:SetAllPoints(statusBar.iconHolder) @@ -141,7 +179,7 @@ local function CreateAuraBar(oUF, anchor) statusBar.spellname:SetPoint('RIGHT', statusBar.spelltime, 'LEFT') if auraBarParent.PostCreateBar then - auraBarParent.PostCreateBar(frame) + auraBarParent.PostCreateBar(statusBar) end return frame diff --git a/Interface/AddOns/SVUI/packages/dock/SVDock.lua b/Interface/AddOns/SVUI/packages/dock/SVDock.lua index a8af7c4..44ce579 100644 --- a/Interface/AddOns/SVUI/packages/dock/SVDock.lua +++ b/Interface/AddOns/SVUI/packages/dock/SVDock.lua @@ -2,20 +2,19 @@ ############################################################################## _____/\\\\\\\\\\\____/\\\________/\\\__/\\\________/\\\__/\\\\\\\\\\\_ # ___/\\\/////////\\\_\/\\\_______\/\\\_\/\\\_______\/\\\_\/////\\\///__ # - __\//\\\______\///__\//\\\______/\\\__\/\\\_______\/\\\_____\/\\\_____ # - ___\////\\\__________\//\\\____/\\\___\/\\\_______\/\\\_____\/\\\_____ # - ______\////\\\________\//\\\__/\\\____\/\\\_______\/\\\_____\/\\\_____ # - _________\////\\\______\//\\\/\\\_____\/\\\_______\/\\\_____\/\\\_____ # - __/\\\______\//\\\______\//\\\\\______\//\\\______/\\\______\/\\\_____ # - _\///\\\\\\\\\\\/________\//\\\________\///\\\\\\\\\/____/\\\\\\\\\\\_# - ___\///////////___________\///___________\/////////_____\///////////_# + __\//\\\______\///__\//\\\______/\\\__\/\\\_______\/\\\_____\/\\\_____ # + ___\////\\\__________\//\\\____/\\\___\/\\\_______\/\\\_____\/\\\_____ # + ______\////\\\________\//\\\__/\\\____\/\\\_______\/\\\_____\/\\\_____ # + _________\////\\\______\//\\\/\\\_____\/\\\_______\/\\\_____\/\\\_____ # + __/\\\______\//\\\______\//\\\\\______\//\\\______/\\\______\/\\\_____ # + _\///\\\\\\\\\\\/________\//\\\________\///\\\\\\\\\/____/\\\\\\\\\\\_# + ___\///////////___________\///___________\/////////_____\///////////_# ############################################################################## S U P E R - V I L L A I N - U I By: Munglunch # ############################################################################## --]] local SuperVillain, L = unpack(select(2, ...)); -local MOD = {}; -local LSM = LibStub("LibSharedMedia-3.0") +local MOD = {} --[[ ########################################################## LOCAL VARS @@ -29,514 +28,379 @@ PRE VARS/FUNCTIONS ########################################################## ]]-- local FadeUpdate = function() - if InCombatLockdown()then return end; - LeftSuperDock:Hide() - RightSuperDock:Hide() -end; + if InCombatLockdown()then return end + LeftSuperDock:Hide() + RightSuperDock:Hide() +end local function SetSuperDockStyle(dock) - if dock.backdrop then return end; - local backdrop = CreateFrame("Frame", nil, dock) - backdrop:SetAllPoints(dock) - backdrop:SetFrameStrata("BACKGROUND") - backdrop.bg = backdrop:CreateTexture(nil, "BORDER") - backdrop.bg:FillInner(backdrop) - backdrop.bg:SetTexture(1, 1, 1, 1) - backdrop.bg:SetGradientAlpha("VERTICAL", 0, 0, 0, 0.8, 0, 0, 0, 0) - backdrop.left = backdrop:CreateTexture(nil, "OVERLAY") - backdrop.left:SetTexture(1, 1, 1, 1) - backdrop.left:Point("TOPLEFT", 1, -1) - backdrop.left:Point("BOTTOMLEFT", -1, 1) - backdrop.left:Width(4) - backdrop.left:SetGradientAlpha("VERTICAL", 0, 0, 0, 1, 0, 0, 0, 0) - backdrop.right = backdrop:CreateTexture(nil, "OVERLAY") - backdrop.right:SetTexture(1, 1, 1, 1) - backdrop.right:Point("TOPRIGHT", -1, -1) - backdrop.right:Point("BOTTOMRIGHT", -1, 1) - backdrop.right:Width(4) - backdrop.right:SetGradientAlpha("VERTICAL", 0, 0, 0, 1, 0, 0, 0, 0) - backdrop.bottom = backdrop:CreateTexture(nil, "OVERLAY") - backdrop.bottom:SetTexture(0, 0, 0, 1) - backdrop.bottom:Point("BOTTOMLEFT", 1, 1) - backdrop.bottom:Point("BOTTOMRIGHT", -1, 1) - backdrop.bottom:Height(4) - backdrop.top = backdrop:CreateTexture(nil, "OVERLAY") - backdrop.top:SetTexture(0, 0, 0, 0) - backdrop.top:Point("TOPLEFT", 1, -1) - backdrop.top:Point("TOPRIGHT", -1, 1) - backdrop.top:SetAlpha(0) - backdrop.top:Height(1) - return backdrop -end; - -local function HearthTime() - local start,duration = GetItemCooldown(6948) - local expires = duration - (GetTime() - start) - if expires > 0.05 then - local timeLeft = 0; - local calc = 0; - if expires < 4 then - return format("|cffff0000%.1f|r", expires) - elseif expires < 60 then - return format("|cffffff00%d|r", floor(expires)) - elseif expires < 3600 then - timeLeft = ceil(expires / 60); - calc = floor((expires / 60) + .5); - return format("|cffff9900%dm|r", timeLeft) - elseif expires < 86400 then - timeLeft = ceil(expires / 3600); - calc = floor((expires / 3600) + .5); - return format("|cff66ffff%dh|r", timeLeft) - else - timeLeft = ceil(expires / 86400); - calc = floor((expires / 86400) + .5); - return format("|cff6666ff%dd|r", timeLeft) - end - else - return "|cff6666ffReady|r" - end -end; - -local function Hearth_OnEnter(self, ...) - if InCombatLockdown() then return end; - self.glow:Show() - self:SetPanelColor("highlight") - if SVUI_Cache["Dock"].LeftSuperDockFaded == true then - LeftSuperDock:Show() - UIFrameFadeIn(LeftSuperDock, 0.2, LeftSuperDock:GetAlpha(), 1) - end; - if SVUI_Cache["Dock"].RightSuperDockFaded == true then - RightSuperDock:Show() - UIFrameFadeIn(RightSuperDock, 0.2, RightSuperDock:GetAlpha(), 1) - end; - GameTooltip:SetOwner(self, "ANCHOR_TOPLEFT", 0, 4) - GameTooltip:ClearLines() - local remaining = HearthTime() - GameTooltip:AddLine(L["Hearthstone"], 1, 1, 1) - GameTooltip:AddDoubleLine(L["Time Remaining"], remaining, 1, 1, 1, 0, 1, 1) - GameTooltip:Show() -end; - -local function Hearth_OnLeave(self, ...) - if InCombatLockdown() then return end; - self.glow:Hide() - self:SetPanelColor("special") - if SVUI_Cache["Dock"].LeftSuperDockFaded == true then - UIFrameFadeOut(LeftSuperDock, 0.2, LeftSuperDock:GetAlpha(), 0) - LeftSuperDock.fadeInfo.finishedFunc = LeftSuperDock.fadeFunc - end; - if SVUI_Cache["Dock"].RightSuperDockFaded == true then - UIFrameFadeOut(RightSuperDock, 0.2, RightSuperDock:GetAlpha(), 0) - RightSuperDock.fadeInfo.finishedFunc = RightSuperDock.fadeFunc - end; - GameTooltip:Hide() -end; + if dock.backdrop then return end + local backdrop = CreateFrame("Frame", nil, dock) + backdrop:SetAllPoints(dock) + backdrop:SetFrameStrata("BACKGROUND") + backdrop.bg = backdrop:CreateTexture(nil, "BORDER") + backdrop.bg:FillInner(backdrop) + backdrop.bg:SetTexture(1, 1, 1, 1) + backdrop.bg:SetGradientAlpha("VERTICAL", 0, 0, 0, 0.8, 0, 0, 0, 0) + backdrop.left = backdrop:CreateTexture(nil, "OVERLAY") + backdrop.left:SetTexture(1, 1, 1, 1) + backdrop.left:Point("TOPLEFT", 1, -1) + backdrop.left:Point("BOTTOMLEFT", -1, 1) + backdrop.left:Width(4) + backdrop.left:SetGradientAlpha("VERTICAL", 0, 0, 0, 1, 0, 0, 0, 0) + backdrop.right = backdrop:CreateTexture(nil, "OVERLAY") + backdrop.right:SetTexture(1, 1, 1, 1) + backdrop.right:Point("TOPRIGHT", -1, -1) + backdrop.right:Point("BOTTOMRIGHT", -1, 1) + backdrop.right:Width(4) + backdrop.right:SetGradientAlpha("VERTICAL", 0, 0, 0, 1, 0, 0, 0, 0) + backdrop.bottom = backdrop:CreateTexture(nil, "OVERLAY") + backdrop.bottom:SetTexture(0, 0, 0, 1) + backdrop.bottom:Point("BOTTOMLEFT", 1, 1) + backdrop.bottom:Point("BOTTOMRIGHT", -1, 1) + backdrop.bottom:Height(4) + backdrop.top = backdrop:CreateTexture(nil, "OVERLAY") + backdrop.top:SetTexture(0, 0, 0, 0) + backdrop.top:Point("TOPLEFT", 1, -1) + backdrop.top:Point("TOPRIGHT", -1, 1) + backdrop.top:SetAlpha(0) + backdrop.top:Height(1) + return backdrop +end local function Dock_OnEnter(self, ...) - if InCombatLockdown() then return end; - self:SetPanelColor("highlight") - if SVUI_Cache["Dock"].LeftSuperDockFaded == true then - LeftSuperDock:Show() - UIFrameFadeIn(LeftSuperDock, 0.2, LeftSuperDock:GetAlpha(), 1) - end; - if SVUI_Cache["Dock"].RightSuperDockFaded == true then - RightSuperDock:Show() - UIFrameFadeIn(RightSuperDock, 0.2, RightSuperDock:GetAlpha(), 1) - end; - GameTooltip:SetOwner(self, "ANCHOR_TOPLEFT", 0, 4) - GameTooltip:ClearLines() - GameTooltip:AddLine(L["Toggle Docks"], 1, 1, 1) - GameTooltip:Show() -end; + if InCombatLockdown() then return end + self:SetPanelColor("highlight") + if SVUI_Cache["Dock"].LeftSuperDockFaded == true then + LeftSuperDock:Show() + UIFrameFadeIn(LeftSuperDock, 0.2, LeftSuperDock:GetAlpha(), 1) + end + if SVUI_Cache["Dock"].RightSuperDockFaded == true then + RightSuperDock:Show() + UIFrameFadeIn(RightSuperDock, 0.2, RightSuperDock:GetAlpha(), 1) + end + GameTooltip:SetOwner(self, "ANCHOR_TOPLEFT", 0, 4) + GameTooltip:ClearLines() + GameTooltip:AddLine(L["Toggle Docks"], 1, 1, 1) + GameTooltip:Show() +end local function Dock_OnLeave(self, ...) - if InCombatLockdown() then return end; - self:SetPanelColor("special") - if SVUI_Cache["Dock"].LeftSuperDockFaded == true then - UIFrameFadeOut(LeftSuperDock, 0.2, LeftSuperDock:GetAlpha(), 0) - LeftSuperDock.fadeInfo.finishedFunc = LeftSuperDock.fadeFunc - end; - if SVUI_Cache["Dock"].RightSuperDockFaded == true then - UIFrameFadeOut(RightSuperDock, 0.2, RightSuperDock:GetAlpha(), 0) - RightSuperDock.fadeInfo.finishedFunc = RightSuperDock.fadeFunc - end; - GameTooltip:Hide() -end; - -local function DockCall_OnEnter(self, ...) - if InCombatLockdown() then return end; - self:SetPanelColor("highlight") - self.icon:SetGradient(unpack(SuperVillain.Media.gradient.bizzaro)) - if SVUI_Cache["Dock"].LeftSuperDockFaded == true then - LeftSuperDock:Show() - UIFrameFadeIn(LeftSuperDock, 0.2, LeftSuperDock:GetAlpha(), 1) - end; - if SVUI_Cache["Dock"].RightSuperDockFaded == true then - RightSuperDock:Show() - UIFrameFadeIn(RightSuperDock, 0.2, RightSuperDock:GetAlpha(), 1) - end; - GameTooltip:SetOwner(self, "ANCHOR_TOPLEFT", 0, 4) - GameTooltip:ClearLines() - GameTooltip:AddLine(L["Show / Hide Phone Lines"], 1, 1, 1) - GameTooltip:Show() -end; - -local function DockCall_OnLeave(self, ...) - if InCombatLockdown() then return end; - local color = self.stateColor - self:SetPanelColor(unpack(color)) - self.icon:SetGradient("VERTICAL", 0.5, 0.53, 0.55, 0.8, 0.8, 1) - GameTooltip:Hide() -end; + if InCombatLockdown() then return end + self:SetPanelColor("special") + if SVUI_Cache["Dock"].LeftSuperDockFaded == true then + UIFrameFadeOut(LeftSuperDock, 0.2, LeftSuperDock:GetAlpha(), 0) + LeftSuperDock.fadeInfo.finishedFunc = LeftSuperDock.fadeFunc + end + if SVUI_Cache["Dock"].RightSuperDockFaded == true then + UIFrameFadeOut(RightSuperDock, 0.2, RightSuperDock:GetAlpha(), 0) + RightSuperDock.fadeInfo.finishedFunc = RightSuperDock.fadeFunc + end + GameTooltip:Hide() +end local function Dock_OnClick(self) - GameTooltip:Hide() - if SVUI_Cache["Dock"].LeftSuperDockFaded then - SVUI_Cache["Dock"].LeftSuperDockFaded = false; - UIFrameFadeIn(LeftSuperDock, 0.2, LeftSuperDock:GetAlpha(), 1) - else - SVUI_Cache["Dock"].LeftSuperDockFaded = true; - UIFrameFadeOut(LeftSuperDock, 0.2, LeftSuperDock:GetAlpha(), 0) - LeftSuperDock.fadeInfo.finishedFunc = LeftSuperDock.fadeFunc - end; - if SVUI_Cache["Dock"].RightSuperDockFaded then - SVUI_Cache["Dock"].RightSuperDockFaded = false; - UIFrameFadeIn(RightSuperDock, 0.2, RightSuperDock:GetAlpha(), 1) - else - SVUI_Cache["Dock"].RightSuperDockFaded = true; - UIFrameFadeOut(RightSuperDock, 0.2, RightSuperDock:GetAlpha(), 0) - RightSuperDock.fadeInfo.finishedFunc = RightSuperDock.fadeFunc - end -end; + GameTooltip:Hide() + if SVUI_Cache["Dock"].LeftSuperDockFaded then + SVUI_Cache["Dock"].LeftSuperDockFaded = false; + UIFrameFadeIn(LeftSuperDock, 0.2, LeftSuperDock:GetAlpha(), 1) + else + SVUI_Cache["Dock"].LeftSuperDockFaded = true; + UIFrameFadeOut(LeftSuperDock, 0.2, LeftSuperDock:GetAlpha(), 0) + LeftSuperDock.fadeInfo.finishedFunc = LeftSuperDock.fadeFunc + end + if SVUI_Cache["Dock"].RightSuperDockFaded then + SVUI_Cache["Dock"].RightSuperDockFaded = false; + UIFrameFadeIn(RightSuperDock, 0.2, RightSuperDock:GetAlpha(), 1) + else + SVUI_Cache["Dock"].RightSuperDockFaded = true; + UIFrameFadeOut(RightSuperDock, 0.2, RightSuperDock:GetAlpha(), 0) + RightSuperDock.fadeInfo.finishedFunc = RightSuperDock.fadeFunc + end +end local function Button_OnEnter(self, ...) - self:SetPanelColor("highlight") - self.icon:SetGradient(unpack(SuperVillain.Media.gradient.bizzaro)) - GameTooltip:SetOwner(self, "ANCHOR_TOPLEFT", 0, 4) - GameTooltip:ClearLines() - GameTooltip:AddLine(self.TText, 1, 1, 1) - GameTooltip:Show() -end; + self:SetPanelColor("highlight") + self.icon:SetGradient(unpack(SuperVillain.Media.gradient.bizzaro)) + GameTooltip:SetOwner(self, "ANCHOR_TOPLEFT", 0, 4) + GameTooltip:ClearLines() + GameTooltip:AddLine(self.TText, 1, 1, 1) + GameTooltip:Show() +end local function Button_OnLeave(self, ...) - self:SetPanelColor("special") - self.icon:SetGradient("VERTICAL", 0.5, 0.53, 0.55, 0.8, 0.8, 1) - GameTooltip:Hide() -end; + self:SetPanelColor("special") + self.icon:SetGradient("VERTICAL", 0.5, 0.53, 0.55, 0.8, 0.8, 1) + GameTooltip:Hide() +end --[[ ########################################################## CORE FUNCTIONS ########################################################## ]]-- function MOD:UpdateSuperDock() - _G["LeftSuperDock"]:Size(MOD.db.dockLeftWidth, MOD.db.dockLeftHeight); - _G["SuperDockAlertLeft"]:Width(MOD.db.dockLeftWidth); - _G["SuperDockWindowLeft"]:Size(MOD.db.dockLeftWidth, MOD.db.dockLeftHeight); - _G["RightSuperDock"]:Size(MOD.db.dockRightWidth, MOD.db.dockRightHeight); - _G["SuperDockAlertRight"]:Width(MOD.db.dockRightWidth); - _G["SuperDockWindowRight"]:Size(MOD.db.dockRightWidth, MOD.db.dockRightHeight); - MOD:BottomPanelVisibility(); - MOD:TopPanelVisibility(); - MOD:UpdateDockBackdrops(); - MOD:ReloadDocklets() -end; + _G["LeftSuperDock"]:Size(MOD.db.dockLeftWidth, MOD.db.dockLeftHeight); + _G["SuperDockAlertLeft"]:Width(MOD.db.dockLeftWidth); + _G["SuperDockWindowLeft"]:Size(MOD.db.dockLeftWidth, MOD.db.dockLeftHeight); + _G["RightSuperDock"]:Size(MOD.db.dockRightWidth, MOD.db.dockRightHeight); + _G["SuperDockAlertRight"]:Width(MOD.db.dockRightWidth); + _G["SuperDockWindowRight"]:Size(MOD.db.dockRightWidth, MOD.db.dockRightHeight); + MOD:BottomPanelVisibility(); + MOD:TopPanelVisibility(); + MOD:UpdateDockBackdrops(); + MOD:ReloadDocklets() +end function MOD:DockAlertLeftOpen(child) - local size = MOD.db.buttonSize or 22; - SuperDockAlertLeft:Height(size) - child:ClearAllPoints() - child:SetAllPoints(SuperDockAlertLeft) -end; + local size = MOD.db.buttonSize or 22; + SuperDockAlertLeft:Height(size) + child:ClearAllPoints() + child:SetAllPoints(SuperDockAlertLeft) +end function MOD:DockAlertLeftClose() - SuperDockAlertLeft:Height(1) -end; + SuperDockAlertLeft:Height(1) +end function MOD:DockAlertRightOpen(child) - local size = MOD.db.buttonSize or 22; - SuperDockAlertRight:Height(size) - child:ClearAllPoints() - child:SetAllPoints(SuperDockAlertRight) -end; + local size = MOD.db.buttonSize or 22; + SuperDockAlertRight:Height(size) + child:ClearAllPoints() + child:SetAllPoints(SuperDockAlertRight) +end function MOD:DockAlertRightClose() - SuperDockAlertRight:Height(1) -end; + SuperDockAlertRight:Height(1) +end function MOD:UpdateDockBackdrops() - if MOD.db.rightDockBackdrop then - RightSuperDock.backdrop:Show() - RightSuperDock.backdrop:ClearAllPoints() - RightSuperDock.backdrop:WrapOuter(RightSuperDock, 4, 4) - else - RightSuperDock.backdrop:Hide() - end - if MOD.db.leftDockBackdrop then - LeftSuperDock.backdrop:Show() - LeftSuperDock.backdrop:ClearAllPoints() - LeftSuperDock.backdrop:WrapOuter(LeftSuperDock, 4, 4) - else - LeftSuperDock.backdrop:Hide() - end -end; + if MOD.db.rightDockBackdrop then + RightSuperDock.backdrop:Show() + RightSuperDock.backdrop:ClearAllPoints() + RightSuperDock.backdrop:WrapOuter(RightSuperDock, 4, 4) + else + RightSuperDock.backdrop:Hide() + end + if MOD.db.leftDockBackdrop then + LeftSuperDock.backdrop:Show() + LeftSuperDock.backdrop:ClearAllPoints() + LeftSuperDock.backdrop:WrapOuter(LeftSuperDock, 4, 4) + else + LeftSuperDock.backdrop:Hide() + end +end function MOD:BottomPanelVisibility() - if MOD.db.bottomPanel then - MOD.BottomPanel:Show() - else - MOD.BottomPanel:Hide() - end -end; + if MOD.db.bottomPanel then + MOD.BottomPanel:Show() + else + MOD.BottomPanel:Hide() + end +end function MOD:TopPanelVisibility() - if MOD.db.topPanel then - MOD.TopPanel:Show() - else - MOD.TopPanel:Hide() - end -end; + if MOD.db.topPanel then + MOD.TopPanel:Show() + else + MOD.TopPanel:Hide() + end +end function HideSuperDocks() - Dock_OnClick(LeftDockToggleButton) -end; + Dock_OnClick(LeftDockToggleButton) +end function MOD:CreateSuperBorders() - local texture = [[Interface\AddOns\SVUI\assets\artwork\Template\BUTTON]]; - - local TopPanel = CreateFrame("Frame", "SVUITopPanel", SuperVillain.UIParent) - TopPanel:Point("TOPLEFT", SuperVillain.UIParent, "TOPLEFT", -1, 1) - TopPanel:Point("TOPRIGHT", SuperVillain.UIParent, "TOPRIGHT", 1, 1) - TopPanel:Height(14) - TopPanel:SetBackdrop({bgFile = texture, edgeFile = [[Interface\BUTTONS\WHITE8X8]], tile = false, tileSize = 0, edgeSize = 1, insets = {left = 0, right = 0, top = 0, bottom = 0}}) - TopPanel:SetBackdropColor(unpack(SuperVillain.Media.color.special)) - TopPanel:SetBackdropBorderColor(0,0,0,1) - TopPanel:SetFrameLevel(0) - TopPanel:SetFrameStrata('BACKGROUND') - MOD.TopPanel = TopPanel; - MOD.TopPanel:SetScript("OnShow", function(self) - self:SetFrameLevel(0) - self:SetFrameStrata('BACKGROUND') - end) - MOD:TopPanelVisibility() - - local BottomPanel = CreateFrame("Frame", "SVUIBottomPanel", SuperVillain.UIParent) - BottomPanel:Point("BOTTOMLEFT", SuperVillain.UIParent, "BOTTOMLEFT", -1, -1) - BottomPanel:Point("BOTTOMRIGHT", SuperVillain.UIParent, "BOTTOMRIGHT", 1, -1) - BottomPanel:Height(14) - BottomPanel:SetBackdrop({bgFile = texture, edgeFile = [[Interface\BUTTONS\WHITE8X8]], tile = false, tileSize = 0, edgeSize = 1, insets = {left = 0, right = 0, top = 0, bottom = 0}}) - BottomPanel:SetBackdropColor(unpack(SuperVillain.Media.color.special)) - BottomPanel:SetBackdropBorderColor(0,0,0,1) - BottomPanel:SetFrameLevel(0) - BottomPanel:SetFrameStrata('BACKGROUND') - MOD.BottomPanel = BottomPanel; - MOD.BottomPanel:SetScript("OnShow", function(self) - self:SetFrameLevel(0) - self:SetFrameStrata('BACKGROUND') - end) - MOD:BottomPanelVisibility() -end; + local texture = [[Interface\AddOns\SVUI\assets\artwork\Template\BUTTON]]; + + local TopPanel = CreateFrame("Frame", "SVUITopPanel", SuperVillain.UIParent) + TopPanel:Point("TOPLEFT", SuperVillain.UIParent, "TOPLEFT", -1, 1) + TopPanel:Point("TOPRIGHT", SuperVillain.UIParent, "TOPRIGHT", 1, 1) + TopPanel:Height(14) + TopPanel:SetBackdrop({bgFile = texture, edgeFile = [[Interface\BUTTONS\WHITE8X8]], tile = false, tileSize = 0, edgeSize = 1, insets = {left = 0, right = 0, top = 0, bottom = 0}}) + TopPanel:SetBackdropColor(unpack(SuperVillain.Media.color.special)) + TopPanel:SetBackdropBorderColor(0,0,0,1) + TopPanel:SetFrameLevel(0) + TopPanel:SetFrameStrata('BACKGROUND') + MOD.TopPanel = TopPanel; + MOD.TopPanel:SetScript("OnShow", function(self) + self:SetFrameLevel(0) + self:SetFrameStrata('BACKGROUND') + end) + MOD:TopPanelVisibility() + + local BottomPanel = CreateFrame("Frame", "SVUIBottomPanel", SuperVillain.UIParent) + BottomPanel:Point("BOTTOMLEFT", SuperVillain.UIParent, "BOTTOMLEFT", -1, -1) + BottomPanel:Point("BOTTOMRIGHT", SuperVillain.UIParent, "BOTTOMRIGHT", 1, -1) + BottomPanel:Height(14) + BottomPanel:SetBackdrop({bgFile = texture, edgeFile = [[Interface\BUTTONS\WHITE8X8]], tile = false, tileSize = 0, edgeSize = 1, insets = {left = 0, right = 0, top = 0, bottom = 0}}) + BottomPanel:SetBackdropColor(unpack(SuperVillain.Media.color.special)) + BottomPanel:SetBackdropBorderColor(0,0,0,1) + BottomPanel:SetFrameLevel(0) + BottomPanel:SetFrameStrata('BACKGROUND') + MOD.BottomPanel = BottomPanel; + MOD.BottomPanel:SetScript("OnShow", function(self) + self:SetFrameLevel(0) + self:SetFrameStrata('BACKGROUND') + end) + MOD:BottomPanelVisibility() +end function MOD:CreateDockPanels() - local leftWidth = MOD.db.dockLeftWidth or 350; - local leftHeight = MOD.db.dockLeftHeight or 180; - local rightWidth = MOD.db.dockRightWidth or 350; - local rightHeight = MOD.db.dockRightHeight or 180; - local buttonsize = MOD.db.buttonSize or 22; - local spacing = MOD.db.buttonSpacing or 4; - local STATS = SuperVillain.Registry:Expose("SVStats"); - - local leftbutton = CreateFrame("Button", "LeftSuperDockToggleButton", SuperVillain.UIParent) - leftbutton:Point("BOTTOMLEFT", SuperVillain.UIParent, "BOTTOMLEFT", 1, 2) - leftbutton:Size(buttonsize, buttonsize) - leftbutton:SetFramedButtonTemplate() - - leftbutton.icon = leftbutton:CreateTexture(nil, "OVERLAY", nil, 0) - leftbutton.icon:FillInner(leftbutton,2,2) - leftbutton.icon:SetTexture("Interface\\AddOns\\SVUI\\assets\\artwork\\Icons\\SVUI-EMBLEM") - - leftbutton:RegisterForClicks("AnyUp") - leftbutton:SetScript("OnEnter", Dock_OnEnter) - leftbutton:SetScript("OnLeave", Dock_OnLeave) - leftbutton:SetScript("OnClick", Dock_OnClick) - - local toolbarLeft = CreateFrame("Button", "SuperDockToolBarLeft", SuperVillain.UIParent) - toolbarLeft:Point("LEFT", leftbutton, "RIGHT", spacing, 0) - toolbarLeft:Width(1) - toolbarLeft:Height(buttonsize) - toolbarLeft.currentSize = buttonsize + 4; - - local leftToolButton = CreateFrame("Button", "LeftToolBarButton", toolbarLeft) - leftToolButton:Point("LEFT", toolbarLeft, "LEFT", 3, 0) - leftToolButton:Size(buttonsize, buttonsize) - leftToolButton:SetFramedButtonTemplate() - leftToolButton.icon = leftToolButton:CreateTexture(nil, "OVERLAY") - leftToolButton.icon:FillInner(leftToolButton,2,2) - leftToolButton.icon:SetTexture([[Interface\AddOns\SVUI\assets\artwork\Icons\DOCK-CALL]]) - leftToolButton.icon:SetGradient("VERTICAL", 0.5, 0.53, 0.55, 0.8, 0.8, 1) - leftToolButton.stateColor = SuperVillain.Media.gradient.special - leftToolButton:RegisterForClicks("AnyUp") - leftToolButton:SetScript("OnEnter", DockCall_OnEnter) - leftToolButton:SetScript("OnLeave", DockCall_OnLeave) - leftToolButton:SetScript("OnShow", function(self) - local size = SuperDockToolBarLeft.currentSize; - local parent = self:GetParent() - parent:SetWidth(size) - end) - leftToolButton:Hide() - - local leftstation = CreateFrame("Frame", "SuperDockChatTabBar", SuperVillain.UIParent) - leftstation:SetFrameStrata("BACKGROUND") - leftstation:Size(leftWidth - buttonsize, buttonsize) - leftstation:Point("LEFT", toolbarLeft, "RIGHT", spacing, 0) - leftstation:SetFrameLevel(leftstation:GetFrameLevel() + 2) - leftstation.currentSize = buttonsize; - - local leftdock = CreateFrame("Frame", "LeftSuperDock", SuperVillain.UIParent) - leftdock:SetFrameStrata("BACKGROUND") - leftdock:Point("BOTTOMLEFT", SuperVillain.UIParent, "BOTTOMLEFT", 1, buttonsize + 10) - leftdock:Size(leftWidth, leftHeight) - SuperVillain:SetSVMovable(leftdock, "LeftDock_MOVE", L["Left Dock"]) - - local leftalert = CreateFrame("Frame", "SuperDockAlertLeft", leftdock) - leftalert:SetFrameStrata("BACKGROUND") - leftalert:Size(leftWidth, 1) - leftalert:Point("BOTTOMRIGHT", leftdock, "BOTTOMRIGHT",0, 0) - leftalert:SetFrameLevel(leftalert:GetFrameLevel() + 2) - - local leftwindow = CreateFrame("Frame", "SuperDockWindowLeft", leftdock) - leftwindow:SetFrameStrata("BACKGROUND") - leftwindow:Point("BOTTOMRIGHT", leftalert, "TOPRIGHT", 0, 0) - leftwindow:Size(leftWidth, leftHeight) - leftdock.backdrop = SetSuperDockStyle(leftwindow) - - LeftSuperDock.fadeFunc = FadeUpdate; - - local rightbutton = CreateFrame("Button", "RightSuperDockToggleButton", SuperVillain.UIParent) - rightbutton:Point("BOTTOMRIGHT", SuperVillain.UIParent, "BOTTOMRIGHT", -1, 2) - rightbutton:Size(buttonsize, buttonsize) - rightbutton:SetFramedButtonTemplate() - rightbutton.icon = rightbutton:CreateTexture(nil, "OVERLAY") - rightbutton.icon:FillInner(rightbutton,2,2) - rightbutton.icon:SetTexture([[Interface\AddOns\SVUI\assets\artwork\Icons\DOCK-HENCHMAN]]) - rightbutton.icon:SetGradient("VERTICAL", 0.5, 0.53, 0.55, 0.8, 0.8, 1) - rightbutton.TText = "Call Henchman!" - rightbutton:RegisterForClicks("AnyUp") - rightbutton:SetScript("OnEnter", Button_OnEnter) - rightbutton:SetScript("OnLeave", Button_OnLeave) - rightbutton:SetScript("OnClick", function()SuperVillain:ToggleHenchman()end) - - local hearth = CreateFrame("Button", "RightSuperDockHearthButton", SuperVillain.UIParent, "SecureActionButtonTemplate") - hearth:Point("RIGHT", rightbutton, "LEFT", -spacing, 0) - hearth:Size(buttonsize, buttonsize) - hearth:SetFramedButtonTemplate() - - hearth.icon = hearth:CreateTexture(nil, "OVERLAY", nil, 0) - hearth.icon:FillInner(hearth,2,2) - hearth.icon:SetTexture("Interface\\AddOns\\SVUI\\assets\\artwork\\Icons\\DOCK-HEARTH") - hearth.icon:SetTexCoord(0,0.5,0,1) - hearth.icon:SetGradient("VERTICAL", 0.5, 0.53, 0.55, 0.8, 0.8, 1) - - hearth.glow = hearth:CreateTexture(nil, "OVERLAY", nil, 2) - hearth.glow:FillInner(hearth,2,2) - hearth.glow:SetTexture("Interface\\AddOns\\SVUI\\assets\\artwork\\Icons\\DOCK-HEARTH") - hearth.glow:SetTexCoord(0.5,1,0,1) - hearth.glow:Hide() - - hearth:SetAttribute("type","item") - hearth:SetAttribute("item","Hearthstone") - - hearth:SetScript("OnEnter", Hearth_OnEnter) - hearth:SetScript("OnLeave", Hearth_OnLeave) - - local toolbarRight = CreateFrame("Button", "SuperDockToolBarRight", SuperVillain.UIParent) - toolbarRight:Point("RIGHT", hearth, "LEFT", -spacing, 0) - toolbarRight:Size(1, buttonsize) - toolbarRight.currentSize = buttonsize; - - local macrobar = CreateFrame("Button", "SuperDockMacroBar", SuperVillain.UIParent) - macrobar:Point("RIGHT", toolbarRight, "LEFT", -spacing, 0) - macrobar:Size(1, buttonsize) - macrobar.currentSize = buttonsize; - - local breakStuffButton=CreateFrame('Button',"BreakStuffButton",SuperVillain.UIParent) - breakStuffButton:Point('RIGHT',macrobar,'LEFT',-6,0) - breakStuffButton:Size(buttonsize,buttonsize) - breakStuffButton:Hide() - - local rightdock = CreateFrame("Frame", "RightSuperDock", SuperVillain.UIParent) - rightdock:SetFrameStrata("BACKGROUND") - rightdock:Point("BOTTOMRIGHT", SuperVillain.UIParent, "BOTTOMRIGHT", -1, buttonsize + 10) - rightdock:Size(rightWidth, rightHeight) - SuperVillain:SetSVMovable(rightdock, "RightDock_MOVE", L["Right Dock"]) - - local rightalert = CreateFrame("Frame", "SuperDockAlertRight", rightdock) - rightalert:SetFrameStrata("BACKGROUND") - rightalert:Size(rightWidth, 1) - rightalert:Point("BOTTOMLEFT", rightdock, "BOTTOMLEFT", 0, 0) - rightalert:SetFrameLevel(rightalert:GetFrameLevel() + 2) - - local rightwindow = CreateFrame("Frame", "SuperDockWindowRight", rightdock) - rightwindow:SetFrameStrata("BACKGROUND") - rightwindow:Point("BOTTOMLEFT", rightalert, "TOPLEFT", 0, 0) - rightwindow:Size(rightWidth, rightHeight) - rightdock.backdrop = SetSuperDockStyle(rightwindow) - - RightSuperDock.fadeFunc = FadeUpdate; - if SVUI_Cache["Dock"].LeftSuperDockFaded == true then LeftSuperDock:Hide() end; - if SVUI_Cache["Dock"].RightSuperDockFaded == true then RightSuperDock:Hide() end; - - local toolbarTop = CreateFrame("Button", "SuperDockToolBarTop", SuperVillain.UIParent) - toolbarTop:Point("TOPLEFT", SuperVillain.UIParent, "TOPLEFT", 4, -2) - toolbarTop:Size(1, buttonsize - 12) - toolbarTop.openWidth = (leftWidth - 1) / 3; - - --TOP STAT HOLDERS - local topanchor = CreateFrame("Frame", "SuperDockTopDataAnchor", SuperVillain.UIParent) - topanchor:Size((leftWidth + rightWidth) - 2, buttonsize - 8) - topanchor:Point("LEFT", toolbarTop, "RIGHT", spacing, 0) - SuperVillain:AddToDisplayAudit(topanchor) - - local topleftdata = CreateFrame("Frame", "TopLeftDataPanel", topanchor) - topleftdata:Size(leftWidth - 1, buttonsize - 8) - topleftdata:Point("LEFT", topanchor, "LEFT", 0, 0) - STATS:NewAnchor(topleftdata, 3, "ANCHOR_CURSOR", 17, -4) - - local toprightdata = CreateFrame("Frame", "TopRightDataPanel", topanchor) - toprightdata:Size(leftWidth - 1, buttonsize - 8) - toprightdata:Point("RIGHT", topanchor, "RIGHT", 0, 0) - STATS:NewAnchor(toprightdata, 3, "ANCHOR_CURSOR", 17, -4) - - --BOTTOM STAT HOLDERS - local bottomanchor = CreateFrame("Frame", "SuperDockBottomDataAnchor", SuperVillain.UIParent) - bottomanchor:Size((leftWidth + rightWidth) - 2, buttonsize - 8) - bottomanchor:Point("BOTTOM", SuperVillain.UIParent, "BOTTOM", 0, 2) - SuperVillain:AddToDisplayAudit(bottomanchor) - - local bottomleftdata = CreateFrame("Frame", "BottomLeftDataPanel", bottomanchor) - bottomleftdata:Size(leftWidth - 1, buttonsize - 8) - bottomleftdata:Point("LEFT", bottomanchor, "LEFT", 0, 0) - STATS:NewAnchor(bottomleftdata, 3, "ANCHOR_CURSOR", 17, 4) - - local bottomrightdata = CreateFrame("Frame", "BottomRightDataPanel", bottomanchor) - bottomrightdata:Size(rightWidth - 1, buttonsize - 8) - bottomrightdata:Point("RIGHT", bottomanchor, "RIGHT", 0, 0) - STATS:NewAnchor(bottomrightdata, 3, "ANCHOR_CURSOR", 17, 4) -end; + local leftWidth = MOD.db.dockLeftWidth or 350; + local leftHeight = MOD.db.dockLeftHeight or 180; + local rightWidth = MOD.db.dockRightWidth or 350; + local rightHeight = MOD.db.dockRightHeight or 180; + local buttonsize = MOD.db.buttonSize or 22; + local spacing = MOD.db.buttonSpacing or 4; + local STATS = SuperVillain.Registry:Expose("SVStats"); + + -- [[ CORNER BUTTONS ]] -- + local leftbutton = CreateFrame("Button", "LeftSuperDockToggleButton", SuperVillain.UIParent) + leftbutton:Point("BOTTOMLEFT", SuperVillain.UIParent, "BOTTOMLEFT", 1, 2) + leftbutton:Size(buttonsize, buttonsize) + leftbutton:SetFramedButtonTemplate() + leftbutton.icon = leftbutton:CreateTexture(nil, "OVERLAY", nil, 0) + leftbutton.icon:FillInner(leftbutton,2,2) + leftbutton.icon:SetTexture("Interface\\AddOns\\SVUI\\assets\\artwork\\Icons\\SVUI-EMBLEM") + leftbutton:RegisterForClicks("AnyUp") + leftbutton:SetScript("OnEnter", Dock_OnEnter) + leftbutton:SetScript("OnLeave", Dock_OnLeave) + leftbutton:SetScript("OnClick", Dock_OnClick) + + local rightbutton = CreateFrame("Button", "RightSuperDockToggleButton", SuperVillain.UIParent) + rightbutton:Point("BOTTOMRIGHT", SuperVillain.UIParent, "BOTTOMRIGHT", -1, 2) + rightbutton:Size(buttonsize, buttonsize) + rightbutton:SetFramedButtonTemplate() + rightbutton.icon = rightbutton:CreateTexture(nil, "OVERLAY") + rightbutton.icon:FillInner(rightbutton,2,2) + rightbutton.icon:SetTexture([[Interface\AddOns\SVUI\assets\artwork\Icons\DOCK-HENCHMAN]]) + rightbutton.icon:SetGradient("VERTICAL", 0.5, 0.53, 0.55, 0.8, 0.8, 1) + rightbutton.TText = "Call Henchman!" + rightbutton:RegisterForClicks("AnyUp") + rightbutton:SetScript("OnEnter", Button_OnEnter) + rightbutton:SetScript("OnLeave", Button_OnLeave) + rightbutton:SetScript("OnClick", function()SuperVillain:ToggleHenchman()end) + + + -- [[ TOOLBARS AND OTHER NONSENSE ]] -- + local toolbarLeft = CreateFrame("Button", "SuperDockToolBarLeft", SuperVillain.UIParent) + toolbarLeft:Point("LEFT", leftbutton, "RIGHT", spacing, 0) + toolbarLeft:Width(1) + toolbarLeft:Height(buttonsize) + toolbarLeft.currentSize = buttonsize; + + local leftstation = CreateFrame("Frame", "SuperDockChatTabBar", SuperVillain.UIParent) + leftstation:SetFrameStrata("BACKGROUND") + leftstation:Size(leftWidth - buttonsize, buttonsize) + leftstation:Point("LEFT", toolbarLeft, "RIGHT", spacing, 0) + leftstation:SetFrameLevel(leftstation:GetFrameLevel() + 2) + leftstation.currentSize = buttonsize; + + local leftdock = CreateFrame("Frame", "LeftSuperDock", SuperVillain.UIParent) + leftdock:SetFrameStrata("BACKGROUND") + leftdock:Point("BOTTOMLEFT", SuperVillain.UIParent, "BOTTOMLEFT", 1, buttonsize + 10) + leftdock:Size(leftWidth, leftHeight) + SuperVillain:SetSVMovable(leftdock, "LeftDock_MOVE", L["Left Dock"]) + + local leftalert = CreateFrame("Frame", "SuperDockAlertLeft", leftdock) + leftalert:SetFrameStrata("BACKGROUND") + leftalert:Size(leftWidth, 1) + leftalert:Point("BOTTOMRIGHT", leftdock, "BOTTOMRIGHT",0, 0) + leftalert:SetFrameLevel(leftalert:GetFrameLevel() + 2) + + local leftwindow = CreateFrame("Frame", "SuperDockWindowLeft", leftdock) + leftwindow:SetFrameStrata("BACKGROUND") + leftwindow:Point("BOTTOMRIGHT", leftalert, "TOPRIGHT", 0, 0) + leftwindow:Size(leftWidth, leftHeight) + leftdock.backdrop = SetSuperDockStyle(leftwindow) + + LeftSuperDock.fadeFunc = FadeUpdate; + + local toolbarRight = CreateFrame("Button", "SuperDockToolBarRight", SuperVillain.UIParent) + toolbarRight:Point("RIGHT", rightbutton, "LEFT", -spacing, 0) + toolbarRight:Size(1, buttonsize) + toolbarRight.currentSize = buttonsize; + + local macrobar = CreateFrame("Button", "SuperDockMacroBar", SuperVillain.UIParent) + macrobar:Point("RIGHT", toolbarRight, "LEFT", -spacing, 0) + macrobar:Size(1, buttonsize) + macrobar.currentSize = buttonsize; + + local rightdock = CreateFrame("Frame", "RightSuperDock", SuperVillain.UIParent) + rightdock:SetFrameStrata("BACKGROUND") + rightdock:Point("BOTTOMRIGHT", SuperVillain.UIParent, "BOTTOMRIGHT", -1, buttonsize + 10) + rightdock:Size(rightWidth, rightHeight) + SuperVillain:SetSVMovable(rightdock, "RightDock_MOVE", L["Right Dock"]) + + local rightalert = CreateFrame("Frame", "SuperDockAlertRight", rightdock) + rightalert:SetFrameStrata("BACKGROUND") + rightalert:Size(rightWidth, 1) + rightalert:Point("BOTTOMLEFT", rightdock, "BOTTOMLEFT", 0, 0) + rightalert:SetFrameLevel(rightalert:GetFrameLevel() + 2) + + local rightwindow = CreateFrame("Frame", "SuperDockWindowRight", rightdock) + rightwindow:SetFrameStrata("BACKGROUND") + rightwindow:Point("BOTTOMLEFT", rightalert, "TOPLEFT", 0, 0) + rightwindow:Size(rightWidth, rightHeight) + rightdock.backdrop = SetSuperDockStyle(rightwindow) + + RightSuperDock.fadeFunc = FadeUpdate; + if SVUI_Cache["Dock"].LeftSuperDockFaded == true then LeftSuperDock:Hide() end + if SVUI_Cache["Dock"].RightSuperDockFaded == true then RightSuperDock:Hide() end + + local toolbarTop = CreateFrame("Button", "SuperDockToolBarTop", SuperVillain.UIParent) + toolbarTop:Point("TOPLEFT", SuperVillain.UIParent, "TOPLEFT", 4, -2) + toolbarTop:Size(1, buttonsize - 12) + toolbarTop.openWidth = (leftWidth - 1) / 3; + + --TOP STAT HOLDERS + local topanchor = CreateFrame("Frame", "SuperDockTopDataAnchor", SuperVillain.UIParent) + topanchor:Size((leftWidth + rightWidth) - 2, buttonsize - 8) + topanchor:Point("LEFT", toolbarTop, "RIGHT", spacing, 0) + SuperVillain:AddToDisplayAudit(topanchor) + + local topleftdata = CreateFrame("Frame", "TopLeftDataPanel", topanchor) + topleftdata:Size(leftWidth - 1, buttonsize - 8) + topleftdata:Point("LEFT", topanchor, "LEFT", 0, 0) + STATS:NewAnchor(topleftdata, 3, "ANCHOR_CURSOR", 17, -4) + + local toprightdata = CreateFrame("Frame", "TopRightDataPanel", topanchor) + toprightdata:Size(leftWidth - 1, buttonsize - 8) + toprightdata:Point("RIGHT", topanchor, "RIGHT", 0, 0) + STATS:NewAnchor(toprightdata, 3, "ANCHOR_CURSOR", 17, -4) + + --BOTTOM STAT HOLDERS + local bottomanchor = CreateFrame("Frame", "SuperDockBottomDataAnchor", SuperVillain.UIParent) + bottomanchor:Size((leftWidth + rightWidth) - 2, buttonsize - 8) + bottomanchor:Point("BOTTOM", SuperVillain.UIParent, "BOTTOM", 0, 2) + SuperVillain:AddToDisplayAudit(bottomanchor) + + local bottomleftdata = CreateFrame("Frame", "BottomLeftDataPanel", bottomanchor) + bottomleftdata:Size(leftWidth - 1, buttonsize - 8) + bottomleftdata:Point("LEFT", bottomanchor, "LEFT", 0, 0) + STATS:NewAnchor(bottomleftdata, 3, "ANCHOR_CURSOR", 17, 4) + + local bottomrightdata = CreateFrame("Frame", "BottomRightDataPanel", bottomanchor) + bottomrightdata:Size(rightWidth - 1, buttonsize - 8) + bottomrightdata:Point("RIGHT", bottomanchor, "RIGHT", 0, 0) + STATS:NewAnchor(bottomrightdata, 3, "ANCHOR_CURSOR", 17, 4) +end function MOD:UpdateThisPackage() self:UpdateSuperDock(); -end; +end function MOD:ConstructThisPackage() - self:Protect("LoadToolBarProfessions") - self:CreateSuperBorders() - self:CreateDockPanels() - self:CreateDockWindow() - self:Protect("LoadToolBarProfessions"); - SuperVillain:ExecuteTimer(MOD.LoadToolBarProfessions, 5) - --self:RegisterEvent("PLAYER_REGEN_DISABLED", "DockletEnterCombat") - --self:RegisterEvent("PLAYER_REGEN_ENABLED", "DockletExitCombat") - self:DockletInit() - self:UpdateDockBackdrops() -end; + self:Protect("LoadToolBarProfessions") + self:CreateSuperBorders() + self:CreateDockPanels() + self:CreateDockWindow() + self:Protect("LoadToolBarProfessions"); + SuperVillain:ExecuteTimer(MOD.LoadToolBarProfessions, 5) + --self:RegisterEvent("PLAYER_REGEN_DISABLED", "DockletEnterCombat") + --self:RegisterEvent("PLAYER_REGEN_ENABLED", "DockletExitCombat") + self:DockletInit() + self:UpdateDockBackdrops() +end SuperVillain.Registry:NewPackage(MOD, "SVDock") \ No newline at end of file diff --git a/Interface/AddOns/SVUI/packages/dock/common/toolbar.lua b/Interface/AddOns/SVUI/packages/dock/common/toolbar.lua index 7f390d9..4e2db0f 100644 --- a/Interface/AddOns/SVUI/packages/dock/common/toolbar.lua +++ b/Interface/AddOns/SVUI/packages/dock/common/toolbar.lua @@ -15,14 +15,14 @@ S U P E R - V I L L A I N - U I By: Munglunch # --]] local SuperVillain, L = unpack(select(2, ...)); local MOD = SuperVillain.Registry:Expose('SVDock'); -MOD.BreakingShit = false; --[[ ########################################################## LOCAL VARS ########################################################## ]]-- -local tools={}; -local ICON_FILE = [[Interface\AddOns\SVUI\assets\artwork\Icons\PROFESSIONS]]; +MOD.DefaultWindow = false +local tinsert, wipe, pairs, ipairs, unpack, pcall, select = tinsert, table.wipe, pairs, ipairs, unpack, pcall, select; +local format, gsub, strfind, strmatch, tonumber = format, gsub, strfind, strmatch, tonumber; local TOOL_DATA = { ["Alchemy"] = {0,0.25,0,0.25}, -- PRO-ALCHEMY ["Archaeology"] = {0.25,0.5,0,0.25,"Survey"}, -- PRO-ARCHAELOGY @@ -39,50 +39,87 @@ local TOOL_DATA = { ["Skinning"] = {0,0.25,0.75,1}, -- PRO-SKINNING ["Tailoring"] = {0.25,0.5,0.75,1}, -- PRO-TAILORING ["Default"] = {0.5,0.75,0,0.25} -}; +} --[[ ########################################################## PRE VARS/FUNCTIONS ########################################################## ]]-- -local button_OnEnter=function(b) +local function HearthTime() + local start,duration = GetItemCooldown(6948) + local expires = duration - (GetTime() - start) + if expires > 0.05 then + local timeLeft = 0; + local calc = 0; + if expires < 4 then + return format("|cffff0000%.1f|r", expires) + elseif expires < 60 then + return format("|cffffff00%d|r", floor(expires)) + elseif expires < 3600 then + timeLeft = ceil(expires / 60); + calc = floor((expires / 60) + .5); + return format("|cffff9900%dm|r", timeLeft) + elseif expires < 86400 then + timeLeft = ceil(expires / 3600); + calc = floor((expires / 3600) + .5); + return format("|cff66ffff%dh|r", timeLeft) + else + timeLeft = ceil(expires / 86400); + calc = floor((expires / 86400) + .5); + return format("|cff6666ff%dd|r", timeLeft) + end + else + return "|cff6666ffReady|r" + end +end + +local function GetDefaultWindow() + local window = MOD.DefaultWindow + if window and _G[window] and not _G[window]:IsShown() then + SuperDockWindowRight.FrameName = window + SuperDockWindowRight:Show() + end +end + +local Button_OnEnter = function(b) if not b.IsOpen then b:SetPanelColor("highlight") - b.icon:SetGradient(unpack(SuperVillain.Media.gradient.bizzaro)) + b.icon:SetGradient(unpack(SuperVillain.Media.gradient.bizzaro)) end - GameTooltip:SetOwner(b,'ANCHOR_TOPLEFT',0,4) + GameTooltip:SetOwner(b, "ANCHOR_TOPLEFT", 0, 4) GameTooltip:ClearLines() - GameTooltip:AddLine(b.TText,1,1,1) + GameTooltip:AddLine(b.TText, 1, 1, 1) GameTooltip:Show() -end; +end -local button_OnLeave=function(b) +local Button_OnLeave = function(b) if not b.IsOpen then b:SetPanelColor("special") b.icon:SetGradient("VERTICAL", 0.5, 0.53, 0.55, 0.8, 0.8, 1) end GameTooltip:Hide() -end; +end -local button_OnClick=function(b) - if InCombatLockdown()then return end; - if b.FrameName and _G[b.FrameName] then - SuperDockWindowRight.FrameName=b.FrameName - if not _G[b.FrameName]:IsShown() then +local Button_OnClick = function(self) + if InCombatLockdown() then return end + local linkedFrame = self.FrameName + if linkedFrame and _G[linkedFrame] then + SuperDockWindowRight.FrameName = linkedFrame + if not _G[linkedFrame]:IsShown() then if not SuperDockWindowRight:IsShown()then SuperDockWindowRight:Show() end MOD:DockletHide() - _G[b.FrameName]:Show() - b.IsOpen=true; - b:SetPanelColor("green") - b.icon:SetGradient(unpack(SuperVillain.Media.gradient.green)) + _G[linkedFrame]:Show() + self.IsOpen = true; + self:SetPanelColor("green") + self.icon:SetGradient(unpack(SuperVillain.Media.gradient.green)) elseif not SuperDockWindowRight:IsShown()then SuperDockWindowRight:Show() - _G[b.FrameName]:Show() - b.IsOpen=true; - b:SetPanelColor("green") - b.icon:SetGradient(unpack(SuperVillain.Media.gradient.green)) + _G[linkedFrame]:Show() + self.IsOpen = true; + self:SetPanelColor("green") + self.icon:SetGradient(unpack(SuperVillain.Media.gradient.green)) end else if SuperDockWindowRight:IsShown()then @@ -90,106 +127,107 @@ local button_OnClick=function(b) else SuperDockWindowRight:Show() end - b.IsOpen=false; - b:SetPanelColor("special") - b.icon:SetGradient("VERTICAL", 0.5, 0.53, 0.55, 0.8, 0.8, 1) - if MOD.DefaultWindow and _G[MOD.DefaultWindow] and not _G[MOD.DefaultWindow]:IsShown() then - SuperDockWindowRight.FrameName = MOD.DefaultWindow - SuperDockWindowRight:Show() - end - end; -end; + self.IsOpen = false; + self:SetPanelColor("special") + self.icon:SetGradient("VERTICAL", 0.5, 0.53, 0.55, 0.8, 0.8, 1) + GetDefaultWindow() + end +end -local macro_OnEnter = function(b) - b:SetPanelColor("highlight") - b.icon:SetGradient(unpack(SuperVillain.Media.gradient.bizzaro)) - GameTooltip:SetOwner(b, "ANCHOR_TOPLEFT", 2, 4) +local Macro_OnEnter = function(self) + self:SetPanelColor("highlight") + self.icon:SetGradient(unpack(SuperVillain.Media.gradient.bizzaro)) + GameTooltip:SetOwner(self, "ANCHOR_TOPLEFT", 2, 4) GameTooltip:ClearLines() - if not b.TText2 then - GameTooltip:AddLine(b.TText, 1, 1, 1) + if not self.TText2 then + GameTooltip:AddLine(self.TText, 1, 1, 1) else - GameTooltip:AddDoubleLine(b.TText, b.TText2, 1, 1, 1) - end; + GameTooltip:AddDoubleLine(self.TText, self.TText2, 1, 1, 1) + end GameTooltip:Show() -end; +end -local macro_OnLeave=function(b) - b:SetPanelColor("special") - b.icon:SetGradient("VERTICAL", 0.5, 0.53, 0.55, 0.8, 0.8, 1) +local Macro_OnLeave = function(self) + self:SetPanelColor("special") + self.icon:SetGradient("VERTICAL", 0.5, 0.53, 0.55, 0.8, 0.8, 1) GameTooltip:Hide() -end; +end + +local Hearth_OnEnter = function(self) + if InCombatLockdown() then return end + self.glow:Show() + self:SetPanelColor("highlight") + GameTooltip:SetOwner(self, "ANCHOR_TOPLEFT", 0, 4) + GameTooltip:ClearLines() + local remaining = HearthTime() + GameTooltip:AddLine(L["Hearthstone"], 1, 1, 1) + GameTooltip:AddDoubleLine(L["Time Remaining"], remaining, 1, 1, 1, 0, 1, 1) + if(self.ExtraSpell) then + GameTooltip:AddLine(" ", 1, 1, 1) + GameTooltip:AddDoubleLine(self.ExtraSpell, "[Right Click]", 1, 1, 1, 0, 1, 0) + end + GameTooltip:Show() +end + +local Hearth_OnLeave = function(self) + if InCombatLockdown() then return end + self.glow:Hide() + self:SetPanelColor("special") + GameTooltip:Hide() +end MOD.ToolsList = {}; MOD.ToolsSafty = {}; -MOD.MacroCount = 0; MOD.LastAddedTool = false; -MOD.LastAddedMacro = false; --[[ ########################################################## CORE FUNCTIONS ########################################################## ]]-- -MOD.DefaultWindow = false; function MOD:RemoveTool(frame) - if not frame or not frame.listIndex then return end; + if not frame or not frame.listIndex then return end local name = frame:GetName(); - if not MOD.ToolsSafty[name] then return end; + if not MOD.ToolsSafty[name] then return end MOD.ToolsSafty[name] = false; local i = frame.listIndex; - tremove(MOD.ToolsList,i) + tremove(MOD.ToolsList, i) local width; local height = SuperDockToolBarRight.currentSize; - MOD.LastAddedTool = MOD.ToolsList[#MOD.ToolsList]; + MOD.LastAddedTool = MOD.ToolsList[#MOD.ToolsList] width = #MOD.ToolsList * (height + 6) SuperDockToolBarRight:ClearAllPoints() - SuperDockToolBarRight:Point('RIGHT',RightSuperDockHearthButton,'LEFT',-6,0) - SuperDockToolBarRight:Size(width,height) + SuperDockToolBarRight:Point("RIGHT", RightSuperDockHearthButton, "LEFT", -6, 0) + SuperDockToolBarRight:Size(width, height) SuperDockMacroBar:ClearAllPoints() - SuperDockMacroBar:Point('RIGHT',SuperDockToolBarRight,'LEFT',-6,0) -end; + SuperDockMacroBar:Point("RIGHT", SuperDockToolBarRight, "LEFT", -6, 0) +end function MOD:AddTool(frame) local name = frame:GetName(); - if MOD.ToolsSafty[name] then return end; + if MOD.ToolsSafty[name] then return end MOD.ToolsSafty[name] = true; local width; local height = SuperDockToolBarRight.currentSize; if not MOD.LastAddedTool or MOD.LastAddedTool == frame then - frame:Point("RIGHT",SuperDockToolBarRight,"RIGHT",-6,0); + frame:Point("RIGHT", SuperDockToolBarRight, "RIGHT", -6, 0); else - frame:Point("RIGHT",MOD.LastAddedTool,"LEFT",-6,0); + frame:Point("RIGHT", MOD.LastAddedTool, "LEFT", -6, 0); end - tinsert(MOD.ToolsList,frame); - frame.listIndex = #MOD.ToolsList; + tinsert(MOD.ToolsList, frame) + frame.listIndex = #MOD.ToolsList; MOD.LastAddedTool = frame; width = #MOD.ToolsList * (height + 6) SuperDockToolBarRight:ClearAllPoints() - SuperDockToolBarRight:Point('RIGHT',RightSuperDockHearthButton,'LEFT',-6,0) - SuperDockToolBarRight:Size(width,height) - SuperDockMacroBar:ClearAllPoints() - SuperDockMacroBar:Point('RIGHT',SuperDockToolBarRight,'LEFT',-6,0) -end; - -function MOD:AddMacroTool(frame) - local width; - local height = SuperDockToolBarRight.currentSize; - if not MOD.LastAddedMacro then - frame:Point("RIGHT",SuperDockMacroBar,"RIGHT",-6,0); - else - frame:Point("RIGHT",MOD.LastAddedMacro,"LEFT",-6,0); - end - MOD.LastAddedMacro=frame; - MOD.MacroCount=MOD.MacroCount+1; - width=MOD.MacroCount*(height+6) + SuperDockToolBarRight:Point("RIGHT", RightSuperDockHearthButton, "LEFT", -6, 0) + SuperDockToolBarRight:Size(width, height) SuperDockMacroBar:ClearAllPoints() - SuperDockMacroBar:Size(width,height) - SuperDockMacroBar:Point('RIGHT',SuperDockToolBarRight,'LEFT',-6,0) -end; + SuperDockMacroBar:Point("RIGHT", SuperDockToolBarRight, "LEFT", -6, 0) +end function MOD:CreateBasicToolButton(name,texture,onclick,frameName,isdefault) local fName = frameName or name; local dockIcon = texture or [[Interface\AddOns\SVUI\assets\artwork\Icons\DOCK-ADDON]]; - local clickFunction = (type(onclick)=="function") and onclick or button_OnClick; + local clickFunction = (type(onclick)=="function") and onclick or Button_OnClick; local size = SuperDockToolBarRight.currentSize; local button = _G[fName .. "_ToolBarButton"] or CreateFrame("Button",("%s_ToolBarButton"):format(fName),SuperDockToolBarRight) MOD:AddTool(button) @@ -202,10 +240,10 @@ function MOD:CreateBasicToolButton(name,texture,onclick,frameName,isdefault) button.FrameName = fName; if isdefault == true then MOD.DefaultWindow = fName; - end; + end button.IsOpen = isdefault or false; - button:SetScript("OnEnter",button_OnEnter) - button:SetScript("OnLeave",button_OnLeave) + button:SetScript("OnEnter",Button_OnEnter) + button:SetScript("OnLeave",Button_OnLeave) button:SetScript("OnClick",clickFunction) _G[fName].ToggleName = fName.."_ToolBarButton"; if(isdefault) then @@ -214,68 +252,135 @@ function MOD:CreateBasicToolButton(name,texture,onclick,frameName,isdefault) else button.icon:SetGradient(unpack(SuperVillain.Media.gradient.light)) end -end; +end -function MOD:CreateMacroToolButton(name,texCoords,itemID) - if name == "Mining" then name = "Smelting" end; - local data = TOOL_DATA[texCoords] or TOOL_DATA["Default"]; - local size = SuperDockMacroBar.currentSize; - local button = CreateFrame("Button",("%s_MacroBarButton"):format(itemID),SuperDockMacroBar,"SecureActionButtonTemplate") - button:Size(size,size) - MOD:AddMacroTool(button) - button:SetFramedButtonTemplate() - button.icon = button:CreateTexture(nil,"OVERLAY") - button.icon:FillInner(button,2,2) - button.icon:SetTexture(ICON_FILE) - button.icon:SetTexCoord(data[1],data[2],data[3],data[4]) - button.icon:SetGradient("VERTICAL", 0.5, 0.53, 0.55, 0.8, 0.8, 1) - button.skillName = name; - button.itemId = itemID; - button.TText = "Open " .. name; - button:SetAttribute("type","macro") - if(data[5]) then - local rightClickSpell = data[5] - button:SetAttribute("macrotext", "/cast [mod:shift]" .. rightClickSpell .. "; " .. name) - button.TText2 = "Shift-Click to use " .. rightClickSpell - else - button:SetAttribute("macrotext","/cast " .. name) - end; - button:SetScript("OnEnter",macro_OnEnter) - button:SetScript("OnLeave",macro_OnLeave) -end; +do + local LastAddedMacro; + local MacroCount = 0; -function MOD:LoadToolBarProfessions() - if(MOD.ToolBarLoaded) then return end - local j,k,l,m,n,o=GetProfessions(); - if o~=nil then - local t,u,v,w,x,y,z,A,B,C=GetProfessionInfo(o) - if(t ~= "Herbalism" and t ~= "Skinning") then - MOD:CreateMacroToolButton(t,t,o) - end - end; - if l~=nil then - local t,u,v,w,x,y,z,A,B,C=GetProfessionInfo(l) - if(t ~= "Herbalism" and t ~= "Skinning") then - MOD:CreateMacroToolButton(t,t,l) + local function AddMacroTool(frame) + local width; + local height = SuperDockToolBarRight.currentSize; + if not LastAddedMacro then + frame:Point("RIGHT", SuperDockMacroBar, "RIGHT", -6, 0); + else + frame:Point("RIGHT", LastAddedMacro, "LEFT", -6, 0); end - end; - if n~=nil then - local t,u,v,w,x,y,z,A,B,C=GetProfessionInfo(n) - if(t ~= "Herbalism" and t ~= "Skinning") then - MOD:CreateMacroToolButton(t,t,n) - end - end; - if k~=nil then - local t,u,v,w,x,y,z,A,B,C=GetProfessionInfo(k) - if(t ~= "Herbalism" and t ~= "Skinning") then - MOD:CreateMacroToolButton(t,t,k) + LastAddedMacro = frame; + MacroCount = MacroCount + 1; + width = MacroCount * (height + 6) + SuperDockMacroBar:ClearAllPoints() + SuperDockMacroBar:Size(width, height) + SuperDockMacroBar:Point("RIGHT", SuperDockToolBarRight, "LEFT", -6, 0) + end + + local function CreateMacroToolButton(proName, itemID, size) + if proName == "Mining" then proName = "Smelting" end + local data = TOOL_DATA[proName] or TOOL_DATA["Default"] + local button = CreateFrame("Button", ("%s_MacroBarButton"):format(itemID), SuperDockMacroBar, "SecureActionButtonTemplate") + button:Size(size, size) + AddMacroTool(button) + button:SetFramedButtonTemplate() + button.icon = button:CreateTexture(nil, "OVERLAY") + button.icon:FillInner(button, 2, 2) + button.icon:SetTexture([[Interface\AddOns\SVUI\assets\artwork\Icons\PROFESSIONS]]) + button.icon:SetTexCoord(data[1], data[2], data[3], data[4]) + button.icon:SetGradient("VERTICAL", 0.5, 0.53, 0.55, 0.8, 0.8, 1) + button.skillName = proName; + button.itemId = itemID; + button.TText = "Open " .. proName; + button:SetAttribute("type", "macro") + if(data[5]) then + local rightClickSpell = data[5] + button:SetAttribute("macrotext", "/cast [mod:shift]" .. rightClickSpell .. "; " .. proName) + button.TText2 = "Shift-Click to use " .. rightClickSpell + else + button:SetAttribute("macrotext","/cast " .. proName) + end + button:SetScript("OnEnter", Macro_OnEnter) + button:SetScript("OnLeave", Macro_OnLeave) + end + + function MOD:LoadToolBarProfessions() + if(MOD.ToolBarLoaded) then return end + local size = SuperDockMacroBar.currentSize + local hearth = CreateFrame("Button", "RightSuperDockHearthButton", SuperVillain.UIParent, "SecureActionButtonTemplate") + hearth:Size(size, size) + hearth:SetFramedButtonTemplate() + AddMacroTool(hearth) + hearth.icon = hearth:CreateTexture(nil, "OVERLAY", nil, 0) + hearth.icon:FillInner(hearth,2,2) + hearth.icon:SetTexture("Interface\\AddOns\\SVUI\\assets\\artwork\\Icons\\DOCK-HEARTH") + hearth.icon:SetTexCoord(0,0.5,0,1) + hearth.icon:SetGradient("VERTICAL", 0.5, 0.53, 0.55, 0.8, 0.8, 1) + hearth.glow = hearth:CreateTexture(nil, "OVERLAY", nil, 2) + hearth.glow:FillInner(hearth,2,2) + hearth.glow:SetTexture("Interface\\AddOns\\SVUI\\assets\\artwork\\Icons\\DOCK-HEARTH") + hearth.glow:SetTexCoord(0.5,1,0,1) + hearth.glow:Hide() + hearth:SetAttribute("type","item") + hearth:SetAttribute("item","Hearthstone") + + if(SuperVillain.class == "SHAMAN") then + hearth:SetAttribute("type2","spell") + hearth:SetAttribute("spell","Astral Recall") + hearth.ExtraSpell = "Astral Recall" + elseif(SuperVillain.class == "DEATHKNIGHT") then + hearth:SetAttribute("type2","spell") + hearth:SetAttribute("spell","Death Gate") + hearth.ExtraSpell = "Death Gate" + elseif(SuperVillain.class == "DRUID") then + hearth:SetAttribute("type2","spell") + hearth:SetAttribute("spell","Teleport: Moonglade") + hearth.ExtraSpell = "Teleport: Moonglade" + elseif(SuperVillain.class == "MONK") then + hearth:SetAttribute("type2","spell") + hearth:SetAttribute("spell","Zen Pilgrimage") + hearth.ExtraSpell = "Zen Pilgrimage" end - end; - if j~=nil then - local t,u,v,w,x,y,z,A,B,C=GetProfessionInfo(j) - if(t ~= "Herbalism" and t ~= "Skinning") then - MOD:CreateMacroToolButton(t,t,j) + + hearth:SetScript("OnEnter", Hearth_OnEnter) + hearth:SetScript("OnLeave", Hearth_OnLeave) + + local proName + local prof1, prof2, archaeology, _, cooking, firstAid = GetProfessions(); + + if(firstAid ~= nil) then + proName, _ = GetProfessionInfo(firstAid) + if(proName ~= "Herbalism" and proName ~= "Skinning") then + CreateMacroToolButton(proName, firstAid, size) + end + end + if(archaeology ~= nil) then + proName, _ = GetProfessionInfo(archaeology) + if(proName ~= "Herbalism" and proName ~= "Skinning") then + CreateMacroToolButton(proName, archaeology, size) + end + end + if(cooking ~= nil) then + proName, _ = GetProfessionInfo(cooking) + if(proName ~= "Herbalism" and proName ~= "Skinning") then + CreateMacroToolButton(proName, cooking, size) + end + end + if(prof2 ~= nil) then + proName, _ = GetProfessionInfo(prof2) + if(proName ~= "Herbalism" and proName ~= "Skinning") then + CreateMacroToolButton(proName, prof2, size) + end + end + if(prof1 ~= nil) then + proName, _ = GetProfessionInfo(prof1) + if(proName ~= "Herbalism" and proName ~= "Skinning") then + CreateMacroToolButton(proName, prof1, size) + end end - end; - MOD.ToolBarLoaded = true + + local breakStuffButton = CreateFrame("Button", "BreakStuffButton", SuperVillain.UIParent) + breakStuffButton:Size(size, size) + AddMacroTool(breakStuffButton) + breakStuffButton:Hide() + + MOD.ToolBarLoaded = true + end end \ No newline at end of file diff --git a/Interface/AddOns/SVUI/packages/unit/common/actionpanel.lua b/Interface/AddOns/SVUI/packages/unit/common/actionpanel.lua index 1c295c1..6374454 100644 --- a/Interface/AddOns/SVUI/packages/unit/common/actionpanel.lua +++ b/Interface/AddOns/SVUI/packages/unit/common/actionpanel.lua @@ -194,23 +194,18 @@ NAME ]]-- local function CreateNameText(frame, unitName) local db = MOD.db - if(MOD.db[unitName] and MOD.db[unitName].name) then db = MOD.db[unitName].name end - local name = frame:CreateFontString(nil, "OVERLAY") + name:SetFont(LSM:Fetch("font", db.font), db.fontSize, db.fontOutline) name:SetShadowOffset(2, -2) name:SetShadowColor(0, 0, 0, 1) - name:SetFontTemplate() - if unitNmae == "target" then name:SetPoint("RIGHT", frame) else name:SetPoint("CENTER", frame) end - - name:SetFont(LSM:Fetch("font", db.font), db.fontSize, db.fontOutline) return name; end --[[ diff --git a/Interface/AddOns/SVUI/packages/unit/common/aurabars.lua b/Interface/AddOns/SVUI/packages/unit/common/aurabars.lua index af1cde5..3c50390 100644 --- a/Interface/AddOns/SVUI/packages/unit/common/aurabars.lua +++ b/Interface/AddOns/SVUI/packages/unit/common/aurabars.lua @@ -26,7 +26,7 @@ local LSM = LibStub("LibSharedMedia-3.0"); LOCAL VARIABLES ########################################################## ]]-- -local tsort,floor,sub,huge = table.sort,math.floor,string.sub,math.huge; +local tsort,floor,sub = table.sort, math.floor, string.sub; --[[ ########################################################## BUILD FUNCTION @@ -44,14 +44,11 @@ local AuraRemover_OnClick = function(self) end local function PostCreateAuraBars(self) - self:SetPanelTemplate("Bar") - local auraBar = self.statusBar - auraBar.iconHolder:SetPanelTemplate("Transparent") - auraBar.iconHolder:RegisterForClicks("RightButtonUp") - auraBar.iconHolder:SetScript("OnClick", AuraRemover_OnClick) + self.iconHolder:RegisterForClicks("RightButtonUp") + self.iconHolder:SetScript("OnClick", AuraRemover_OnClick) end -function MOD:ColorizeAuraBars() +local function ColorizeAuraBars(self) local bars = self.bars; for i = 1, #bars do local auraBar = bars[i] @@ -89,12 +86,11 @@ local function CheckAuraFilter(setting, helpful) return false end -function MOD:AuraBarFilter(unit, name, _, _, _, debuffType, duration, _, unitCaster, isStealable, shouldConsolidate, spellID) - if not MOD.db then return end - if(spellID == 65148) then +local function AuraBarFilter(self, unit, name, _, _, _, debuffType, duration, _, unitCaster, isStealable, shouldConsolidate, spellID) + if((not self.db) or (spellID == 65148)) then return false; end - local db = self.db.aurabar; + local db = self.db.aurabar local filtered = (unitCaster == "player" or unitCaster == "vehicle") and true or false; local allowed = true; local pass = false; @@ -104,28 +100,28 @@ function MOD:AuraBarFilter(unit, name, _, _, _, debuffType, duration, _, unitCas allowed = filtered; pass = true end - if CheckAuraFilter(db.filterDispellable, friendly)then - if (self.type == "buffs" and not isStealable) or (self.type == "debuffs" and debuffType and not SuperVillain:DispellAvailable(debuffType)) or debuffType == nil then + if CheckAuraFilter(db.filterDispellable, friendly) then + if (debuffType and not SuperVillain.Dispellable[debuffType]) or debuffType == nil then filtered = false end pass = true end - if CheckAuraFilter(db.filterRaid, friendly)then + if CheckAuraFilter(db.filterRaid, friendly) then if shouldConsolidate == 1 then filtered = false end pass = true end - if CheckAuraFilter(db.filterInfinite, friendly)then + if CheckAuraFilter(db.filterInfinite, friendly) then if duration == 0 or not duration then filtered = false end pass = true end - if CheckAuraFilter(db.filterBlocked, friendly)then + if CheckAuraFilter(db.filterBlocked, friendly) then local blackList = SuperVillain.Filters["Blocked"][name] if blackList and blackList.enable then filtered = false end pass = true end - if CheckAuraFilter(db.filterAllowed, friendly)then + if CheckAuraFilter(db.filterAllowed, friendly) then local whiteList = SuperVillain.Filters["Allowed"][name] if whiteList and whiteList.enable then filtered = true @@ -134,7 +130,7 @@ function MOD:AuraBarFilter(unit, name, _, _, _, debuffType, duration, _, unitCas end pass = true end - if db.useFilter and SuperVillain.Filters[db.useFilter]then + if db.useFilter and SuperVillain.Filters[db.useFilter] then local spellsDB = SuperVillain.Filters[db.useFilter]; if db.useFilter ~= "Blocked" then if spellsDB[name] and spellsDB[name].enable and allowed then @@ -153,36 +149,18 @@ end UTILITY ########################################################## ]]-- -function MOD:CreateAuraBarHeader(frame,unitName) - local auraBarParent = CreateFrame('Frame',nil,frame) +function MOD:CreateAuraBarHeader(frame, unitName) + local auraBarParent = CreateFrame("Frame", nil, frame) auraBarParent.parent = frame; auraBarParent.PostCreateBar = PostCreateAuraBars; auraBarParent.gap = 1; auraBarParent.spacing = 1; auraBarParent.spark = true; - auraBarParent.filter = self.AuraBarFilter; - auraBarParent.PostUpdate = self.ColorizeAuraBars; - local bartex = self.db.auraBarStatusbar - auraBarParent.barTexture = LSM:Fetch("statusbar", bartex); + auraBarParent.filter = AuraBarFilter; + auraBarParent.PostUpdate = ColorizeAuraBars; + auraBarParent.barTexture = LSM:Fetch("statusbar", MOD.db.auraBarStatusbar) auraBarParent.textFont = LSM:Fetch("font", MOD.db.auraFont) auraBarParent.textSize = MOD.db.auraFontSize auraBarParent.textOutline = MOD.db.auraFontOutline return auraBarParent -end - -function MOD:SortAuraBars(parent,sorting) - if not parent then return end - if sorting=='TIME_REMAINING' then - parent.sort=true; - elseif sorting=='TIME_REMAINING_REVERSE' then - parent.sort=function(a,b)local compA,compB=a.noTime and huge or a.expirationTime, b.noTime and huge or b.expirationTime; return compA < compB end - elseif sorting=='TIME_DURATION' then - parent.sort=function(a,b)local compA,compB=a.noTime and huge or a.duration, b.noTime and huge or b.duration; return compA > compB end - elseif sorting=='TIME_DURATION_REVERSE' then - parent.sort=function(a,b)local compA,compB=a.noTime and huge or a.duration, b.noTime and huge or b.duration; return compA < compB end - elseif sorting=='NAME' then - parent.sort=function(a,b)return a.name > b.name end - else - parent.sort=nil; - end -end \ No newline at end of file +end \ No newline at end of file diff --git a/Interface/AddOns/SVUI/packages/unit/common/auras.lua b/Interface/AddOns/SVUI/packages/unit/common/auras.lua index dfb6aac..a946b04 100644 --- a/Interface/AddOns/SVUI/packages/unit/common/auras.lua +++ b/Interface/AddOns/SVUI/packages/unit/common/auras.lua @@ -51,6 +51,7 @@ local assert = enforce; assert(oUF_SuperVillain, "SVUI was unable to locate oUF."); local LSM = LibStub("LibSharedMedia-3.0"); +local CustomAuraFilter; local AURA_FONT = [[Interface\AddOns\SVUI\assets\fonts\Display.ttf]]; local AURA_FONTSIZE = 11; local AURA_OUTLINE = "OUTLINE"; @@ -90,7 +91,7 @@ local AuraRemover_OnClick = function(self) end end -local function PostCreateAuraIcon(self, aura) +local PostCreateAuraIcon = function(self, aura) aura.cd.noOCC = true; aura.cd.noCooldownCount = true; aura.cd:SetReverse() @@ -120,8 +121,59 @@ local function PostCreateAuraIcon(self, aura) aura:SetScript("OnClick", AuraRemover_OnClick) aura.styled = true end --- unit, icon, index, offset -local function PostUpdateAuraIcon(self, unit, button, index, offset) + +local UpdateAuraTimer = function(self, elapsed) + self.expiration = self.expiration - elapsed; + if(self.nextUpdate > 0) then + self.nextUpdate = self.nextUpdate - elapsed; + return + end + if(self.expiration <= 0) then + self:SetScript("OnUpdate", nil) + if(self.text:GetFont()) then + self.text:SetText("") + end + return + end + + local expires = self.expiration; + local calc, timeLeft = 0, 0; + local timeFormat; + + if expires < 60 then + if expires >= 4 then + timeLeft = floor(expires) + timeFormat = "|cffffff00%d|r" + self.nextUpdate = 0.51 + else + timeLeft = expires + timeFormat = "|cffff0000%.1f|r" + self.nextUpdate = 0.051 + end + elseif expires < 3600 then + timeFormat = "|cffffffff%dm|r" + timeLeft = ceil(expires / 60); + calc = floor((expires / 60) + .5); + self.nextUpdate = calc > 1 and ((expires - calc) * 29.5) or (expires - 59.5); + elseif expires < 86400 then + timeFormat = "|cff66ffff%dh|r" + timeLeft = ceil(expires / 3600); + calc = floor((expires / 3600) + .5); + self.nextUpdate = calc > 1 and ((expires - calc) * 1799.5) or (expires - 3570); + else + timeFormat = "|cff6666ff%dd|r" + timeLeft = ceil(expires / 86400); + calc = floor((expires / 86400) + .5); + self.nextUpdate = calc > 1 and ((expires - calc) * 43199.5) or (expires - 86400); + end + if self.text:GetFont() then + self.text:SetFormattedText(timeFormat, timeLeft) + else + self.text:SetFormattedText(timeFormat, timeLeft) + end +end + +local PostUpdateAuraIcon = function(self, unit, button, index, offset) local name, _, _, _, dtype, duration, expiration, _, isStealable = UnitAura(unit, index, button.filter) local isFriend = UnitIsFriend('player', unit) == 1 and true or false if button.isDebuff then @@ -157,7 +209,7 @@ local function PostUpdateAuraIcon(self, unit, button, index, offset) button.expirationTime = expiration button.expiration = expiration - GetTime() button.nextUpdate = -1 - button:SetScript('OnUpdate', MOD.UpdateAuraTimer) + button:SetScript('OnUpdate', UpdateAuraTimer) end if button.expirationTime ~= expiration then button.expirationTime = expiration @@ -173,98 +225,100 @@ local function PostUpdateAuraIcon(self, unit, button, index, offset) end end -local function CheckAuraFilter(setting, helpful) - local friend, enemy = false, false - if type(setting) == "boolean" then - friend = setting; - enemy = setting - elseif setting and type(setting) ~= "string" then - friend = setting.friendly; - enemy = setting.enemy +do + local function _test(setting, helpful) + local friend, enemy = false, false + if type(setting) == "boolean" then + friend = setting; + enemy = setting + elseif setting and type(setting) ~= "string" then + friend = setting.friendly; + enemy = setting.enemy + end + if (friend and helpful) or (enemy and not helpful) then + return true; + end + return false end - if (friend and helpful) or (enemy and not helpful) then - return true; - end - return false -end -local function CustomAuraIconFilter(self, unit, icon, name, _, _, _, dtype, duration, _, caster, isStealable, shouldConsolidate, spellID, canApplyAura, isBossAura) - if spellID == 65148 then return false end - local isPlayer, friendly; - local db = self:GetParent().db; - local auraType = self.type; - if not db or not auraType or not db[auraType] then return true end; - local filtered = true; - local allowed = true; - local pass = false; - local isPlayer = caster == "player"or caster == "vehicle" - local friendly = UnitIsFriend("player", unit) == 1 and true or false; - local filterType = friendly and db.friendlyAuraType or db.enemyAuraType; - icon.isPlayer = isPlayer; - icon.owner = caster; - icon.name = name; - icon.priority = 0; - local shieldSpell = SuperVillain.Filters["Shield"][name] - if shieldSpell and shieldSpell.enable then - icon.priority = shieldSpell.priority - end - if CheckAuraFilter(db.filterPlayer, friendly)then - if isPlayer then filtered = true else filtered = false end - allowed = filtered; - pass = true - end - if CheckAuraFilter(db.filterDispellable, friendly) then - if (auraType == "buffs" and not isStealable) or (auraType == "debuffs" and dtype and not SuperVillain:DispellAvailable(dtype)) or dtype == nil then - filtered = false + CustomAuraFilter = function(self, unit, icon, name, _, _, _, debuffType, duration, _, caster, isStealable, shouldConsolidate, spellID, canApplyAura, isBossAura) + if spellID == 65148 then return false end + local isPlayer, friendly; + local db = self:GetParent().db; + local auraType = self.type; + if not db or not auraType or not db[auraType] then return true end; + local filtered = true; + local allowed = true; + local pass = false; + local isPlayer = caster == "player"or caster == "vehicle" + local friendly = UnitIsFriend("player", unit) == 1 and true or false; + local filterType = friendly and db.friendlyAuraType or db.enemyAuraType; + icon.isPlayer = isPlayer; + icon.owner = caster; + icon.name = name; + icon.priority = 0; + local shieldSpell = SuperVillain.Filters["Shield"][name] + if shieldSpell and shieldSpell.enable then + icon.priority = shieldSpell.priority end - pass = true - end - if CheckAuraFilter(db.filterRaid, friendly) then - if shouldConsolidate == 1 then filtered = false end - pass = true - end - if CheckAuraFilter(db.filterInfinite, friendly)then - if duration == 0 or not duration then - filtered = false + if _test(db.filterPlayer, friendly) then + if isPlayer then filtered = true else filtered = false end + allowed = filtered; + pass = true end - pass = true - end - if CheckAuraFilter(db.useBlocked, friendly) then - local blackListSpell = SuperVillain.Filters["Blocked"][name] - if blackListSpell and blackListSpell.enable then - filtered = false + if _test(db.filterDispellable, friendly) then + if (auraType == "buffs" and not isStealable) or (auraType == "debuffs" and debuffType and not SuperVillain.Dispellable[debuffType]) or debuffType == nil then + filtered = false + end + pass = true end - pass = true - end - if CheckAuraFilter(db.useAllowed, friendly) then - local whiteListSpell = SuperVillain.Filters["Allowed"][name] - if whiteListSpell and whiteListSpell.enable then - filtered = true; - icon.priority = whiteListSpell.priority - elseif not pass then - filtered = false + if _test(db.filterRaid, friendly) then + if shouldConsolidate == 1 then filtered = false end + pass = true end - pass = true - end - - if db.useFilter and SuperVillain.Filters[db.useFilter] then - local spellDB = SuperVillain.Filters[db.useFilter]; - if db.useFilter ~= "Blocked" then - if spellDB[name] and spellDB[name].enable and allowed then + if _test(db.filterInfinite, friendly)then + if duration == 0 or not duration then + filtered = false + end + pass = true + end + if _test(db.useBlocked, friendly) then + local blackListSpell = SuperVillain.Filters["Blocked"][name] + if blackListSpell and blackListSpell.enable then + filtered = false + end + pass = true + end + if _test(db.useAllowed, friendly) then + local whiteListSpell = SuperVillain.Filters["Allowed"][name] + if whiteListSpell and whiteListSpell.enable then filtered = true; - icon.priority = spellDB[name].priority; - if db.useFilter == "Shield" and (spellID == 86698 or spellID == 86669) then - filtered = false - end + icon.priority = whiteListSpell.priority elseif not pass then filtered = false end - elseif spellDB[name] and spellDB[name].enable then - filtered = false - end - end - return filtered -end + pass = true + end + + if db.useFilter and SuperVillain.Filters[db.useFilter] then + local spellDB = SuperVillain.Filters[db.useFilter]; + if db.useFilter ~= "Blocked" then + if spellDB[name] and spellDB[name].enable and allowed then + filtered = true; + icon.priority = spellDB[name].priority; + if db.useFilter == "Shield" and (spellID == 86698 or spellID == 86669) then + filtered = false + end + elseif not pass then + filtered = false + end + elseif spellDB[name] and spellDB[name].enable then + filtered = false + end + end + return filtered + end +end --[[ ########################################################## BUILD FUNCTION @@ -275,7 +329,7 @@ function MOD:CreateBuffs(frame) aura.spacing = 2; aura.PostCreateIcon = PostCreateAuraIcon; aura.PostUpdateIcon = PostUpdateAuraIcon; - aura.CustomFilter = CustomAuraIconFilter; + aura.CustomFilter = CustomAuraFilter; aura:SetFrameLevel(10) aura.type = "buffs" aura.textFont = LSM:Fetch("font", MOD.db.auraFont) @@ -289,7 +343,7 @@ function MOD:CreateDebuffs(frame) aura.spacing = 2; aura.PostCreateIcon = PostCreateAuraIcon; aura.PostUpdateIcon = PostUpdateAuraIcon; - aura.CustomFilter = CustomAuraIconFilter; + aura.CustomFilter = CustomAuraFilter; aura.type = "debuffs" aura:SetFrameLevel(10) aura.textFont = LSM:Fetch("font", MOD.db.auraFont) @@ -307,64 +361,53 @@ function MOD:CreateAuraWatch(frame) aWatch.strictMatching = true; aWatch.icons = {} return aWatch -end - -function MOD:UpdateAuraTimer(elapsed) - self.expiration = self.expiration - elapsed; - if(self.nextUpdate > 0) then - self.nextUpdate = self.nextUpdate - elapsed; - return - end - if(self.expiration <= 0) then - self:SetScript("OnUpdate", nil) - if(self.text:GetFont()) then - self.text:SetText("") - end - return - end - - local expires = self.expiration; - local calc, timeLeft = 0, 0; - local timeFormat; +end - if expires < 60 then - if expires >= 4 then - timeLeft = floor(expires) - timeFormat = "|cffffff00%d|r" - self.nextUpdate = 0.51 - else - timeLeft = expires - timeFormat = "|cffff0000%.1f|r" - self.nextUpdate = 0.051 +function MOD:SmartAuraDisplay() + local db = self.db; + local unit = self.unit; + if not db or not db.smartAuraDisplay or db.smartAuraDisplay == 'DISABLED' or not UnitExists(unit) then return end + local buffs = self.Buffs; + local debuffs = self.Debuffs; + local bars = self.AuraBars; + local friendly = UnitIsFriend('player',unit) == 1 and true or false; + + if friendly then + if db.smartAuraDisplay == 'SHOW_DEBUFFS_ON_FRIENDLIES' then + buffs:Hide() + debuffs:Show() + else + buffs:Show() + debuffs:Hide() end - elseif expires < 3600 then - timeFormat = "|cffffffff%dm|r" - timeLeft = ceil(expires / 60); - calc = floor((expires / 60) + .5); - self.nextUpdate = calc > 1 and ((expires - calc) * 29.5) or (expires - 59.5); - elseif expires < 86400 then - timeFormat = "|cff66ffff%dh|r" - timeLeft = ceil(expires / 3600); - calc = floor((expires / 3600) + .5); - self.nextUpdate = calc > 1 and ((expires - calc) * 1799.5) or (expires - 3570); else - timeFormat = "|cff6666ff%dd|r" - timeLeft = ceil(expires / 86400); - calc = floor((expires / 86400) + .5); - self.nextUpdate = calc > 1 and ((expires - calc) * 43199.5) or (expires - 86400); + if db.smartAuraDisplay == 'SHOW_DEBUFFS_ON_FRIENDLIES' then + buffs:Show() + debuffs:Hide() + else + buffs:Hide() + debuffs:Show() + end end - if self.text:GetFont() then - self.text:SetFormattedText(timeFormat, timeLeft) - else - self.text:SetFormattedText(timeFormat, timeLeft) + + if buffs:IsShown() then + buffs:ClearAllPoints() + SuperVillain:ReversePoint(buffs, db.buffs.anchorPoint, self, db.buffs.xOffset, db.buffs.yOffset) + if db.aurabar.attachTo ~= 'FRAME' then + bars:ClearAllPoints() + bars:SetPoint('BOTTOMLEFT', buffs, 'TOPLEFT', 0, 1) + bars:SetPoint('BOTTOMRIGHT', buffs, 'TOPRIGHT', 0, 1) + end end -end -function MOD:UpdateAuraWatchFromHeader(group, override) - assert(self[group],"Invalid group specified.") - for i=1,self[group]:GetNumChildren() do - local frame = select(i, self[group]:GetChildren()) - if frame and frame.Health then MOD:UpdateAuraWatch(frame,override) end + if debuffs:IsShown() then + debuffs:ClearAllPoints() + SuperVillain:ReversePoint(debuffs, db.debuffs.anchorPoint, self, db.debuffs.xOffset, db.debuffs.yOffset) + if db.aurabar.attachTo ~= 'FRAME' then + bars:ClearAllPoints() + bars:SetPoint('BOTTOMLEFT', debuffs, 'TOPLEFT', 0, 1) + bars:SetPoint('BOTTOMRIGHT', debuffs, 'TOPRIGHT', 0, 1) + end end end --[[ @@ -536,56 +579,12 @@ function MOD:UpdateAuraWatch(frame, override) frame.AuraWatch.Update(frame) end temp = nil -end ---[[ -########################################################## -UTILITY -########################################################## -]]-- -function MOD:SmartAuraDisplay() - local db = self.db; - local unit = self.unit; - if not db or not db.smartAuraDisplay or db.smartAuraDisplay == 'DISABLED' or not UnitExists(unit) then return end - local buffs = self.Buffs; - local debuffs = self.Debuffs; - local bars = self.AuraBars; - local friendly = UnitIsFriend('player',unit) == 1 and true or false; - - if friendly then - if db.smartAuraDisplay == 'SHOW_DEBUFFS_ON_FRIENDLIES' then - buffs:Hide() - debuffs:Show() - else - buffs:Show() - debuffs:Hide() - end - else - if db.smartAuraDisplay == 'SHOW_DEBUFFS_ON_FRIENDLIES' then - buffs:Show() - debuffs:Hide() - else - buffs:Hide() - debuffs:Show() - end - end - - if buffs:IsShown() then - buffs:ClearAllPoints() - SuperVillain:ReversePoint(buffs, db.buffs.anchorPoint, self, db.buffs.xOffset, db.buffs.yOffset) - if db.aurabar.attachTo ~= 'FRAME' then - bars:ClearAllPoints() - bars:SetPoint('BOTTOMLEFT', buffs, 'TOPLEFT', 0, 1) - bars:SetPoint('BOTTOMRIGHT', buffs, 'TOPRIGHT', 0, 1) - end - end +end - if debuffs:IsShown() then - debuffs:ClearAllPoints() - SuperVillain:ReversePoint(debuffs, db.debuffs.anchorPoint, self, db.debuffs.xOffset, db.debuffs.yOffset) - if db.aurabar.attachTo ~= 'FRAME' then - bars:ClearAllPoints() - bars:SetPoint('BOTTOMLEFT', debuffs, 'TOPLEFT', 0, 1) - bars:SetPoint('BOTTOMRIGHT', debuffs, 'TOPRIGHT', 0, 1) - end +function MOD:UpdateAuraWatchFromHeader(group, override) + assert(self[group], "Invalid group specified.") + for i = 1, self[group]:GetNumChildren() do + local frame = select(i, self[group]:GetChildren()) + if frame and frame.Health then MOD:UpdateAuraWatch(frame, override) end end end \ No newline at end of file diff --git a/Interface/AddOns/SVUI/packages/unit/common/media.lua b/Interface/AddOns/SVUI/packages/unit/common/media.lua index a80e1c9..abcf609 100644 --- a/Interface/AddOns/SVUI/packages/unit/common/media.lua +++ b/Interface/AddOns/SVUI/packages/unit/common/media.lua @@ -109,7 +109,6 @@ function MOD:RefreshUnitMedia(unitName, updateUpvalues) local db = self.db local unitDB = db[unitName] if(self[unitName] and unitDB and unitDB.enable) then - local frame = self[unitName] local panel = frame.InfoPanel if(panel) then diff --git a/Interface/AddOns/SVUI/packages/unit/frames/all_units.lua b/Interface/AddOns/SVUI/packages/unit/frames/all_units.lua index f202cd2..760fda6 100644 --- a/Interface/AddOns/SVUI/packages/unit/frames/all_units.lua +++ b/Interface/AddOns/SVUI/packages/unit/frames/all_units.lua @@ -34,6 +34,8 @@ local gmatch, gsub, join = string.gmatch, string.gsub, string.join; local abs, ceil, floor, round, min = math.abs, math.ceil, math.floor, math.round, math.min; --[[ TABLE METHODS ]]-- local twipe = table.wipe; +--[[ MUNGLUNCH's FASTER ASSERT FUNCTION ]]-- +local assert = enforce; --[[ ########################################################## GET ADDON DATA @@ -43,36 +45,65 @@ local SuperVillain, L = unpack(select(2, ...)); local MOD = SuperVillain.Registry:Expose('SVUnit'); local _, ns = ... local oUF_SuperVillain = ns.oUF ---[[ MUNGLUNCH's FASTER ASSERT FUNCTION ]]-- -local assert = enforce; assert(oUF_SuperVillain, "SVUI was unable to locate oUF."); local LSM = LibStub("LibSharedMedia-3.0"); --[[ ########################################################## -LOCAL VARS -########################################################## -]]-- -local SETTINGS = { - ["player"]={"BOTTOMLEFT","TOPRIGHT","BOTTOMRIGHT","TOPLEFT",1,-1}, - ["target"]={"BOTTOMRIGHT","TOPLEFT","BOTTOMLEFT","TOPRIGHT",-1,1}, - ["targettarget"]={"BOTTOMRIGHT","TOPLEFT","BOTTOMLEFT","TOPRIGHT",-1,1}, - ["pet"]={"BOTTOMLEFT","TOPRIGHT","BOTTOMRIGHT","TOPLEFT",1,-1}, - ["pettarget"]={"BOTTOMRIGHT","TOPLEFT","BOTTOMLEFT","TOPRIGHT",-1,1}, - ["focus"]={"BOTTOMLEFT","TOPRIGHT","BOTTOMRIGHT","TOPLEFT",1,-1}, - ["focustarget"]={"BOTTOMRIGHT","TOPLEFT","BOTTOMLEFT","TOPRIGHT",-1,1}, - ["party"]={"BOTTOMLEFT","TOPRIGHT","BOTTOMRIGHT","TOPLEFT",1,-1}, - ["raid"]={"BOTTOMLEFT","TOPRIGHT","BOTTOMRIGHT","TOPLEFT",1,-1}, - ["raidpet"]={"BOTTOMLEFT","TOPRIGHT","BOTTOMRIGHT","TOPLEFT",1,-1}, - ["assist"]={"BOTTOMLEFT","TOPRIGHT","BOTTOMRIGHT","TOPLEFT",1,-1}, - ["tank"]={"BOTTOMLEFT","TOPRIGHT","BOTTOMRIGHT","TOPLEFT",1,-1}, - ["boss"]={"BOTTOMRIGHT","TOPLEFT","BOTTOMLEFT","TOPRIGHT",-1,1}, - ["arena"]={"BOTTOMRIGHT","TOPLEFT","BOTTOMLEFT","TOPRIGHT",-1,1} -}; ---[[ -########################################################## -LOCAL FUNCTIONS +LOCALS ########################################################## -]]-- +]]-- +local SortAuraBars; +local ReversedUnit = { + ["target"] = true, + ["targettarget"] = true, + ["pettarget"] = true, + ["focustarget"] = true, + ["boss"] = true, + ["arena"] = true, +} + +do + local hugeMath = math.huge + + local TRRSort = function(a, b) + local compA = a.noTime and hugeMath or a.expirationTime + local compB = b.noTime and hugeMath or b.expirationTime + return compA < compB + end + + local TDSort = function(a, b) + local compA = a.noTime and hugeMath or a.duration + local compB = b.noTime and hugeMath or b.duration + return compA > compB + end + + local TDRSort = function(a, b) + local compA = a.noTime and hugeMath or a.duration + local compB = b.noTime and hugeMath or b.duration + return compA < compB + end + + local NSort = function(a, b) + return a.name > b.name + end + + SortAuraBars = function(parent, sorting) + if not parent then return end + if sorting == "TIME_REMAINING" then + parent.sort = true; + elseif sorting == "TIME_REMAINING_REVERSE" then + parent.sort = TRRSort + elseif sorting == "TIME_DURATION" then + parent.sort = TDSort + elseif sorting == "TIME_DURATION_REVERSE" then + parent.sort = TDRSort + elseif sorting == "NAME" then + parent.sort = NSort + else + parent.sort = nil; + end + end +end local function FindAnchorFrame(frame, anchor, badPoint) if badPoint or anchor == 'FRAME' then return frame @@ -97,21 +128,27 @@ CORE FUNCTIONS ]]-- function MOD:RefreshUnitLayout(frame, template) local db = frame.db - local UNIT_TEMPLATE = SETTINGS[template] or {"BOTTOMLEFT","TOPRIGHT","BOTTOMRIGHT","TOPLEFT",1,-1}; local GAP = SuperVillain:Scale(3); local UNIT_WIDTH = db.width; local UNIT_HEIGHT = db.height; local BEST_SIZE = min(UNIT_WIDTH,UNIT_HEIGHT); local AURA_HOLDER = db.width local powerHeight = (db.power and db.power.enable) and (db.power.height - 1) or 1; - local BOTTOM_ANCHOR1 = UNIT_TEMPLATE[1]; - local TOP_ANCHOR1 = UNIT_TEMPLATE[2]; - local BOTTOM_ANCHOR2 = UNIT_TEMPLATE[3]; - local TOP_ANCHOR2 = UNIT_TEMPLATE[4]; - local MOD1,MOD2 = UNIT_TEMPLATE[5],UNIT_TEMPLATE[6]; + + local TOP_ANCHOR1, TOP_ANCHOR2, TOP_MODIFIER = "TOPRIGHT", "TOPLEFT", 1; + local BOTTOM_ANCHOR1, BOTTOM_ANCHOR2, BOTTOM_MODIFIER = "BOTTOMLEFT", "BOTTOMRIGHT", -1; + if(ReversedUnit[template]) then + TOP_ANCHOR1 = "TOPLEFT" + TOP_ANCHOR2 = "TOPRIGHT" + TOP_MODIFIER = -1 + BOTTOM_ANCHOR1 = "BOTTOMRIGHT" + BOTTOM_ANCHOR2 = "BOTTOMLEFT" + BOTTOM_MODIFIER = 1 + end + local portraitOverlay = false; local overlayAnimation = false; - local portraitWidth = (1 * MOD1); + local portraitWidth = (1 * TOP_MODIFIER); local healthPanel = frame.HealthPanel local infoPanel = frame.InfoPanel local calculatedHeight = db.height; @@ -122,7 +159,7 @@ function MOD:RefreshUnitLayout(frame, template) if(db.portrait and db.portrait.enable) then if(not db.portrait.overlay) then - portraitWidth = ((db.portrait.width * MOD1) + (1 * MOD1)) + portraitWidth = ((db.portrait.width * TOP_MODIFIER) + (1 * TOP_MODIFIER)) else portraitOverlay = true overlayAnimation = self.db.overlayAnimation @@ -147,7 +184,7 @@ function MOD:RefreshUnitLayout(frame, template) end healthPanel:ClearAllPoints() - healthPanel:Point(TOP_ANCHOR1, frame, TOP_ANCHOR1, (1 * MOD2), -1) + healthPanel:Point(TOP_ANCHOR1, frame, TOP_ANCHOR1, (1 * BOTTOM_MODIFIER), -1) healthPanel:Point(BOTTOM_ANCHOR1, frame, BOTTOM_ANCHOR1, portraitWidth, powerHeight) if(frame.StatusPanel) then @@ -316,8 +353,8 @@ function MOD:RefreshUnitLayout(frame, template) end power:ClearAllPoints() power:Height(powerHeight - 2) - power:Point(BOTTOM_ANCHOR1, frame, BOTTOM_ANCHOR1, (portraitWidth - (1 * MOD2)), 2) - power:Point(BOTTOM_ANCHOR2, frame, BOTTOM_ANCHOR2, (2 * MOD2), 2) + power:Point(BOTTOM_ANCHOR1, frame, BOTTOM_ANCHOR1, (portraitWidth - (1 * BOTTOM_MODIFIER)), 2) + power:Point(BOTTOM_ANCHOR2, frame, BOTTOM_ANCHOR2, (2 * BOTTOM_MODIFIER), 2) elseif frame:IsElementEnabled('Power')then frame:DisableElement('Power') power:Hide() @@ -342,7 +379,7 @@ function MOD:RefreshUnitLayout(frame, template) end altPower.text:SetAlpha(1) altPower:Point(TOP_ANCHOR2, frame, TOP_ANCHOR2, portraitWidth, -1) - altPower:Point(TOP_ANCHOR1, frame, TOP_ANCHOR1, (1 * MOD2), -1) + altPower:Point(TOP_ANCHOR1, frame, TOP_ANCHOR1, (1 * BOTTOM_MODIFIER), -1) altPower:SetHeight(powerHeight) altPower.Smooth = self.db.smoothbars; altPower:HookScript("OnShow", Alt_OnShow) @@ -377,8 +414,8 @@ function MOD:RefreshUnitLayout(frame, template) portrait.anchor:SetFrameLevel(frame.ActionPanel:GetFrameLevel()) end - portrait:Point(TOP_ANCHOR2, healthPanel, TOP_ANCHOR2, (1 * MOD1), -1) - portrait:Point(BOTTOM_ANCHOR2, healthPanel, BOTTOM_ANCHOR2, (1 * MOD2), 1) + portrait:Point(TOP_ANCHOR2, healthPanel, TOP_ANCHOR2, (1 * TOP_MODIFIER), -1) + portrait:Point(BOTTOM_ANCHOR2, healthPanel, BOTTOM_ANCHOR2, (1 * BOTTOM_MODIFIER), 1) portrait.Panel:Show() else @@ -391,11 +428,11 @@ function MOD:RefreshUnitLayout(frame, template) end if not frame.Power or not db.power.enable then - portrait:Point(TOP_ANCHOR2, frame, TOP_ANCHOR2, (1 * MOD1), -1) - portrait:Point(BOTTOM_ANCHOR2, healthPanel, BOTTOM_ANCHOR1, (4 * MOD2), 0) + portrait:Point(TOP_ANCHOR2, frame, TOP_ANCHOR2, (1 * TOP_MODIFIER), -1) + portrait:Point(BOTTOM_ANCHOR2, healthPanel, BOTTOM_ANCHOR1, (4 * BOTTOM_MODIFIER), 0) else - portrait:Point(TOP_ANCHOR2, frame, TOP_ANCHOR2, (1 * MOD1), -1) - portrait:Point(BOTTOM_ANCHOR2, frame.Power, BOTTOM_ANCHOR1, (4 * MOD2), 0) + portrait:Point(TOP_ANCHOR2, frame, TOP_ANCHOR2, (1 * TOP_MODIFIER), -1) + portrait:Point(BOTTOM_ANCHOR2, frame.Power, BOTTOM_ANCHOR1, (4 * BOTTOM_MODIFIER), 0) end end else @@ -517,7 +554,7 @@ function MOD:RefreshUnitLayout(frame, template) local attachTo = FindAnchorFrame(frame, db.buffs.attachTo, db.debuffs.attachTo == 'BUFFS' and db.buffs.attachTo == 'DEBUFFS') - SuperVillain:ReversePoint(buffs, db.buffs.anchorPoint, attachTo, db.buffs.xOffset + MOD2, db.buffs.yOffset) + SuperVillain:ReversePoint(buffs, db.buffs.anchorPoint, attachTo, db.buffs.xOffset + BOTTOM_MODIFIER, db.buffs.yOffset) buffs:SetWidth((auraSize + buffs.spacing) * perRow) buffs:Height((auraSize + buffs.spacing) * numRows) buffs["growth-y"] = db.buffs.verticalGrowth; @@ -549,7 +586,7 @@ function MOD:RefreshUnitLayout(frame, template) local attachTo = FindAnchorFrame(frame, db.debuffs.attachTo, db.debuffs.attachTo == 'BUFFS' and db.buffs.attachTo == 'DEBUFFS') - SuperVillain:ReversePoint(debuffs, db.debuffs.anchorPoint, attachTo, db.debuffs.xOffset + MOD2, db.debuffs.yOffset) + SuperVillain:ReversePoint(debuffs, db.debuffs.anchorPoint, attachTo, db.debuffs.xOffset + BOTTOM_MODIFIER, db.debuffs.yOffset) debuffs:SetWidth((auraSize + debuffs.spacing) * perRow) debuffs:Height((auraSize + debuffs.spacing) * numRows) debuffs["growth-y"] = db.debuffs.verticalGrowth; @@ -568,47 +605,49 @@ function MOD:RefreshUnitLayout(frame, template) if frame.AuraBars then local auraBar = frame.AuraBars; if db.aurabar.enable then - if not frame:IsElementEnabled('AuraBars') then frame:EnableElement('AuraBars')end + if not frame:IsElementEnabled("AuraBars") then frame:EnableElement("AuraBars") end auraBar:Show() - auraBar.friendlyAuraType = db.aurabar.friendlyAuraType; - auraBar.enemyAuraType = db.aurabar.enemyAuraType; + auraBar.friendlyAuraType = db.aurabar.friendlyAuraType + auraBar.enemyAuraType = db.aurabar.enemyAuraType + local attachTo = frame.ActionPanel; local preOffset = 1; - if(db.aurabar.attachTo == 'BUFFS' and frame.Buffs and frame.Buffs:IsShown()) then + if(db.aurabar.attachTo == "BUFFS" and frame.Buffs and frame.Buffs:IsShown()) then attachTo = frame.Buffs preOffset = 10 - elseif(db.aurabar.attachTo == 'DEBUFFS' and frame.Debuffs and frame.Debuffs:IsShown()) then + elseif(db.aurabar.attachTo == "DEBUFFS" and frame.Debuffs and frame.Debuffs:IsShown()) then attachTo = frame.Debuffs preOffset = 10 - elseif not isPlayer and SVUI_Player and db.aurabar.attachTo == 'PLAYER_AURABARS' then + elseif not isPlayer and SVUI_Player and db.aurabar.attachTo == "PLAYER_AURABARS" then attachTo = SVUI_Player.AuraBars preOffset = 10 - end - local anchorPoint, relativePoint = 'BOTTOM', 'TOP'; - if db.aurabar.anchorPoint == 'BELOW' then - anchorPoint, relativePoint = 'TOP', 'BOTTOM'; + end + + auraBar.auraBarHeight = db.aurabar.height; + auraBar:ClearAllPoints() + auraBar:SetSize(UNIT_WIDTH, db.aurabar.height) + + if db.aurabar.anchorPoint == "BELOW" then + auraBar:Point("TOPLEFT", attachTo, "BOTTOMLEFT", 1, -preOffset) auraBar.down = true else + auraBar:Point("BOTTOMLEFT", attachTo, "TOPLEFT", 1, preOffset) auraBar.down = false end - local offSet = SuperVillain:Scale(preOffset) - local yOffset = db.aurabar.anchorPoint == 'BELOW' and -offSet or offSet; - auraBar.auraBarHeight = db.aurabar.height; - auraBar:ClearAllPoints() - auraBar:SetSize(UNIT_WIDTH, db.aurabar.height) - auraBar:Point(anchorPoint..'LEFT', attachTo, relativePoint..'LEFT', 1, yOffset) auraBar.buffColor = oUF_SuperVillain.colors.buff_bars + if self.db.auraBarByType then auraBar.debuffColor = nil; auraBar.defaultDebuffColor = oUF_SuperVillain.colors.debuff_bars else auraBar.debuffColor = oUF_SuperVillain.colors.debuff_bars auraBar.defaultDebuffColor = nil - end - self:SortAuraBars(auraBar, db.aurabar.sort) + end + + SortAuraBars(auraBar, db.aurabar.sort) auraBar:SetAnchors() else - if frame:IsElementEnabled('AuraBars')then frame:DisableElement('AuraBars')auraBar:Hide()end + if frame:IsElementEnabled("AuraBars")then frame:DisableElement("AuraBars")auraBar:Hide()end end end diff --git a/Interface/AddOns/SVUI/packages/unit/frames/basic/focus.lua b/Interface/AddOns/SVUI/packages/unit/frames/basic/focus.lua index 67521d0..3a9d2ca 100644 --- a/Interface/AddOns/SVUI/packages/unit/frames/basic/focus.lua +++ b/Interface/AddOns/SVUI/packages/unit/frames/basic/focus.lua @@ -28,20 +28,25 @@ BUILD FUNCTION ]]-- function MOD.Construct:focus(frame) MOD:SetActionPanel(frame, "focus") + frame.Health = MOD:CreateHealthBar(frame, true, true) - frame.Health.frequentUpdates = true; + frame.Health.frequentUpdates = true + + frame.HealPrediction = MOD:CreateHealPrediction(frame, true) frame.Power = MOD:CreatePowerBar(frame, true) - frame.Buffs = MOD:CreateBuffs(frame) + frame.Castbar = MOD:CreateCastbar(frame, false, L["Focus Castbar"]) - frame.Castbar.SafeZone = nil; + frame.Castbar.SafeZone = nil + frame.Castbar.LatencyTexture:Hide() - frame.RaidIcon = MOD:CreateRaidIcon(frame) + frame.Buffs = MOD:CreateBuffs(frame) frame.Debuffs = MOD:CreateDebuffs(frame) - frame.HealPrediction = MOD:CreateHealPrediction(frame, true) frame.AuraBars = MOD:CreateAuraBarHeader(frame, "focus") - frame.Range = { insideAlpha = 1, outsideAlpha = 1 } tinsert(frame.__elements, MOD.SmartAuraDisplay) frame:RegisterEvent("PLAYER_FOCUS_CHANGED", MOD.SmartAuraDisplay) + + frame.RaidIcon = MOD:CreateRaidIcon(frame) + frame.Range = { insideAlpha = 1, outsideAlpha = 1 } frame.XRay = MOD:CreateXRay_Closer(frame) frame.XRay:SetPoint("BOTTOMRIGHT", 20, -10) frame:Point("BOTTOMRIGHT", SVUI_Target, "TOPRIGHT", 0, 220) diff --git a/Interface/AddOns/SVUI/packages/unit/frames/basic/target.lua b/Interface/AddOns/SVUI/packages/unit/frames/basic/target.lua index c73bb8b..35d1682 100644 --- a/Interface/AddOns/SVUI/packages/unit/frames/basic/target.lua +++ b/Interface/AddOns/SVUI/packages/unit/frames/basic/target.lua @@ -28,14 +28,25 @@ BUILD FUNCTION ]]-- function MOD.Construct:target(frame) MOD:SetActionPanel(frame, "target") + frame.Health = MOD:CreateHealthBar(frame, true, true) frame.Health.frequentUpdates = true + frame.HealPrediction = MOD:CreateHealPrediction(frame, true) + frame.Power = MOD:CreatePowerBar(frame, true, true) frame.Power.frequentUpdates = true + MOD:CreatePortrait(frame) + + frame.Castbar = MOD:CreateCastbar(frame, true, L["Target Castbar"], true) + frame.Buffs = MOD:CreateBuffs(frame) frame.Debuffs = MOD:CreateDebuffs(frame) - frame.Castbar = MOD:CreateCastbar(frame, true, L["Target Castbar"], true) + frame.AuraBars = MOD:CreateAuraBarHeader(frame, "target") + frame.Afflicted = MOD:CreateAfflicted(frame) + tinsert(frame.__elements, MOD.SmartAuraDisplay) + frame:RegisterEvent("PLAYER_TARGET_CHANGED", MOD.SmartAuraDisplay) + frame.RaidIcon = MOD:CreateRaidIcon(frame) local isSmall = MOD.db.target.combobar.smallIcons if(SuperVillain.class == "ROGUE") then @@ -43,14 +54,8 @@ function MOD.Construct:target(frame) elseif(SuperVillain.class == "DRUID") then frame.HyperCombo = MOD:CreateDruidCombobar(frame, isSmall) end - frame.HealPrediction = MOD:CreateHealPrediction(frame, true) - frame.Afflicted = MOD:CreateAfflicted(frame) frame.GPS = MOD:CreateGPS(frame) - - tinsert(frame.__elements, MOD.SmartAuraDisplay) - frame:RegisterEvent("PLAYER_TARGET_CHANGED", MOD.SmartAuraDisplay) - frame.AuraBars = MOD:CreateAuraBarHeader(frame, "target") frame.Range = { insideAlpha = 1, outsideAlpha = 1 } frame.XRay = MOD:CreateXRay(frame) frame.XRay:SetPoint("TOPRIGHT", 12, 12) diff --git a/Interface/AddOns/SVUI/system/system.lua b/Interface/AddOns/SVUI/system/system.lua index c80707d..75b3223 100644 --- a/Interface/AddOns/SVUI/system/system.lua +++ b/Interface/AddOns/SVUI/system/system.lua @@ -72,6 +72,7 @@ SuperVillain.Media = {}; SuperVillain.DisplayAudit = {}; SuperVillain.DynamicOptions = {}; SuperVillain.snaps = {}; +SuperVillain.Dispellable = {}; SuperVillain.Options = { type="group", name="|cff339fffConfig-O-Matic|r", args={}, }; local svui_meta = {} @@ -95,12 +96,13 @@ CREATE GLOBAL NAMESPACE _G[SVUINameSpace] = SVUICore; --[[ ########################################################## -CREATE GLOBAL NAMESPACE +SET MANY VARIABLES ########################################################## ]]-- +local toonClass = select(2,UnitClass("player")); SuperVillain.version = GetAddOnMetadata(..., "Version"); SuperVillain.HVAL = format("|cff%02x%02x%02x",0.2*255,0.5*255,1*255); -SuperVillain.class = select(2,UnitClass("player")); +SuperVillain.class = toonClass; SuperVillain.name = UnitName("player"); SuperVillain.realm = GetRealmName(); SuperVillain.build = tonumber(bld); @@ -137,65 +139,43 @@ DISPEL MECHANICS ########################################################## ]]-- local droodSpell1, droodSpell2 = GetSpellInfo(110309), GetSpellInfo(4987); -local RefClassData = { - PALADIN = { - ["ROLE"] = {"C", "T", "M"}, - ["DISPELL"] = {["Poison"] = true, ["Magic"] = false, ["Disease"] = true}, - ["MagicSpec"] = 1 - }, - PRIEST = { - ["ROLE"] = {"C", "C", "C"}, - ["DISPELL"] = {["Magic"] = true, ["Disease"] = true}, - ["MagicSpec"] = false - }, - WARLOCK = { - ["ROLE"] = {"C", "C", "C"}, - ["DISPELL"] = false, - ["MagicSpec"] = false - }, - WARRIOR = { - ["ROLE"] = {"M", "M", "T"}, - ["DISPELL"] = false, - ["MagicSpec"] = false - }, - HUNTER = { - ["ROLE"] = {"M", "M", "M"}, - ["DISPELL"] = false, - ["MagicSpec"] = false - }, - SHAMAN = { - ["ROLE"] = {"C", "M", "C"}, - ["DISPELL"] = {["Magic"] = false, ["Curse"] = true}, - ["MagicSpec"] = 3 - }, - ROGUE = { - ["ROLE"] = {"M", "M", "M"}, - ["DISPELL"] = false, - ["MagicSpec"] = false - }, - MAGE = { - ["ROLE"] = {"C", "C", "C"}, - ["DISPELL"] = {["Curse"] = true}, - ["MagicSpec"] = false - }, - DEATHKNIGHT = { - ["ROLE"] = {"T", "M", "M"}, - ["DISPELL"] = false, - ["MagicSpec"] = false - }, - DRUID = { - ["ROLE"] = {"C", "M", "T", "C"}, - ["DISPELL"] = {["Magic"] = false, ["Curse"] = true, ["Poison"] = true, ["Disease"] = false}, - ["MagicSpec"] = 4 - }, - MONK = { - ["ROLE"] = {"T", "C", "M"}, - ["DISPELL"] = {["Magic"] = false, ["Disease"] = true, ["Poison"] = true}, - ["MagicSpec"] = 2 - } -} - -local DispellData = RefClassData[SuperVillain.class]["DISPELL"]; +local RefClassRoles; +local RefMagicSpec; +do + if(toonClass == "PRIEST") then + RefClassRoles = {"C", "C", "C"} + SuperVillain.Dispellable = {["Magic"] = true, ["Disease"] = true} + elseif(toonClass == "WARLOCK") then + RefClassRoles = {"C", "C", "C"} + elseif(toonClass == "WARRIOR") then + RefClassRoles = {"M", "M", "T"} + elseif(toonClass == "HUNTER") then + RefClassRoles = {"M", "M", "M"} + elseif(toonClass == "ROGUE") then + RefClassRoles = {"M", "M", "M"} + elseif(toonClass == "MAGE") then + RefClassRoles = {"C", "C", "C"} + SuperVillain.Dispellable = {["Curse"] = true} + elseif(toonClass == "DEATHKNIGHT") then + RefClassRoles = {"T", "M", "M"} + elseif(toonClass == "DRUID") then + RefMagicSpec = 4 + RefClassRoles = {"C", "M", "T", "C"} + SuperVillain.Dispellable = {["Curse"] = true, ["Poison"] = true} + elseif(toonClass == "SHAMAN") then + RefMagicSpec = 3 + RefClassRoles = {"C", "M", "C"} + SuperVillain.Dispellable = {["Curse"] = true} + elseif(toonClass == "MONK") then + RefMagicSpec = 2 + RefClassRoles = {"T", "C", "M"} + SuperVillain.Dispellable = {["Disease"] = true, ["Poison"] = true} + elseif(toonClass == "PALADIN") then + RefMagicSpec = 1 + RefClassRoles = {"C", "T", "M"} + SuperVillain.Dispellable = {["Poison"] = true, ["Disease"] = true} + end +end local function GetTalentInfo(arg) if type(arg) == "number" then @@ -205,18 +185,11 @@ local function GetTalentInfo(arg) end end -function SuperVillain:DispellAvailable(debuffType) - if not DispellData then return end - if DispellData[debuffType] then - return true - end -end - function SuperVillain:DefinePlayerRole() local spec = GetSpecialization() local role; if spec then - role = RefClassData[self.class]["ROLE"][spec] + role = RefClassRoles[spec] if role == "T" and UnitLevel("player") == MAX_PLAYER_LEVEL then local bonus, pvp = GetCombatRatingBonus(COMBAT_RATING_RESILIENCE_PLAYER_DAMAGE_TAKEN), false; if bonus > GetDodgeChance() and bonus > GetParryChance() then @@ -238,11 +211,11 @@ function SuperVillain:DefinePlayerRole() self.ClassRole = role; self.RoleChangedCallback() end - if RefClassData[self.class]["MagicSpec"] then - if GetTalentInfo(RefClassData[self.class]["MagicSpec"]) then - DispellData.Magic = true - else - DispellData.Magic = false + if RefMagicSpec then + if(GetTalentInfo(RefMagicSpec)) then + self.Dispellable["Magic"] = true + elseif(self.Dispellable["Magic"]) then + self.Dispellable["Magic"] = nil end end end @@ -486,14 +459,14 @@ local Registry_OnEvent = function(self, event, arg, ...) SuperVillain.BGTimer = nil end elseif(event == "SPELLS_CHANGED") then - if (SuperVillain.class ~= "DRUID") then + if (toonClass ~= "DRUID") then self:UnregisterEvent("SPELLS_CHANGED") return end if GetSpellInfo(droodSpell1) == droodSpell2 then - DispellData.Disease = true - else - DispellData.Disease = false + SuperVillain.Dispellable["Disease"] = true + elseif(SuperVillain.Dispellable["Disease"]) then + SuperVillain.Dispellable["Disease"] = nil end elseif(event == "PET_BATTLE_CLOSE") then SuperVillain:PushDisplayAudit() diff --git a/Interface/AddOns/SVUI_ConfigOMatic/modules/units/raid.lua b/Interface/AddOns/SVUI_ConfigOMatic/modules/units/raid.lua index a2fd324..1ba20b1 100644 --- a/Interface/AddOns/SVUI_ConfigOMatic/modules/units/raid.lua +++ b/Interface/AddOns/SVUI_ConfigOMatic/modules/units/raid.lua @@ -36,397 +36,397 @@ local _, ns = ... local subOrder = 11; for w=10,40,15 do subOrder = subOrder + 1 - SuperVillain.Options.args.SVUnit.args['raid' .. w] ={ - name = L['Raid-' .. w .. ' Frames'], - type = 'group', - order = subOrder, - childGroups = "tab", - get = function(l) return SuperVillain.db.SVUnit['raid' .. w][l[#l]] end, - set = function(l, m)MOD:ChangeDBVar(m, l[#l], "raid" .. w);MOD:SetGroupFrame('raid' .. w)end, - args ={ + SuperVillain.Options.args.SVUnit.args["raid" .. w] = { + name = L["Raid-" .. w .. " Frames"], + type = "group", + order = subOrder, + childGroups = "tab", + get = function(l) return SuperVillain.db.SVUnit["raid" .. w][l[#l]] end, + set = function(l, m)MOD:ChangeDBVar(m, l[#l], "raid" .. w);MOD:SetGroupFrame("raid" .. w)end, + args = { enable = { - type = 'toggle', - order = 1, - name = L['Enable'], - }, - configureToggle ={ - order = 2, - type = 'execute', - name = L['Display Frames'], - func = function()MOD:UpdateGroupConfig(_G['SVUI_Raid' .. w], _G['SVUI_Raid' .. w].forceShow ~= true or nil)end, - }, - resetSettings ={ - type = 'execute', - order = 3, - name = L['Restore Defaults'], - func = function(l, m)MOD:ResetUnitOptions('raid' .. w)SuperVillain:ResetMovables('Raid 1-' .. w .. ' Frames')end, - }, - tabGroups={ - order=3, - type='group', - name=L['Unit Options'], - childGroups="tree", - args={ - commonGroup={ - order=1, - type='group', - name=L['General Settings'], - args={ + type = "toggle", + order = 1, + name = L["Enable"], + }, + configureToggle = { + order = 2, + type = "execute", + name = L["Display Frames"], + func = function()MOD:UpdateGroupConfig(_G["SVUI_Raid" .. w], _G["SVUI_Raid" .. w].forceShow ~= true or nil)end, + }, + resetSettings = { + type = "execute", + order = 3, + name = L["Restore Defaults"], + func = function(l, m)MOD:ResetUnitOptions("raid" .. w)SuperVillain:ResetMovables("Raid 1-" .. w .. " Frames")end, + }, + tabGroups = { + order = 3, + type = "group", + name = L["Unit Options"], + childGroups = "tree", + args = { + commonGroup = { + order = 1, + type = "group", + name = L["General Settings"], + args = { hideonnpc = { - type = 'toggle', - order = 2, - name = L['Text Toggle On NPC'], - desc = L['Power text will be hidden on NPC targets, in addition the name text will be repositioned to the power texts anchor point.'], - get = function(l)return SuperVillain.db.SVUnit['raid' .. w]['power'].hideonnpc end, - set = function(l, m)SuperVillain.db.SVUnit['raid' .. w]['power'].hideonnpc = m;MOD:SetGroupFrame('raid' .. w)end, - }, - rangeCheck ={ - order = 3, - name = L["Range Check"], - desc = L["Check if you are in range to cast spells on this specific unit."], - type = "toggle", - }, - predict ={ - order = 4, - name = L['Heal Prediction'], - desc = L['Show a incomming heal prediction bar on the unitframe. Also display a slightly different colored bar for incoming overheals.'], - type = 'toggle', - }, - threatEnabled ={ - type = 'toggle', - order = 5, - name = L['Show Threat'], - }, - colorOverride ={ - order = 6, - name = L['Class Color Override'], - desc = L['Override the default class color setting.'], - type = 'select', + type = "toggle", + order = 2, + name = L["Text Toggle On NPC"], + desc = L["Power text will be hidden on NPC targets, in addition the name text will be repositioned to the power texts anchor point."], + get = function(l)return SuperVillain.db.SVUnit["raid" .. w]["power"].hideonnpc end, + set = function(l, m)SuperVillain.db.SVUnit["raid" .. w]["power"].hideonnpc = m;MOD:SetGroupFrame("raid" .. w)end, + }, + rangeCheck = { + order = 3, + name = L["Range Check"], + desc = L["Check if you are in range to cast spells on this specific unit."], + type = "toggle", + }, + predict = { + order = 4, + name = L["Heal Prediction"], + desc = L["Show a incomming heal prediction bar on the unitframe. Also display a slightly different colored bar for incoming overheals."], + type = "toggle", + }, + threatEnabled = { + type = "toggle", + order = 5, + name = L["Show Threat"], + }, + colorOverride = { + order = 6, + name = L["Class Color Override"], + desc = L["Override the default class color setting."], + type = "select", values = { - ['USE_DEFAULT'] = L['Use Default'], - ['FORCE_ON'] = L['Force On'], - ['FORCE_OFF'] = L['Force Off'], - }, - }, - positionsGroup ={ - order = 100, - name = L['Size and Positions'], - type = 'group', - guiInline = true, - set = function(l, m)MOD:ChangeDBVar(m, l[#l], "raid" .. w);MOD:SetGroupFrame('raid' .. w, nil, nil, true)end, + ["USE_DEFAULT"] = L["Use Default"], + ["FORCE_ON"] = L["Force On"], + ["FORCE_OFF"] = L["Force Off"], + }, + }, + positionsGroup = { + order = 100, + name = L["Size and Positions"], + type = "group", + guiInline = true, + set = function(l, m)MOD:ChangeDBVar(m, l[#l], "raid" .. w);MOD:SetGroupFrame("raid" .. w, nil, nil, true)end, args = { gridMode = { - order = 1, - name = L["Enable Grid mode"], - type = 'toggle', + order = 1, + name = L["Enable Grid mode"], + type = "toggle", set = function(l, m) MOD:ChangeDBVar(m, l[#l], "raid" .. w); - MOD:SetGroupFrame('raid' .. w) + MOD:SetGroupFrame("raid" .. w) MOD:ChangeDBVar(m, l[#l], "raidpet"); - MOD:SetGroupFrame('raidpet') + MOD:SetGroupFrame("raidpet") MOD:ChangeDBVar(m, l[#l], "tank"); - MOD:SetGroupFrame('tank') + MOD:SetGroupFrame("tank") MOD:ChangeDBVar(m, l[#l], "assist"); - MOD:SetGroupFrame('assist') - end, - }, + MOD:SetGroupFrame("assist") + end, + }, width = { - order = 2, - name = L['Width'], - type = 'range', - min = 10, - max = 500, - step = 1, - set = function(l, m)MOD:ChangeDBVar(m, l[#l], "raid" .. w);MOD:SetGroupFrame('raid' .. w)end, - }, + order = 2, + name = L["Width"], + type = "range", + min = 10, + max = 500, + step = 1, + set = function(l, m)MOD:ChangeDBVar(m, l[#l], "raid" .. w);MOD:SetGroupFrame("raid" .. w)end, + }, height = { - order = 3, - name = L['Height'], - type = 'range', - min = 10, - max = 500, - step = 1, - set = function(l, m)MOD:ChangeDBVar(m, l[#l], "raid" .. w);MOD:SetGroupFrame('raid' .. w)end, - }, + order = 3, + name = L["Height"], + type = "range", + min = 10, + max = 500, + step = 1, + set = function(l, m)MOD:ChangeDBVar(m, l[#l], "raid" .. w);MOD:SetGroupFrame("raid" .. w)end, + }, spacer = { - order = 4, - name = '', - type = 'description', - width = 'full', - }, + order = 4, + name = "", + type = "description", + width = "full", + }, showBy = { - order = 5, - name = L['Growth Direction'], - desc = L['Growth direction from the first unitframe.'], - type = 'select', + order = 5, + name = L["Growth Direction"], + desc = L["Growth direction from the first unitframe."], + type = "select", values = { - DOWN_RIGHT = format(L['%s and then %s'], L['Down'], L['Right']), - DOWN_LEFT = format(L['%s and then %s'], L['Down'], L['Left']), - UP_RIGHT = format(L['%s and then %s'], L['Up'], L['Right']), - UP_LEFT = format(L['%s and then %s'], L['Up'], L['Left']), - RIGHT_DOWN = format(L['%s and then %s'], L['Right'], L['Down']), - RIGHT_UP = format(L['%s and then %s'], L['Right'], L['Up']), - LEFT_DOWN = format(L['%s and then %s'], L['Left'], L['Down']), - LEFT_UP = format(L['%s and then %s'], L['Left'], L['Up']), - }, - }, + DOWN_RIGHT = format(L["%s and then %s"], L["Down"], L["Right"]), + DOWN_LEFT = format(L["%s and then %s"], L["Down"], L["Left"]), + UP_RIGHT = format(L["%s and then %s"], L["Up"], L["Right"]), + UP_LEFT = format(L["%s and then %s"], L["Up"], L["Left"]), + RIGHT_DOWN = format(L["%s and then %s"], L["Right"], L["Down"]), + RIGHT_UP = format(L["%s and then %s"], L["Right"], L["Up"]), + LEFT_DOWN = format(L["%s and then %s"], L["Left"], L["Down"]), + LEFT_UP = format(L["%s and then %s"], L["Left"], L["Up"]), + }, + }, gCount = { - order = 7, - type = 'range', - name = L['Number of Groups'], - min = 1, - max = 8, - step = 1, + order = 7, + type = "range", + name = L["Number of Groups"], + min = 1, + max = 8, + step = 1, set = function(l, m) MOD:ChangeDBVar(m, l[#l], "raid" .. w); - MOD:SetGroupFrame('raid' .. w) - if _G['SVUI_Raid' .. w].isForced then - MOD:UpdateGroupConfig(_G['SVUI_Raid' .. w]) - MOD:UpdateGroupConfig(_G['SVUI_Raid' .. w], true) + MOD:SetGroupFrame("raid" .. w) + if _G["SVUI_Raid" .. w].isForced then + MOD:UpdateGroupConfig(_G["SVUI_Raid" .. w]) + MOD:UpdateGroupConfig(_G["SVUI_Raid" .. w], true) end - end, - }, + end, + }, gRowCol = { - order = 8, - type = 'range', - name = L['Groups Per Row/Column'], - min = 1, - max = 8, - step = 1, + order = 8, + type = "range", + name = L["Groups Per Row / Column"], + min = 1, + max = 8, + step = 1, set = function(l, m) MOD:ChangeDBVar(m, l[#l], "raid" .. w); - MOD:SetGroupFrame('raid' .. w) - if _G['SVUI_Raid' .. w].isForced then - MOD:UpdateGroupConfig(_G['SVUI_Raid' .. w]) - MOD:UpdateGroupConfig(_G['SVUI_Raid' .. w], true) + MOD:SetGroupFrame("raid" .. w) + if _G["SVUI_Raid" .. w].isForced then + MOD:UpdateGroupConfig(_G["SVUI_Raid" .. w]) + MOD:UpdateGroupConfig(_G["SVUI_Raid" .. w], true) end - end, - }, + end, + }, wrapXOffset = { - order = 9, - type = 'range', - name = L['Horizontal Spacing'], - min = 0, - max = 50, - step = 1, - }, + order = 9, + type = "range", + name = L["Horizontal Spacing"], + min = 0, + max = 50, + step = 1, + }, wrapYOffset = { - order = 10, - type = 'range', - name = L['Vertical Spacing'], - min = 0, - max = 50, - step = 1, - }, - }, - }, - visibilityGroup ={ - order = 200, - name = L['Visibility'], - type = 'group', - guiInline = true, - set = function(l, m)MOD:ChangeDBVar(m, l[#l], "raid" .. w);MOD:SetGroupFrame('raid' .. w, nil, nil, true)end, + order = 10, + type = "range", + name = L["Vertical Spacing"], + min = 0, + max = 50, + step = 1, + }, + }, + }, + visibilityGroup = { + order = 200, + name = L["Visibility"], + type = "group", + guiInline = true, + set = function(l, m)MOD:ChangeDBVar(m, l[#l], "raid" .. w);MOD:SetGroupFrame("raid" .. w, nil, nil, true)end, args = { showPlayer = { - order = 1, - type = 'toggle', - name = L['Display Player'], - desc = L['When true, the header includes the player when not in a raid.'], - }, + order = 1, + type = "toggle", + name = L["Display Player"], + desc = L["When true, the header includes the player when not in a raid."], + }, visibility = { - order = 2, - type = 'input', - name = L['Visibility'], - desc = L['The following macro must be true in order for the group to be shown, in addition to any filter that may already be set.'], - width = 'full', - desc = L['TEXT_FORMAT_DESC'], - }, - }, - }, - sortingGroup ={ - order = 300, - type = 'group', - guiInline = true, - name = L['Sorting'], - set = function(l, m)MOD:ChangeDBVar(m, l[#l], "raid" .. w);MOD:SetGroupFrame('raid' .. w, nil, nil, true)end, + order = 2, + type = "input", + name = L["Visibility"], + desc = L["The following macro must be true in order for the group to be shown, in addition to any filter that may already be set."], + width = "full", + desc = L["TEXT_FORMAT_DESC"], + }, + }, + }, + sortingGroup = { + order = 300, + type = "group", + guiInline = true, + name = L["Sorting"], + set = function(l, m)MOD:ChangeDBVar(m, l[#l], "raid" .. w);MOD:SetGroupFrame("raid" .. w, nil, nil, true)end, args = { sortMethod = { - order = 1, - name = L['Group By'], - desc = L['Set the order that the group will sort.'], - type = 'select', + order = 1, + name = L["Group By"], + desc = L["Set the order that the group will sort."], + type = "select", values = { - ['CLASS'] = CLASS, - ['ROLE'] = ROLE.."(Tanks, Healers, DPS)", - ['ROLE_TDH'] = ROLE.."(Tanks, DPS, Healers)", - ['ROLE_HDT'] = ROLE.."(Healers, DPS, Tanks)", - ['ROLE_HTD'] = ROLE.."(Healers, Tanks, DPS)", - ['NAME'] = NAME, - ['MTMA'] = L['Main Tanks / Main Assist'], - ['GROUP'] = GROUP, - }, - }, + ["CLASS"] = CLASS, + ["ROLE"] = ROLE.."(Tanks, Healers, DPS)", + ["ROLE_TDH"] = ROLE.."(Tanks, DPS, Healers)", + ["ROLE_HDT"] = ROLE.."(Healers, DPS, Tanks)", + ["ROLE_HTD"] = ROLE.."(Healers, Tanks, DPS)", + ["NAME"] = NAME, + ["MTMA"] = L["Main Tanks / Main Assist"], + ["GROUP"] = GROUP, + }, + }, sortDir = { - order = 2, - name = L['Sort Direction'], - desc = L['Defines the sort order of the selected sort method.'], - type = 'select', + order = 2, + name = L["Sort Direction"], + desc = L["Defines the sort order of the selected sort method."], + type = "select", values = { - ['ASC'] = L['Ascending'], - ['DESC'] = L['Descending'], - }, - }, + ["ASC"] = L["Ascending"], + ["DESC"] = L["Descending"], + }, + }, spacer = { - order = 3, - type = 'description', - width = 'full', - name = ' ', - }, + order = 3, + type = "description", + width = "full", + name = " ", + }, rSort = { - order = 4, - name = L['Raid-Wide Sorting'], - desc = L['Enabling this allows raid-wide sorting however you will not be able to distinguish between groups.'], - type = 'toggle', - }, + order = 4, + name = L["Raid-Wide Sorting"], + desc = L["Enabling this allows raid-wide sorting however you will not be able to distinguish between groups."], + type = "toggle", + }, invertGroupingOrder = { - order = 5, - name = L['Invert Grouping Order'], - desc = L['Enabling this inverts the grouping order when the raid is not full, this will reverse the direction it starts from.'], - disabled = function()return not SuperVillain.db.SVUnit['raid' .. w].rSort end, - type = 'toggle', - }, + order = 5, + name = L["Invert Grouping Order"], + desc = L["Enabling this inverts the grouping order when the raid is not full, this will reverse the direction it starts from."], + disabled = function()return not SuperVillain.db.SVUnit["raid" .. w].rSort end, + type = "toggle", + }, startFromCenter = { - order = 6, - name = L['Start Near Center'], - desc = L['The initial group will start near the center and grow out.'], - disabled = function()return not SuperVillain.db.SVUnit['raid' .. w].rSort end, - type = 'toggle', - }, - }, + order = 6, + name = L["Start Near Center"], + desc = L["The initial group will start near the center and grow out."], + disabled = function()return not SuperVillain.db.SVUnit["raid" .. w].rSort end, + type = "toggle", + }, + }, } } - }, - misc = ns:SetMiscConfigGroup(true, MOD.SetGroupFrame, 'raid' .. w), - health = ns:SetHealthConfigGroup(true, MOD.SetGroupFrame, 'raid' .. w), - power = ns:SetPowerConfigGroup(false, MOD.SetGroupFrame, 'raid' .. w), - name = ns:SetNameConfigGroup(MOD.SetGroupFrame, 'raid' .. w), - buffs = ns:SetAuraConfigGroup(true, 'buffs', true, MOD.SetGroupFrame, 'raid' .. w), - debuffs = ns:SetAuraConfigGroup(true, 'debuffs', true, MOD.SetGroupFrame, 'raid' .. w), - buffIndicator ={ - order = 600, - type = 'group', - name = L['Buff Indicator'], + }, + misc = ns:SetMiscConfigGroup(true, MOD.SetGroupFrame, "raid" .. w), + health = ns:SetHealthConfigGroup(true, MOD.SetGroupFrame, "raid" .. w), + power = ns:SetPowerConfigGroup(false, MOD.SetGroupFrame, "raid" .. w), + name = ns:SetNameConfigGroup(MOD.SetGroupFrame, "raid" .. w), + buffs = ns:SetAuraConfigGroup(true, "buffs", true, MOD.SetGroupFrame, "raid" .. w), + debuffs = ns:SetAuraConfigGroup(true, "debuffs", true, MOD.SetGroupFrame, "raid" .. w), + buffIndicator = { + order = 600, + type = "group", + name = L["Buff Indicator"], get = function(l)return - SuperVillain.db.SVUnit['raid' .. w]['buffIndicator'][l[#l]]end, - set = function(l, m)MOD:ChangeDBVar(m, l[#l], "raid" .. w, "buffIndicator");MOD:SetGroupFrame('raid' .. w)end, + SuperVillain.db.SVUnit["raid" .. w]["buffIndicator"][l[#l]]end, + set = function(l, m)MOD:ChangeDBVar(m, l[#l], "raid" .. w, "buffIndicator");MOD:SetGroupFrame("raid" .. w)end, - args ={ - enable ={ - type = 'toggle', - name = L['Enable'], - order = 1, - }, - size ={ - type = 'range', - name = L['Size'], - desc = L['Size of the indicator icon.'], - order = 2, - min = 4, - max = 15, - step = 1, - }, - configureButton ={ - type = 'execute', - name = L['Configure Auras'], - func = function()SuperVillain:SetToFilterConfig('Buff Indicator')end, - order = 3, - }, + args = { + enable = { + type = "toggle", + name = L["Enable"], + order = 1, + }, + size = { + type = "range", + name = L["Size"], + desc = L["Size of the indicator icon."], + order = 2, + min = 4, + max = 15, + step = 1, + }, + configureButton = { + type = "execute", + name = L["Configure Auras"], + func = function()SuperVillain:SetToFilterConfig("Buff Indicator")end, + order = 3, + }, - }, - }, - rdebuffs ={ - order = 800, - type = 'group', - name = L['RaidDebuff Indicator'], + }, + }, + rdebuffs = { + order = 800, + type = "group", + name = L["RaidDebuff Indicator"], get = function(l)return - SuperVillain.db.SVUnit['raid' .. w]['rdebuffs'][l[#l]]end, - set = function(l, m)MOD:ChangeDBVar(m, l[#l], "raid" .. w, "rdebuffs");MOD:SetGroupFrame('raid' .. w)end, - args ={ - enable ={ - type = 'toggle', - name = L['Enable'], - order = 1, - }, - size ={ - type = 'range', - name = L['Size'], - order = 2, - min = 8, - max = 35, - step = 1, - }, - fontSize ={ - type = 'range', - name = L['Font Size'], - order = 3, - min = 7, - max = 22, - step = 1, - }, - xOffset ={ - order = 4, - type = 'range', - name = L['xOffset'], - min = - 300, - max = 300, - step = 1, - }, - yOffset ={ - order = 5, - type = 'range', - name = L['yOffset'], - min = - 300, - max = 300, - step = 1, - }, - configureButton ={ - type = 'execute', - name = L['Configure Auras'], - func = function()SuperVillain:SetToFilterConfig('Raid')end, - order = 7, - }, - }, - }, - icons = ns:SetIconConfigGroup(MOD.SetGroupFrame, 'raid' .. w), - }, - }, - }, + SuperVillain.db.SVUnit["raid" .. w]["rdebuffs"][l[#l]]end, + set = function(l, m)MOD:ChangeDBVar(m, l[#l], "raid" .. w, "rdebuffs");MOD:SetGroupFrame("raid" .. w)end, + args = { + enable = { + type = "toggle", + name = L["Enable"], + order = 1, + }, + size = { + type = "range", + name = L["Size"], + order = 2, + min = 8, + max = 35, + step = 1, + }, + fontSize = { + type = "range", + name = L["Font Size"], + order = 3, + min = 7, + max = 22, + step = 1, + }, + xOffset = { + order = 4, + type = "range", + name = L["xOffset"], + min = - 300, + max = 300, + step = 1, + }, + yOffset = { + order = 5, + type = "range", + name = L["yOffset"], + min = - 300, + max = 300, + step = 1, + }, + configureButton = { + type = "execute", + name = L["Configure Auras"], + func = function()SuperVillain:SetToFilterConfig("Raid")end, + order = 7, + }, + }, + }, + icons = ns:SetIconConfigGroup(MOD.SetGroupFrame, "raid" .. w), + }, + }, + }, } end