From 1010d59bd3c2ba600ae63936033cff419a3c0976 Mon Sep 17 00:00:00 2001 From: Sumsebrum Date: Wed, 22 Sep 2021 17:12:10 +0200 Subject: [PATCH 01/65] pixel perfect option added --- Frame.lua | 1 + Gladdy.lua | 26 ++++++++++++++++++++++++++ Options.lua | 18 +++++++++++++----- 3 files changed, 40 insertions(+), 5 deletions(-) diff --git a/Frame.lua b/Frame.lua index 5ed139a..f1f5bc4 100644 --- a/Frame.lua +++ b/Frame.lua @@ -190,6 +190,7 @@ function Gladdy:UpdateFrame() end self.frame:SetScale(self.db.frameScale) + self:PixelPerfectScale(false) self.frame:SetWidth(width) self.frame:SetHeight(height) self.frame:ClearAllPoints() diff --git a/Gladdy.lua b/Gladdy.lua index 6923c67..428005a 100644 --- a/Gladdy.lua +++ b/Gladdy.lua @@ -5,6 +5,7 @@ local select = select local pairs = pairs local tinsert = table.insert local tsort = table.sort +local str_lower = string.lower local GetTime = GetTime local CreateFrame = CreateFrame local DEFAULT_CHAT_FRAME = DEFAULT_CHAT_FRAME @@ -66,10 +67,20 @@ end Gladdy.events = CreateFrame("Frame") Gladdy.events.registered = {} Gladdy.events:RegisterEvent("PLAYER_LOGIN") +Gladdy.events:RegisterEvent("CVAR_UPDATE") +hooksecurefunc("VideoOptionsFrameOkay_OnClick", function(self, button, down, apply) + if (self:GetName() == "VideoOptionsFrameApply") then + Gladdy:PixelPerfectScale(true) + end +end) Gladdy.events:SetScript("OnEvent", function(self, event, ...) if (event == "PLAYER_LOGIN") then Gladdy:OnInitialize() Gladdy:OnEnable() + elseif (event == "CVAR_UPDATE") then + if (str_lower(select(1, ...)) == "uiscale") then + Gladdy:PixelPerfectScale(true) + end else local func = self.registered[event] @@ -186,6 +197,21 @@ function Gladdy:DeleteUnknownOptions(tbl, refTbl, str) end end +function Gladdy:PixelPerfectScale(update) + local physicalWidth, physicalHeight = GetPhysicalScreenSize() + local perfectUIScale = 768/physicalHeight--768/select(2, strsplit("x",({ GetScreenResolutions()})[GetCurrentResolution()])) + if self.db and self.db.pixelPerfect and self.frame then + self.frame:SetIgnoreParentScale(true) + self.frame:SetScale(perfectUIScale) + --self.db.frameScale = perfectUIScale --(GetCVar("useUiScale") == "1" and 1 + perfectUIScale - GetCVar("UIScale") or perfectUIScale) + if update then + self:UpdateFrame() + end + elseif self.frame then + self.frame:SetIgnoreParentScale(false) + end +end + function Gladdy:OnInitialize() self.dbi = LibStub("AceDB-3.0"):New("GladdyXZ", self.defaults) self.dbi.RegisterCallback(self, "OnProfileChanged", "OnProfileChanged") diff --git a/Options.lua b/Options.lua index e0c7f37..4eec88a 100644 --- a/Options.lua +++ b/Options.lua @@ -50,6 +50,7 @@ Gladdy.defaults = { growUp = false, growDirection = "BOTTOM", frameScale = 1, + pixelPerfect = false, padding = 1, barWidth = 180, bottomMargin = 2, @@ -298,11 +299,18 @@ function Gladdy:SetupOptions() name = L["Frame General"], order = 3, }, + pixelPerfect = { + type = "toggle", + name = L["Pixel Perfect Scale"], + desc = L["Enables Pixel Perfect Scale - disables manual "].. L["Frame scale"], + order = 4, + }, frameScale = { type = "range", name = L["Frame scale"], desc = L["Scale of the frame"], - order = 4, + disabled = function() return Gladdy.db.pixelPerfect end, + order = 5, min = .1, max = 2, step = .01, @@ -311,7 +319,7 @@ function Gladdy:SetupOptions() type = "range", name = L["Frame padding"], desc = L["Padding of the frame"], - order = 5, + order = 6, min = 0, max = 20, step = 1, @@ -320,7 +328,7 @@ function Gladdy:SetupOptions() type = "range", name = L["Frame width"], desc = L["Width of the bars"], - order = 6, + order = 7, min = 10, max = 500, step = 5, @@ -329,7 +337,7 @@ function Gladdy:SetupOptions() type = "range", name = L["Margin"], desc = L["Margin between each button"], - order = 7, + order = 8, min = -200, max = 200, step = 1, @@ -338,7 +346,7 @@ function Gladdy:SetupOptions() type = "color", name = L["Background color"], desc = L["Background Color of the frame"], - order = 8, + order = 9, hasAlpha = true, get = getColorOpt, set = setColorOpt, From 3f28947b05555066835ec49e5b8432c98deef259 Mon Sep 17 00:00:00 2001 From: Sumsebrum Date: Fri, 24 Sep 2021 15:51:24 +0200 Subject: [PATCH 02/65] move modules with mouse --- Gladdy.lua | 51 +++++++++++++++++++++++++++++++++++++ Modules/BuffsDebuffs.lua | 9 +++++++ Modules/Castbar.lua | 5 ++++ Modules/CombatIndicator.lua | 4 +++ Modules/Cooldowns.lua | 4 +++ Modules/Diminishings.lua | 5 ++++ Modules/Pets.lua | 4 +++ 7 files changed, 82 insertions(+) diff --git a/Gladdy.lua b/Gladdy.lua index 428005a..7cdf5a0 100644 --- a/Gladdy.lua +++ b/Gladdy.lua @@ -6,6 +6,7 @@ local pairs = pairs local tinsert = table.insert local tsort = table.sort local str_lower = string.lower +local math_abs = math.abs local GetTime = GetTime local CreateFrame = CreateFrame local DEFAULT_CHAT_FRAME = DEFAULT_CHAT_FRAME @@ -172,6 +173,56 @@ function Gladdy:NewModule(name, priority, defaults) return module end +function Gladdy:CreateMover(frame, x, y, name, points) + if not frame.mover then + frame.mover = CreateFrame("Frame", nil, frame, BackdropTemplateMixin and "BackdropTemplate") + frame.mover:SetFrameStrata("TOOLTIP") + frame.mover:SetPoint(points[1], frame, points[2], 0, 0) + local backdrop = { + bgFile = "Interface/Tooltips/UI-Tooltip-Background", + edgeFile = "", + tile = true, tileSize = 16, edgeSize = 10, + insets = {left = 0, right = 0, top = 0, bottom = 0} + } + + frame.mover:SetBackdrop(backdrop) + frame.mover:SetBackdropColor(0,0,0,0.8) + frame.mover:SetHeight(15) + frame.mover:SetWidth(60) + frame.mover.text = frame.mover:CreateFontString(nil, "ARTWORK", "GameFontHighlightSmall") + frame.mover.text:SetText(name) + frame.mover.text:SetPoint("CENTER") + + frame.mover:SetMovable(true) + frame.mover:EnableMouse(true) + + frame.mover:SetScript("OnMouseDown", function(self) + self.point = { frame:GetPoint() } + self.start = { frame:GetCenter() } + frame:StartMoving() + self:StartMoving() + end) + frame.mover:SetScript("OnMouseUp", function(self) + frame:StopMovingOrSizing() + self:StopMovingOrSizing() + self.stop = { frame:GetCenter() } + local diffX = math_abs(self.start[1] - self.stop[1]) + diffX = self.start[1] > self.stop[1] and -diffX or diffX + local diffY = math_abs(self.start[2] - self.stop[2]) + diffY = self.start[2] > self.stop[2] and -diffY or diffY + frame:ClearAllPoints() + frame:SetPoint(self.point[1], self.point[2], self.point[3], self.point[4] + diffX, self.point[5] + diffY) + Gladdy.db[x] = self.point[4] + diffX + Gladdy.db[y] = self.point[5] + diffY + Gladdy:UpdateFrame() + end) + else + frame.mover:ClearAllPoints() + frame.mover:SetPoint(points[1], frame, points[2], 0, 0) + end + +end + --------------------------- -- INIT diff --git a/Modules/BuffsDebuffs.lua b/Modules/BuffsDebuffs.lua index 0a4faeb..966e459 100644 --- a/Modules/BuffsDebuffs.lua +++ b/Modules/BuffsDebuffs.lua @@ -235,11 +235,13 @@ end function BuffsDebuffs:CreateFrame(unit) local verticalMargin = (Gladdy.db.highlightInset and 0 or Gladdy.db.highlightBorderSize) + Gladdy.db.padding local debuffFrame = CreateFrame("Frame", "GladdyDebuffs" .. unit, Gladdy.buttons[unit]) + debuffFrame:SetMovable(true) debuffFrame:SetHeight(Gladdy.db.buffsIconSize) debuffFrame:SetWidth(1) debuffFrame:SetPoint("BOTTOMLEFT", Gladdy.buttons[unit].healthBar, "TOPLEFT", 0, verticalMargin) debuffFrame.unit = unit local buffFrame = CreateFrame("Frame", "GladdyBuffs" .. unit, Gladdy.buttons[unit]) + buffFrame:SetMovable(true) buffFrame:SetHeight(Gladdy.db.buffsIconSize) buffFrame:SetWidth(1) buffFrame:SetPoint("BOTTOMLEFT", Gladdy.buttons[unit].healthBar, "TOPLEFT", 0, verticalMargin) @@ -328,6 +330,9 @@ function BuffsDebuffs:UpdateFrame(unit) self.frames[unit].debuffFrame:SetPoint("LEFT", anchor, "RIGHT", horizontalMargin + Gladdy.db.buffsXOffset, Gladdy.db.buffsYOffset) end end + if (unit == "arena1") then + Gladdy:CreateMover(self.frames[unit].debuffFrame, "buffsXOffset", "buffsYOffset", L["Debuffs"], {"BOTTOMLEFT", "TOPLEFT"}) + end --BUFFS self.frames[unit].buffFrame:SetHeight(Gladdy.db.buffsBuffsIconSize) @@ -422,6 +427,10 @@ function BuffsDebuffs:UpdateFrame(unit) self.frames[unit].buffFrame:SetPoint("LEFT", anchor, "RIGHT", Gladdy.db.padding + Gladdy.db.buffsBuffsXOffset, Gladdy.db.buffsBuffsYOffset) end end + if (unit == "arena1") then + Gladdy:CreateMover(self.frames[unit].buffFrame, "buffsBuffsXOffset", "buffsBuffsYOffset", L["Buffs"], {"BOTTOMLEFT", "TOPLEFT"}) + end + for i=1, #self.frames[unit].auras[AURA_TYPE_BUFF] do styleIcon(self.frames[unit].auras[AURA_TYPE_BUFF][i], AURA_TYPE_BUFF) end diff --git a/Modules/Castbar.lua b/Modules/Castbar.lua index 17d62e7..b0a07b3 100644 --- a/Modules/Castbar.lua +++ b/Modules/Castbar.lua @@ -59,6 +59,7 @@ end function Castbar:CreateFrame(unit) local castBar = CreateFrame("Frame", nil, Gladdy.buttons[unit], BackdropTemplateMixin and "BackdropTemplate") castBar:EnableMouse(false) + castBar:SetMovable(true) castBar.unit = unit castBar:SetBackdrop({ edgeFile = Gladdy:SMFetch("border", "castBarBorderStyle"), @@ -191,6 +192,10 @@ function Castbar:UpdateFrame(unit) castBar.icon.texture.overlay:SetTexture(Gladdy.db.castBarIconStyle) castBar.icon.texture.overlay:SetVertexColor(Gladdy.db.castBarIconColor.r, Gladdy.db.castBarIconColor.g, Gladdy.db.castBarIconColor.b, Gladdy.db.castBarIconColor.a) + + if (unit == "arena1") then + Gladdy:CreateMover(castBar, "castBarXOffset", "castBarYOffset", L["Cast Bar"], {"BOTTOMLEFT", "TOPLEFT"}) + end end --------------------------- diff --git a/Modules/CombatIndicator.lua b/Modules/CombatIndicator.lua index 54a8b76..572e0b1 100644 --- a/Modules/CombatIndicator.lua +++ b/Modules/CombatIndicator.lua @@ -38,6 +38,7 @@ function CombatIndicator:CreateFrame(unit) end local ciFrame = CreateFrame("Frame", "GladdyCombatindicator" .. unit, button) ciFrame:EnableMouse(false) + ciFrame:SetMovable(true) ciFrame:SetFrameStrata("HIGH") ciFrame:SetHeight(Gladdy.db.ciSize) ciFrame:SetWidth(Gladdy.db.ciSize * Gladdy.db.ciWidthFactor) @@ -77,6 +78,9 @@ function CombatIndicator:UpdateFrame(unit) else ciFrame:Show() end + if (unit == "arena1") then + Gladdy:CreateMover(ciFrame, "ciXOffset", "ciYOffset", L["Combat Indicator"], {"BOTTOMLEFT", "TOPLEFT"}) + end end function CombatIndicator:Test() diff --git a/Modules/Cooldowns.lua b/Modules/Cooldowns.lua index c2ed7b9..90bb6a4 100644 --- a/Modules/Cooldowns.lua +++ b/Modules/Cooldowns.lua @@ -94,6 +94,7 @@ function Cooldowns:CreateFrame(unit) -- Cooldown frame local spellCooldownFrame = CreateFrame("Frame", nil, button) spellCooldownFrame:EnableMouse(false) + spellCooldownFrame:SetMovable(true) for x = 1, 14 do local icon = CreateFrame("Frame", nil, spellCooldownFrame) icon:EnableMouse(false) @@ -166,6 +167,9 @@ function Cooldowns:UpdateFrame(unit) button.spellCooldownFrame:SetHeight(Gladdy.db.cooldownSize) button.spellCooldownFrame:SetWidth(1) button.spellCooldownFrame:Show() + if (unit == "arena1") then + Gladdy:CreateMover(button.spellCooldownFrame, "cooldownXOffset", "cooldownYOffset", L["Cooldown"], {"BOTTOMLEFT", "TOPLEFT"}) + end -- Update each cooldown icon local o = 1 for j = 1, 14 do diff --git a/Modules/Diminishings.lua b/Modules/Diminishings.lua index e999943..f11f872 100644 --- a/Modules/Diminishings.lua +++ b/Modules/Diminishings.lua @@ -67,6 +67,7 @@ end function Diminishings:CreateFrame(unit) local drFrame = CreateFrame("Frame", nil, Gladdy.buttons[unit]) drFrame:EnableMouse(false) + drFrame:SetMovable(true) for i = 1, 16 do local icon = CreateFrame("Frame", "GladdyDr" .. unit .. "Icon" .. i, drFrame) @@ -177,6 +178,10 @@ function Diminishings:UpdateFrame(unit) drFrame:SetWidth(Gladdy.db.drIconSize * 16) drFrame:SetHeight(Gladdy.db.drIconSize) + if (unit == "arena1") then + Gladdy:CreateMover(drFrame, "drXOffset", "drYOffset", L["Diminishings"], + Gladdy.db.drCooldownPos == "RIGHT" and {"BOTTOMLEFT", "TOPLEFT"} or {"BOTTOMRIGHT", "TOPRIGHT"}) + end for i = 1, 16 do local icon = drFrame["icon" .. i] diff --git a/Modules/Pets.lua b/Modules/Pets.lua index 994a8b5..780febf 100644 --- a/Modules/Pets.lua +++ b/Modules/Pets.lua @@ -134,6 +134,7 @@ function Pets:CreateFrame(unitId) return end local button = CreateFrame("Frame", "GladdyButtonFramePet" .. unit, Gladdy.frame) + button:SetMovable(true) --button:SetAlpha(0) button:SetPoint("LEFT", Gladdy.buttons[unitId].healthBar, "RIGHT", Gladdy.db.petXOffset, Gladdy.db.petYOffset) @@ -289,6 +290,9 @@ function Pets:UpdateFrame(unitId) end healthBar.nameText:SetTextColor(Gladdy.db.petHealthBarFontColor.r, Gladdy.db.petHealthBarFontColor.g, Gladdy.db.petHealthBarFontColor.b, Gladdy.db.petHealthBarFontColor.a) healthBar.healthText:SetTextColor(Gladdy.db.petHealthBarFontColor.r, Gladdy.db.petHealthBarFontColor.g, Gladdy.db.petHealthBarFontColor.b, Gladdy.db.petHealthBarFontColor.a) + if (unit == "arenapet1") then + Gladdy:CreateMover(self.frames[unit], "petXOffset", "petYOffset", L["Pets"], {"BOTTOMLEFT", "TOPLEFT"}) + end end function Pets:SetHealthText(healthBar, health, healthMax) From fabd9ae0483f99a73d20da2e3b4345850867c439 Mon Sep 17 00:00:00 2001 From: Sumsebrum Date: Fri, 24 Sep 2021 16:40:36 +0200 Subject: [PATCH 03/65] grouping of pets first step --- Modules/Pets.lua | 37 ++++++++++++++++++++++++++++++++++--- 1 file changed, 34 insertions(+), 3 deletions(-) diff --git a/Modules/Pets.lua b/Modules/Pets.lua index 780febf..4cb8196 100644 --- a/Modules/Pets.lua +++ b/Modules/Pets.lua @@ -23,6 +23,8 @@ local Pets = Gladdy:NewModule("Pets", nil, { petHealthPercentage = true, petXOffset = 1, petYOffset = -62, + petGroup = false, + petMargin = 1, }) function Pets:Initialize() @@ -251,6 +253,18 @@ function Pets:UpdateFrame(unitId) self.frames[unit]:SetWidth(Gladdy.db.petWidth) self.frames[unit]:SetHeight(Gladdy.db.petHeight) self.frames[unit]:SetPoint("LEFT", Gladdy.buttons[unitId].healthBar, "RIGHT", Gladdy.db.petXOffset, Gladdy.db.petYOffset) + if (Gladdy.db.petGroup) then + if (unit == "arenapet1") then + self.frames[unit]:SetPoint("LEFT", Gladdy.buttons[unitId].healthBar, "RIGHT", Gladdy.db.petXOffset, Gladdy.db.petYOffset) + else + local previousPet = "arenapet" .. string_gsub(unit, "arenapet", "") - 1 + self.frames[unit]:ClearAllPoints() + self.frames[unit]:SetPoint("TOPLEFT", self.frames[previousPet], "BOTTOMLEFT", 0, - Gladdy.db.petMargin) + end + else + self.frames[unit]:ClearAllPoints() + self.frames[unit]:SetPoint("LEFT", Gladdy.buttons[unitId].healthBar, "RIGHT", Gladdy.db.petXOffset, Gladdy.db.petYOffset) + end healthBar.portrait:SetHeight(Gladdy.db.petHeight) healthBar.portrait:SetWidth(Gladdy.db.petHeight) @@ -384,11 +398,28 @@ function Pets:GetOptions() step = 1, width = "full", }), + petGroup = option({ + type = "toggle", + name = L["Group Pets"], + order = 5, + }), + petMargin = option({ + type = "range", + name = L["Margin"], + desc = L["Height of the bar"], + order = 6, + disabled = function() + return not Gladdy.db.petGroup + end, + min = 0, + max = 50, + step = .1, + }), petHealthBarTexture = option({ type = "select", name = L["Bar texture"], desc = L["Texture of the bar"], - order = 5, + order = 7, dialogControl = "LSM30_Statusbar", values = AceGUIWidgetLSMlists.statusbar, }), @@ -396,14 +427,14 @@ function Pets:GetOptions() type = "color", name = L["Health color"], desc = L["Color of the status bar"], - order = 6, + order = 8, hasAlpha = true, }), petHealthBarBgColor = Gladdy:colorOption({ type = "color", name = L["Background color"], desc = L["Color of the status bar background"], - order = 7, + order = 9, hasAlpha = true, }), }, From ebb56c41278f2eb1ee14fd4b8236ff658182458f Mon Sep 17 00:00:00 2001 From: Sumsebrum Date: Sat, 25 Sep 2021 14:03:57 +0200 Subject: [PATCH 04/65] testmode only movable frames --- Frame.lua | 2 ++ Gladdy.lua | 46 ++++++++++++++++++++++------------------ Modules/BuffsDebuffs.lua | 10 +++++++-- Modules/Castbar.lua | 2 +- Modules/Cooldowns.lua | 4 +++- Modules/Diminishings.lua | 6 +++++- Modules/Pets.lua | 2 +- 7 files changed, 45 insertions(+), 27 deletions(-) diff --git a/Frame.lua b/Frame.lua index f1f5bc4..128452d 100644 --- a/Frame.lua +++ b/Frame.lua @@ -305,6 +305,7 @@ end function Gladdy:ToggleFrame(i) self:Reset() if (self.frame and self.frame:IsShown() and i == self.curBracket) then + self.frame.testing = nil self:HideFrame() else self.curBracket = i @@ -312,6 +313,7 @@ function Gladdy:ToggleFrame(i) if (not self.frame) then self:CreateFrame() end + self.frame.testing = true for o = 1, self.curBracket do local unit = "arena" .. o diff --git a/Gladdy.lua b/Gladdy.lua index 7cdf5a0..4538015 100644 --- a/Gladdy.lua +++ b/Gladdy.lua @@ -8,10 +8,10 @@ local tsort = table.sort local str_lower = string.lower local math_abs = math.abs local GetTime = GetTime +local InCombatLockdown = InCombatLockdown local CreateFrame = CreateFrame local DEFAULT_CHAT_FRAME = DEFAULT_CHAT_FRAME local IsAddOnLoaded = IsAddOnLoaded -local IsInInstance = IsInInstance local GetBattlefieldStatus = GetBattlefieldStatus local IsActiveBattlefieldArena = IsActiveBattlefieldArena local RELEASE_TYPES = { alpha = "Alpha", beta = "Beta", release = "Release"} @@ -173,23 +173,28 @@ function Gladdy:NewModule(name, priority, defaults) return module end -function Gladdy:CreateMover(frame, x, y, name, points) +function Gladdy:CreateMover(frame, xConfig, yConfig, name, points, width, height, xOffset, yOffset) if not frame.mover then frame.mover = CreateFrame("Frame", nil, frame, BackdropTemplateMixin and "BackdropTemplate") - frame.mover:SetFrameStrata("TOOLTIP") - frame.mover:SetPoint(points[1], frame, points[2], 0, 0) + frame.mover:SetFrameStrata("DIALOG") + frame.mover:SetPoint(points[1], frame, points[2], xOffset or 0, yOffset or 0) + frame.mover:SetHeight(height or frame:GetHeight()) + frame.mover:SetWidth(width or frame:GetWidth()) + local backdrop = { bgFile = "Interface/Tooltips/UI-Tooltip-Background", edgeFile = "", tile = true, tileSize = 16, edgeSize = 10, insets = {left = 0, right = 0, top = 0, bottom = 0} } - frame.mover:SetBackdrop(backdrop) - frame.mover:SetBackdropColor(0,0,0,0.8) - frame.mover:SetHeight(15) - frame.mover:SetWidth(60) - frame.mover.text = frame.mover:CreateFontString(nil, "ARTWORK", "GameFontHighlightSmall") + frame.mover:SetBackdropColor(0,1,0,0.5) + frame.mover.border = CreateFrame("Frame", nil, frame.mover, BackdropTemplateMixin and "BackdropTemplate") + frame.mover.border:SetBackdrop({ edgeFile = Gladdy:SMFetch("border", "highlightBorderStyle"), edgeSize = 2 }) + frame.mover.border:SetAllPoints(frame.mover) + frame.mover.border:SetBackdropBorderColor(0,1,0,1) + + frame.mover.text = frame.mover.border:CreateFontString(nil, "ARTWORK", "GameFontHighlightSmall") frame.mover.text:SetText(name) frame.mover.text:SetPoint("CENTER") @@ -212,15 +217,21 @@ function Gladdy:CreateMover(frame, x, y, name, points) diffY = self.start[2] > self.stop[2] and -diffY or diffY frame:ClearAllPoints() frame:SetPoint(self.point[1], self.point[2], self.point[3], self.point[4] + diffX, self.point[5] + diffY) - Gladdy.db[x] = self.point[4] + diffX - Gladdy.db[y] = self.point[5] + diffY + Gladdy.db[xConfig] = self.point[4] + diffX + Gladdy.db[yConfig] = self.point[5] + diffY Gladdy:UpdateFrame() end) else frame.mover:ClearAllPoints() - frame.mover:SetPoint(points[1], frame, points[2], 0, 0) + frame.mover:SetPoint(points[1], frame, points[2], xOffset or 0, yOffset or 0) + frame.mover:SetHeight(height or frame:GetHeight()) + frame.mover:SetWidth(width or frame:GetWidth()) + end + if self.frame and self.frame.testing then + frame.mover:Show() + else + frame.mover:Hide() end - end --------------------------- @@ -298,7 +309,6 @@ function Gladdy:OnInitialize() self.guids = {} self.curBracket = nil self.curUnit = 1 - self.lastInstance = nil self:SetupOptions() @@ -402,16 +412,10 @@ function Gladdy:PLAYER_ENTERING_WORLD() LibStub("AceConfigDialog-3.0"):Open("Gladdy", nil, LibStub("AceConfigDialog-3.0"):SelectGroup("Gladdy", "XiconProfiles")) self.showConfig = nil end - local instance = select(2, IsInInstance()) - if (instance ~= "arena" and self.frame and self.frame:IsVisible() and not self.frame.testing) then + if (self.frame and self.frame:IsVisible()) then self:Reset() self:HideFrame() end - if (instance == "arena") then - self:Reset() - self:HideFrame() - end - self.lastInstance = instance end function Gladdy:UPDATE_BATTLEFIELD_STATUS(_, index) diff --git a/Modules/BuffsDebuffs.lua b/Modules/BuffsDebuffs.lua index 966e459..0590c9c 100644 --- a/Modules/BuffsDebuffs.lua +++ b/Modules/BuffsDebuffs.lua @@ -331,7 +331,10 @@ function BuffsDebuffs:UpdateFrame(unit) end end if (unit == "arena1") then - Gladdy:CreateMover(self.frames[unit].debuffFrame, "buffsXOffset", "buffsYOffset", L["Debuffs"], {"BOTTOMLEFT", "TOPLEFT"}) + Gladdy:CreateMover(self.frames[unit].debuffFrame, "buffsXOffset", "buffsYOffset", L["Debuffs"], + Gladdy.db.buffsCooldownGrowDirection == "LEFT" and {"TOPRIGHT", "TOPRIGHT"} or {"TOPLEFT", "TOPLEFT"}, + Gladdy.db.buffsIconSize * Gladdy.db.buffsWidthFactor, + Gladdy.db.buffsIconSize, Gladdy.db.buffsCooldownGrowDirection == "LEFT"and -1 or 1, 0) end --BUFFS @@ -428,7 +431,10 @@ function BuffsDebuffs:UpdateFrame(unit) end end if (unit == "arena1") then - Gladdy:CreateMover(self.frames[unit].buffFrame, "buffsBuffsXOffset", "buffsBuffsYOffset", L["Buffs"], {"BOTTOMLEFT", "TOPLEFT"}) + Gladdy:CreateMover(self.frames[unit].buffFrame, "buffsBuffsXOffset", "buffsBuffsYOffset", L["Buffs"], + Gladdy.db.buffsBuffsCooldownGrowDirection == "LEFT" and {"TOPRIGHT", "TOPRIGHT"} or {"TOPLEFT", "TOPLEFT"}, + Gladdy.db.buffsBuffsIconSize * Gladdy.db.buffsBuffsWidthFactor, + Gladdy.db.buffsBuffsIconSize, Gladdy.db.buffsBuffsCooldownGrowDirection == "LEFT"and -1 or 1, 0) end for i=1, #self.frames[unit].auras[AURA_TYPE_BUFF] do diff --git a/Modules/Castbar.lua b/Modules/Castbar.lua index b0a07b3..4717563 100644 --- a/Modules/Castbar.lua +++ b/Modules/Castbar.lua @@ -194,7 +194,7 @@ function Castbar:UpdateFrame(unit) castBar.icon.texture.overlay:SetVertexColor(Gladdy.db.castBarIconColor.r, Gladdy.db.castBarIconColor.g, Gladdy.db.castBarIconColor.b, Gladdy.db.castBarIconColor.a) if (unit == "arena1") then - Gladdy:CreateMover(castBar, "castBarXOffset", "castBarYOffset", L["Cast Bar"], {"BOTTOMLEFT", "TOPLEFT"}) + Gladdy:CreateMover(castBar, "castBarXOffset", "castBarYOffset", L["Cast Bar"], {"TOPLEFT", "TOPLEFT"}, Gladdy.db.castBarWidth, Gladdy.db.castBarHeight, 0, 0) end end diff --git a/Modules/Cooldowns.lua b/Modules/Cooldowns.lua index 90bb6a4..1ab006d 100644 --- a/Modules/Cooldowns.lua +++ b/Modules/Cooldowns.lua @@ -168,7 +168,9 @@ function Cooldowns:UpdateFrame(unit) button.spellCooldownFrame:SetWidth(1) button.spellCooldownFrame:Show() if (unit == "arena1") then - Gladdy:CreateMover(button.spellCooldownFrame, "cooldownXOffset", "cooldownYOffset", L["Cooldown"], {"BOTTOMLEFT", "TOPLEFT"}) + Gladdy:CreateMover(button.spellCooldownFrame, "cooldownXOffset", "cooldownYOffset", L["Cooldown"], + Gladdy.db.cooldownXPos == "RIGHT" and {"TOPRIGHT", "TOPRIGHT"} or {"TOPLEFT", "TOPLEFT"}, + Gladdy.db.cooldownSize * Gladdy.db.cooldownWidthFactor, Gladdy.db.cooldownSize) end -- Update each cooldown icon local o = 1 diff --git a/Modules/Diminishings.lua b/Modules/Diminishings.lua index f11f872..3d46253 100644 --- a/Modules/Diminishings.lua +++ b/Modules/Diminishings.lua @@ -180,7 +180,11 @@ function Diminishings:UpdateFrame(unit) drFrame:SetHeight(Gladdy.db.drIconSize) if (unit == "arena1") then Gladdy:CreateMover(drFrame, "drXOffset", "drYOffset", L["Diminishings"], - Gladdy.db.drCooldownPos == "RIGHT" and {"BOTTOMLEFT", "TOPLEFT"} or {"BOTTOMRIGHT", "TOPRIGHT"}) + Gladdy.db.drCooldownPos == "RIGHT" and {"TOPLEFT", "TOPLEFT"} or {"TOPRIGHT", "TOPRIGHT"}, --point + Gladdy.db.drIconSize * Gladdy.db.drWidthFactor, -- width + Gladdy.db.drIconSize, + 0, --xoffset + 0) --yoffset end for i = 1, 16 do diff --git a/Modules/Pets.lua b/Modules/Pets.lua index 4cb8196..9039ce8 100644 --- a/Modules/Pets.lua +++ b/Modules/Pets.lua @@ -305,7 +305,7 @@ function Pets:UpdateFrame(unitId) healthBar.nameText:SetTextColor(Gladdy.db.petHealthBarFontColor.r, Gladdy.db.petHealthBarFontColor.g, Gladdy.db.petHealthBarFontColor.b, Gladdy.db.petHealthBarFontColor.a) healthBar.healthText:SetTextColor(Gladdy.db.petHealthBarFontColor.r, Gladdy.db.petHealthBarFontColor.g, Gladdy.db.petHealthBarFontColor.b, Gladdy.db.petHealthBarFontColor.a) if (unit == "arenapet1") then - Gladdy:CreateMover(self.frames[unit], "petXOffset", "petYOffset", L["Pets"], {"BOTTOMLEFT", "TOPLEFT"}) + Gladdy:CreateMover(self.frames[unit], "petXOffset", "petYOffset", L["Pets"], {"TOPLEFT", "TOPLEFT"}) end end From 09a47e81f1e65b3dda16e8f4051433ffc96f442c Mon Sep 17 00:00:00 2001 From: Sumsebrum Date: Sun, 26 Sep 2021 14:06:50 +0200 Subject: [PATCH 05/65] CI movable frames --- Gladdy.lua | 2 ++ Modules/CombatIndicator.lua | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/Gladdy.lua b/Gladdy.lua index 4538015..2b0b28c 100644 --- a/Gladdy.lua +++ b/Gladdy.lua @@ -17,6 +17,7 @@ local IsActiveBattlefieldArena = IsActiveBattlefieldArena local RELEASE_TYPES = { alpha = "Alpha", beta = "Beta", release = "Release"} local PREFIX = "TBC-Classic_v" local VERSION_REGEX = PREFIX .. "(%d+%.%d+)%-(%a)" +local LibStub = LibStub --------------------------- @@ -219,6 +220,7 @@ function Gladdy:CreateMover(frame, xConfig, yConfig, name, points, width, height frame:SetPoint(self.point[1], self.point[2], self.point[3], self.point[4] + diffX, self.point[5] + diffY) Gladdy.db[xConfig] = self.point[4] + diffX Gladdy.db[yConfig] = self.point[5] + diffY + LibStub("AceConfigRegistry-3.0"):NotifyChange("Gladdy") Gladdy:UpdateFrame() end) else diff --git a/Modules/CombatIndicator.lua b/Modules/CombatIndicator.lua index 572e0b1..91447ad 100644 --- a/Modules/CombatIndicator.lua +++ b/Modules/CombatIndicator.lua @@ -79,7 +79,7 @@ function CombatIndicator:UpdateFrame(unit) ciFrame:Show() end if (unit == "arena1") then - Gladdy:CreateMover(ciFrame, "ciXOffset", "ciYOffset", L["Combat Indicator"], {"BOTTOMLEFT", "TOPLEFT"}) + Gladdy:CreateMover(ciFrame, "ciXOffset", "ciYOffset", L["Combat Indicator"], {"TOPLEFT", "TOPLEFT"}) end end From 69c1eca49b9e3a5efb89c0a5682a5d5e412baf29 Mon Sep 17 00:00:00 2001 From: Sumsebrum Date: Mon, 27 Sep 2021 13:38:40 +0200 Subject: [PATCH 06/65] add contributors --- README.md | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/README.md b/README.md index 7408ec7..b427e3d 100644 --- a/README.md +++ b/README.md @@ -49,6 +49,15 @@ The goal is to make Gladdy highly configurable in it's appearance. Everything ca +## Contributors + +- [ManneN1](https://github.com/ManneN1) +- [AlexFolland](https://github.com/AlexFolland) +- [dfherr](https://github.com/dfherr) +- [miraage](https://github.com/miraage) + +Thank you! + ## Special Thanks - **miraage** - the origininal author of Gladdy! Your work set the foundation for this edit. Thanks! From 41f74f589603c84c93bcf4038eae203905907b2c Mon Sep 17 00:00:00 2001 From: Sumsebrum Date: Mon, 27 Sep 2021 13:40:02 +0200 Subject: [PATCH 07/65] DR Level Icon Text by ManneN1 --- Modules/Diminishings.lua | 71 +++++++++++++++++++++++++++++++++++++++- 1 file changed, 70 insertions(+), 1 deletion(-) diff --git a/Modules/Diminishings.lua b/Modules/Diminishings.lua index 3d46253..2a2c1d2 100644 --- a/Modules/Diminishings.lua +++ b/Modules/Diminishings.lua @@ -44,6 +44,9 @@ local Diminishings = Gladdy:NewModule("Diminishings", nil, { drHalfColor = {r = 1, g = 1, b = 0, a = 1 }, drQuarterColor = {r = 1, g = 0.7, b = 0, a = 1 }, drNullColor = {r = 1, g = 0, b = 0, a = 1 }, + drLevelTextEnabled = false, + drLevelTextFont = "DorisPP", + drLevelTextFontScale = 1, drWidthFactor = 1, drCategories = defaultCategories(), drDuration = 18 @@ -59,6 +62,16 @@ local function getDiminishColor(dr) end end +local function getDiminishText(dr) + if dr == 0.5 then + return "½" + elseif dr == 0.25 then + return "¼" + else + return "ø" + end +end + function Diminishings:Initialize() self.frames = {} self:RegisterMessage("UNIT_DEATH", "ResetUnit", "AURA_FADE", "UNIT_DESTROYED") @@ -133,6 +146,15 @@ function Diminishings:CreateFrame(unit) icon.timeText:SetJustifyH("CENTER") icon.timeText:SetPoint("CENTER", icon, "CENTER", 0, 1) + icon.drLevelText = icon.cooldownFrame:CreateFontString(nil, "OVERLAY") + icon.drLevelText:SetDrawLayer("OVERLAY") + icon.drLevelText:SetFont(Gladdy:SMFetch("font", "drLevelTextFont"), 10, "OUTLINE") + icon.drLevelText:SetTextColor(getDiminishColor(1)) + icon.drLevelText:SetShadowOffset(1, -1) + icon.drLevelText:SetShadowColor(0, 0, 0, 1) + icon.drLevelText:SetJustifyH("CENTER") + icon.drLevelText:SetPoint("BOTTOM", icon, "BOTTOM", 0, 0) + icon.diminishing = 1 drFrame["icon" .. i] = icon @@ -198,6 +220,9 @@ function Diminishings:UpdateFrame(unit) icon.timeText:SetFont(Gladdy:SMFetch("font", "drFont"), (Gladdy.db.drIconSize/2 - 1) * Gladdy.db.drFontScale, "OUTLINE") icon.timeText:SetTextColor(Gladdy.db.drFontColor.r, Gladdy.db.drFontColor.g, Gladdy.db.drFontColor.b, Gladdy.db.drFontColor.a) + icon.drLevelText:SetFont(Gladdy:SMFetch("font", "drLevelTextFont"), (Gladdy.db.drIconSize/2 - 1) * Gladdy.db.drLevelTextFontScale, "OUTLINE") + icon.drLevelText:SetTextColor(getDiminishColor(icon.diminishing)) + icon.cooldown:SetWidth(icon:GetWidth() - icon:GetWidth()/16) icon.cooldown:SetHeight(icon:GetHeight() - icon:GetHeight()/16) icon.cooldown:ClearAllPoints() @@ -214,6 +239,13 @@ function Diminishings:UpdateFrame(unit) icon.border:SetVertexColor(Gladdy.db.drBorderColor.r, Gladdy.db.drBorderColor.g, Gladdy.db.drBorderColor.b, Gladdy.db.drBorderColor.a) end + if Gladdy.db.drLevelTextEnabled then + icon.drLevelText:Show() + icon.drLevelText:SetText(getDiminishText(icon.diminishing)) + else + icon.drLevelText:Hide() + end + icon:ClearAllPoints() if (Gladdy.db.drCooldownPos == "LEFT") then if (i == 1) then @@ -565,10 +597,47 @@ function Diminishings:GetOptions() }), }, }, + level = { + type = "group", + name = L["Level Text"], + order = 5, + args = { + headerBorder = { + type = "header", + name = L["DR Level"], + order = 1, + }, + drLevelTextEnabled = Gladdy:option({ + type = "toggle", + name = L["DR Level Text Enabled"], + desc = L["Shows the current DR Level on the DR icon."], + order = 2, + width = "full", + }), + drLevelTextFont = Gladdy:option({ + type = "select", + name = L["Font"], + desc = L["Font of the cooldown"], + order = 3, + dialogControl = "LSM30_Font", + values = AceGUIWidgetLSMlists.font, + }), + drLevelTextFontScale = Gladdy:option({ + type = "range", + name = L["Font scale"], + desc = L["Scale of the text"], + order = 4, + min = 0.1, + max = 2, + step = 0.1, + width = "full", + }), + }, + }, border = { type = "group", name = L["Border"], - order = 5, + order = 6, args = { headerBorder = { type = "header", From 91c25edcfee12bf5595a9f7b12d2a83b262fae2c Mon Sep 17 00:00:00 2001 From: Sumsebrum Date: Mon, 10 Jan 2022 23:59:08 +0100 Subject: [PATCH 08/65] zhCN Locale --- Lang.lua | 428 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 428 insertions(+) diff --git a/Lang.lua b/Lang.lua index ce0ec8d..740b673 100644 --- a/Lang.lua +++ b/Lang.lua @@ -985,6 +985,434 @@ elseif GetLocale() == "zhTW" then L["Background Color of the frame"] = "框架的背景顏色" L["Gladdy"] = "Gladdy目標框架" --Line 210, 709, 727 +elseif GetLocale() == "zhCN" then + -- Announcements.lua + L["Announcements"] = "通知" + L["RESURRECTING: %s (%s)"] = "复活: %s (%s) " + L["SPEC DETECTED: %s - %s (%s)"] = "敌方天赋: %s - %s (%s)" + L["LOW HEALTH: %s (%s)"] = "低生命值: %s (%s)" + L["TRINKET USED: %s (%s)"] = "饰品已使用: %s (%s)" + L["TRINKET READY: %s (%s)"] = "饰品就绪: %s (%s)" + L["DRINKING: %s (%s)"] = "正在喝水: %s (%s)" + L["Self"] = "玩家" + L["Party"] = "队伍" + L["Raid Warning"] = "团队警告" + L["Blizzard's Floating Combat Text"] = "Blizzard 战斗浮动文字" + L["Trinket used"] = "饰品已使用" + L["Announce when an enemy's trinket is used"] = "当敌方使用饰品时发出通知" + L["Trinket ready"] = "饰品就緒" + L["Announce when an enemy's trinket is ready again"] = "当敌方饰品就绪时发出通报" + L["Drinking"] = "正在喝水" + L["Announces when enemies sit down to drink"] = "当敌方喝水时发出通报" + L["Resurrection"] = "复活" + L["Announces when an enemy tries to resurrect a teammate"] = "当敌方尝试复活队友时发出通报" + L["New enemies"] = "新的敌人" + L["Announces when new enemies are discovered"] = "当发现新的敌人时发出通报" + L["Spec Detection"] = "天赋侦测" + L["Announces when the spec of an enemy was detected"] = "当侦测到敌方天赋时发出通报" + L["Low health"] = "低生命值" + L["Announces when an enemy drops below a certain health threshold"] = "当敌方生命值低于一定条件时发出通报" + L["Low health threshold"] = "低生命值门槛" + L["Choose how low an enemy must be before low health is announced"] = "设定低生命值通报门槛" + L["Destination"] = "发送通报至" + L["Choose how your announcements are displayed"] = "选择通报发送至哪个频道" + + -- ArenaCountDown.lua + L["Arena Countdown"] = "竞技场计时" + L["Turns countdown before the start of an arena match on/off."] = "在竞技场开始前倒数剩余秒数" + L["Size"] = "大小" + + -- Auras.lua + L["Auras"] = "光环" + L["Frame"] = "框架" + L["Cooldown"] = "冷却时间" + L["No Cooldown Circle"] = "取消图示冷却倒数阴影" + L["Cooldown circle alpha"] = "冷却倒数阴影alpha值" + L["Font"] = "字体" + L["Font of the cooldown"] = "設定冷卻時間字型" + L["Font scale"] = "字体大小" + L["Scale of the text"] = "设定字体大小" + L["Font color"] = "字体颜色" + L["Color of the text"] = "设定字体颜色" + L["Border"] = "边框" + L["Border style"] = "边框样式" + L["Buff color"] = "增益顏色" + L["Debuff color"] = "减益顏色" + L["Check All"] = "全选" + L["Uncheck All"] = "取消全选" + L["Enabled"] = "启用" + L["Priority"] = "优先" + L["Interrupt Spells School Colors"] = "打断法术分类颜色" + L["Enable Interrupt Spell School Colors"] = "启用" + L["Will use Debuff Color if disabled"] = "若未启用则使用一般减益颜色" + L["Buffs"] = "增益" --Line 573 + L["Debuffs"] = "減益" --Line 566 + L["Interrupts"] = "打断" --Line 580 + + -- BuffsDebuffs.lua + L["Buffs and Debuffs"] = "增益与减益" + L["Enabled Buffs and Debuffs module"] = "启用增益与减益模块" + L["Show CC"] = "显示控场" + L["Shows all debuffs, which are displayed on the ClassIcon as well"] = "显示所有减益效果,这些减益效果也显示在职业图标上" + L["Buffs"] = "增益" + L["Size & Padding"] = "大小与內距" + L["Icon Size"] = "图标大小" + L["Size of the DR Icons"] = "递减图标大小" + L["Icon Width Factor"] = "图标宽度比例" + L["Stretches the icon"] = "图标宽度" + L["Icon Padding"] = "图标內距" + L["Space between Icons"] = "图标间距" + L["Position"] = "位置" + L["Aura Position"] = "光环位置" + L["Position of the aura icons"] = "光环图标位置" + L["Top"] = "顶部" + L["Bottom"] = "底部" + L["Left"] = "左" + L["Right"] = "右" + --L["Grow Direction"] = "" + L["Grow Direction of the aura icons"] = "光环图标的延伸方向" + L["Horizontal offset"] = "水平偏移" + L["Vertical offset"] = "垂直偏移" + L["Alpha"] = "Alpha值" + L["Debuffs"] = "减益" + L["Dynamic Timer Color"] = "动态计时条颜色" + L["Show dynamic color on cooldown numbers"] = "冷却时间数字以动态颜色显示" + L["Color of the cooldown timer and stacks"] = "Farbe der Abklingzeit und Stapel" + L["Spell School Colors"] = "法术种类颜色" + L["Spell School Colors Enabled"] = "启用" + L["Show border colors by spell school"] = "根据不同法术显示不同边框颜色" + L["Curse"] = "诅咒" + L["Color of the border"] = "边框颜色" + L["Magic"] = "魔法" + L["Poison"] = "中毒" + L["Physical"] = "物理" + L["Immune"] = "免疫" + L["Disease"] = "疾病" + L["Aura"] = "光环" + L["Form"] = "形态" + L["Font"] = "字体" --Line 906 + L["Border"] = "边框" --Line 949 + L["Debuff Lists"] = "减益列表" --Line 1036 + L["Buff Lists"] = "增益列表" --Line 1051 + + -- Castbar.lua + L["Cast Bar"] = "施法条" + L["Bar"] = "施法条" + L["Bar Size"] = "施法条大小" + L["Bar height"] = "高度" + L["Height of the bar"] = "计量条高度" + L["Bar width"] = "宽度" + L["Width of the bars"] = "计量条宽度" + L["Texture"] = "材质" + L["Bar texture"] = "施法条材质" + L["Texture of the bar"] = "计量条材质" + L["Bar color"] = "施法条颜色" + L["Color of the cast bar"] = "计量条颜色" + L["Background color"] = "背景颜色" + L["Color of the cast bar background"] = "施法条背景顏色" + L["Border size"] = "边框大小" + L["Status Bar border"] = "状态条边框" + L["Status Bar border color"] = "状态条边框颜色" + L["Icon"] = "图标" + L["Icon size"] = "图标大小" + L["Icon border"] = "图标边框" + L["Icon border color"] = "图标边框颜色" + L["If test is running, type \"/gladdy test\" again"] = "如果测试已经开始,调整此选项后请输入/gladdy test以重新开始测试" + L["Spark"] = "尾部发亮" + L["Spark enabled"] = "启用" + L["Spark color"] = "颜色" + L["Color of the cast bar spark"] = "计时条进度的尾部颜色" + L["Font of the castbar"] = "施法条字体" + L["Font size"] = "字体大小" + L["Size of the text"] = "施法条字体大小" + L["Format"] = "格式" + L["Timer Format"] = "时间格式" + L["Remaining"] = "剩余时间" + L["Total"] = "总时间" + L["Both"] = "两者" + L["Castbar position"] = "施法条位置" + L["Icon position"] = "图标位置" + L["Offsets"] = "偏移" + + -- Classicon.lua + L["Class Icon"] = "职业图标" + L["Balance"] = "平衡" + L["Feral"] = "野性" + L["Restoration"] = "恢复" + L["Beast Mastery"] = "兽王" + L["Marksmanship"] = "射击" + L["Survival"] = "生存" + L["Arcane"] = "奥术" + L["Fire"] = "火焰" + L["Frost"] = "冰霜" + L["Holy"] = "神圣" + L["Protection"] = "防护" + L["Retribution"] = "惩戒" + L["Discipline"] = "戒律" + L["Shadow"] = "暗影" + L["Assassination"] = "刺杀" + L["Combat"] = "战斗" + L["Subtlety"] = "敏锐" + L["Elemental"] = "元素" + L["Enhancement"] = "增强" + L["Affliction"] = "痛苦" + L["Demonology"] = "恶魔" + L["Destruction"] = "毁灭" + L["Arms"] = "武器" + L["Fury"] = "狂怒" + L["Show Spec Icon"] = "显示天赋图标" + L["Shows Spec Icon once spec is detected"] = "若侦测到天赋则显示天赋图标" + L["Icon width factor"] = "图标宽度比例" + L["This changes positions with trinket"] = "调整职业图标位置" + L["Border color"] = "边框颜色" + + --CombatIndicator.lua + L["Combat Indicator"] = "战斗指示器" + L["Enable Combat Indicator icon"] = "显示是否进入战斗" + L["Anchor"] = "锚点" + L["This changes the anchor of the ci icon"] = "调整战斗指示器显示锚点" + L["This changes position relative to its anchor of the ci icon"] = "调整战斗指示器位置" + + -- Constants.lua + L["Physical"] = "物理" --Line 749 + L["Holy"] = "神圣" --Line 750 + L["Fire"] = "火焰" --Line 751 + L["Nature"] = "自然" --Line 752 + L["Frost"] = "冰霜" --Line 753 + L["Shadow"] = "暗影" --Line 754 + L["Arcane"] = "奥术" --Line 755 + L["Unknown"] = "未知" --Line 756 + + -- Cooldowns.lua + L["Cooldowns"] = "技能冷却监控" + L["Enabled cooldown module"] = "启用冷却时间监控模块" + L["Cooldown size"] = "大小" + L["Size of each cd icon"] = "冷却时间图标" + L["Icon Width Factor"] = "宽度" + L["Max Icons per row"] = "每行图标数量" + L["Scale of the font"] = "字体大小" + L["Anchor of the cooldown icons"] = "冷却图标锚点" + L["Grow Direction of the cooldown icons"] = "冷却图标延伸方向" + L["Offset"] = "偏移" + L["BloodElf"] = "血精灵" + L["NightElf"] = "暗夜精灵" + L["Scourge"] = "亡灵" + + -- Diminishings.lua + L["Diminishings"] = "控场递减" + L["Enabled DR module"] = "启用递减模块" + L["DR Cooldown position"] = "递减冷却时间位置" + L["Position of the cooldown icons"] = "递减冷却时间图标位置" + L["DR Border Colors"] = "DR边框颜色" + L["Dr Border Colors Enabled"] = "启用" + L["Colors borders of DRs in respective DR-color below"] = "边框颜色依递减设定为以下颜色" + L["Half"] = "二分之一" + L["Quarter"] = "四分之一" + L["Categories"] = "法术列表" + L["Force Icon"] = "使用自定义图标" + L["Icon of the DR"] = "选择此图标取代原始技能图标" + + -- ExportImport.lua + L["Export Import"] = "导出/导入" + L["Profile Export Import"] = "设置导出/导入" + L["Export"] = "导出" --Line 138 + L["Export your current profile to share with others or your various accounts."] = "导出您目前的设置" --Line 139 + L["Import"] = "导入" --Line 162 + L["This will overwrite your current profile!"] = "这将会覆盖您目前的设置" --Line 163 + + -- Healthbar.lua + L["Health Bar"] = "血量条" + L["DEAD"] = "死亡" + L["LEAVE"] = "暂离" + L["General"] = "一般" + L["Color of the status bar background"] = "状态条背景颜色" + L["Font of the bar"] = "字体" + L["Name font size"] = "名称字体大小" + L["Size of the name text"] = "设定名称字体大小" + L["Health font size"] = "生命值字体大小" + L["Size of the health text"] = "设定生命值字体大小" + L["Size of the border"] = "边框大小" + L["Health Bar Text"] = "血量条文字" + L["Show name text"] = "显示名字" + L["Show the units name"] = "显示单位名称" + L["Show ArenaX"] = "显示编号" + L["Show 1-5 as name instead"] = "使用编号1-5代替角色名字" + L["Show the actual health"] = "显示目前生命值" + L["Show the actual health on the health bar"] = "在血量条上显示目前生命值" + L["Show max health"] = "显示最大生命值" + L["Show max health on the health bar"] = "在血量条上显示最大生命值" + L["Show health percentage"] = "显示百分比" + L["Show health percentage on the health bar"] = "在血量条上显示生命值百分比" + + -- Highlight.lua + L["Highlight"] = "高亮提示" + L["Show Inside"] = "显示在框架內" + L["Show Highlight border inside of frame"] = "將高亮边框显示于框架內侧" + L["Colors"] = "边框颜色" + L["Target border color"] = "目标" + L["Color of the selected targets border"] = "目标的边框顏色" + L["Focus border color"] = "焦点" + L["Color of the focus border"] = "焦点目标边框顏色" + L["Highlight target"] = "高亮目标" + L["Toggle if the selected target should be highlighted"] = "是否高亮当前目标" + L["Show border around target"] = "显示目标边框" + L["Toggle if a border should be shown around the selected target"] = "是否显示当前目标的边框" + L["Show border around focus"] = "显示焦点边框" + L["Toggle of a border should be shown around the current focus"] = "是否显示当前焦点目标的边框" + + -- Pets.lua + L["Pets"] = "宠物" + L["Enables Pets module"] = "启用宠物模块" + L["Width of the bar"] = "宠物条宽度" + L["Health color"] = "生命值顏色" + L["Color of the status bar"] = "状态条顏色" + L["Portrait"] = "头像" + L["Health Values"] = "生命值" + + -- Powerbar.lua + L["Power Bar"] = "法力/能量条" + L["Power Bar Text"] = "法力/能量条文字" + L["Power Texts"] = "法力/能量条文字" + L["Show race"] = "显示种族" + L["Show spec"] = "显示天赋" + L["Show the actual power"] = "显示目前法力/能量" + L["Show the actual power on the power bar"] = "在计量条中显示目前法力/能量值" + L["Show max power"] = "显示最大法力/能量值" + L["Show max power on the power bar"] = "在计量条中显示最大法力/能量值" + L["Show power percentage"] = "显示法力/能量百分比" + L["Show power percentage on the power bar"] = "在计量条中显示目前法力/能量百分比" + + -- Racial.lua + L["Racial"] = "种族" + L["Enable racial icon"] = "启用种族图标" + L["This changes the anchor of the racial icon"] = "调整种族图标锚点" + L["This changes position relative to its anchor of the racial icon"] = "调整种族图标位置" + + -- TotemPlates.lua + L["Totem Plates"] = "图腾栏" + L["Customize Totems"] = "自定义图腾" + L["Custom totem name"] = "自定义图腾名字" + L["Totem General"] = "图腾通用设置" + L["Turns totem icons instead of nameplates on or off. (Requires reload)"] = "是否显示图腾名字(需重新加载)" + L["Show friendly"] = "显示右方图腾" + L["Show enemy"] = "显示敌方图腾" + L["Totem size"] = "图腾大小" + L["Size of totem icons"] = "图腾图标大小" + L["Font of the custom totem name"] = "自定义图腾字体" + L["Apply alpha when no target"] = "图腾非目标时使用alpha值" + L["Always applies alpha, even when you don't have a target. Else it is 1."] = "若图腾未被选为目标,其图标使用alpha值設定" + L["Apply alpha when targeted"] = "图腾为目标时使用alpha值" + L["Always applies alpha, even when you target the totem. Else it is 1."] = "图腾被选为目标时,其图标使用alpha值設定" + L["All totem border alphas (configurable per totem)"] = "图腾 Alpha值 " + L["Totem icon border style"] = "图腾边框样式" + L["All totem border color"] = "图腾边框顏色" + + -- Trinket.lua + L["Trinket"] = "饰品" + L["Enable trinket icon"] = "启用饰品图标" + L["This changes positions of the trinket"] = "调整饰品图标位置" + + -- XiconProfiles.lua + L["Profile"] = "样式" + L["XiconProfiles"] = "框架外观" --Line 4 + L[" No Pet"] = "(无宠物)" --Line 109, 119 + + -- Frame.lua + L["Gladdy - drag to move"] = "Gladdy - 拖拽移动" + + -- Gladdy.lua + L["Welcome to Gladdy!"] = "欢迎使用 Gladdy!" + L["First run has been detected, displaying test frame."] = "第一次使用时,显示此测试框架。" + L["Valid slash commands are:"] = "可用的指令为:" + L["If this is not your first run please lock or move the frame to prevent this from happening."] = "若非第一次使用,请移动或锁定框架以免此提示再次出现。" + + -- Clicks.lua + L["Action #%d"] = "动作 #%d" + L["Target"] = "目标" --Line 15 + L["Focus"] = "焦点" --Line 16 + L["Clicks"] = "点击动作" + L["Left button"] = "左键" + L["Right button"] = "右键" + L["Middle button"] = "中键" + L["Button 4"] = "鼠标按键4" + L["Button 5"] = "鼠标按键5" + L["Select what action this mouse button does"] = "设置输入按键后欲执行的动作" + L["Modifier"] = "修饰键" + L["Select which modifier to use"] = "设置欲使用的修饰键" + L["Button"] = "按键" + L["Select which mouse button to use"] = "设置欲使用的鼠标按键" + L["Name"] = "名称" + L["Select the name of the click option"] = "设置动作名称" + L["Action"] = "动作" + L["Cast Spell / Macro"] = "施放法术/宏" + + --RangeCheck.lua + L["Range Check"] = "距离检测" + L["Spells"] = "法术" + L["Fade"] = "变暗" + L["Out of Range Darkening Level"] = "超出距离时变暗程度" + L["Higher is darker"] = "数值越高越暗" + L["yds"] = " 码" --Line 366, 388 + L["Changing the spellID only applies to your player class!\n\nExample: If you are a Paladin and wish to change your range check spell to Repentance, edit the Paladin spellID to 20066."] = "对应您的职业修改欲使用监控距离的技能。\n\n例:若您为圣骑士且想以忏悔技能用于距离监控,请将圣骑士的法术ID改为20066。" --Line 352 + + --ShadowsightTimer.lua + L["Shadowsight Timer"] = "暗影视界计时" + L["Locked"] = "锁定" + L["Announce"] = "通报" + L["Scale"] = "大小" + L["Shadowsight up in %ds"] = "暗影视界於%d秒后就绪" + L["Shadowsight up!"] = "暗影视界已就绪" + + -- Options.lua + L["settings"] = "设置" + L["Reset module"] = "重置模块" + L["Reset module to defaults"] = "将模块重置为初始值" + L["No settings"] = "无设置" + L["Module has no settings"] = "模块没有设置" + L["General settings"] = "通用设置" + L["Lock frame"] = "锁定框架" + L["Toggle if frame can be moved"] = "调整框架是否可移动" + L["Grow frame upwards"] = "框架向上延伸" + L["If enabled the frame will grow upwards instead of downwards"] = "开启次选项时框架向上延伸" + L["Down"] = "下" + L["Up"] = "上" + L["Frame General"] = "框架" + L["Frame scale"] = "框架大小" + L["Scale of the frame"] = "框架的尺寸" + L["Frame padding"] = "框架內距" + L["Padding of the frame"] = "框架的內距" + L["Frame width"] = "框架宽度" + L["Margin"] = "框架间距" + L["Margin between each button"] = "框架的间距" + L["Cooldown General"] = "冷却" + L["Font General"] = "字体" + L["General Font"] = "通用字体" + L["Font color text"] = "文字顏色" + L["Font color timer"] = "计时器文字顏色" + L["Color of the timers"] = "计时器顏色" + L["Icons General"] = "图标" + L["Icon border style"] = "图标边框样式" + L["This changes the border style of all icons"] = "调整所有图标的边框样式" + L["This changes the border color of all icons"] = "调整所有图标的边框顏色" + L["Statusbar General"] = "状态条" + L["Statusbar texture"] = "状态条材质" + L["This changes the texture of all statusbar frames"] = "调整所有状态条的材质" + L["Statusbar border style"] = "状态条边框样式" + L["This changes the border style of all statusbar frames"] = "调整所有状态条的边框样式" + L["Statusbar border offset divider (smaller is higher offset)"] = "状态条边框距离" + L["Offset of border to statusbar (in case statusbar shows beyond the border)"] = "调整状态条边框距离" + L["Statusbar border color"] = "状态条边框顏色" + L["This changes the border color of all statusbar frames"] = "调整所有状态条的边框颜色" + L["Hide Blizzard"] = "隐藏暴雪框架" + L["Grow Direction"] = "框架延伸方向" + L["Arena only"] = "只在竞技场中" + L["Never"] = "从不" + L["Always"] = "一直" + L["Load configuration"] = "设置选项" --Line 713 + L["Load configuration options"] = "加载设置选项" --Line 714 + L["Background Color of the frame"] = "框架的背景顏色" + + L["Gladdy"] = "Gladdy框架" --Line 210, 709, 727 end From 92322a4d9bf921cd5e78ba2b22bf2d45966a5168 Mon Sep 17 00:00:00 2001 From: Sumsebrum Date: Mon, 10 Jan 2022 23:59:20 +0100 Subject: [PATCH 09/65] spell interrupt announce --- Modules/Announcements.lua | 30 +++++++++++++++++++++++------- 1 file changed, 23 insertions(+), 7 deletions(-) diff --git a/Modules/Announcements.lua b/Modules/Announcements.lua index aeb5fd5..4b63595 100644 --- a/Modules/Announcements.lua +++ b/Modules/Announcements.lua @@ -26,6 +26,7 @@ local Announcements = Gladdy:NewModule("Announcements", nil, { healthThreshold = 20, trinketUsed = true, trinketReady = false, + spellInterrupt = true, dest = "party", }, }) @@ -48,6 +49,7 @@ function Announcements:Initialize() self:RegisterMessage("TRINKET_USED") self:RegisterMessage("TRINKET_READY") self:RegisterMessage("SHADOWSIGHT") + self:RegisterMessage("SPELL_INTERRUPT") end function Announcements:Reset() @@ -138,6 +140,14 @@ function Announcements:TRINKET_READY(unit) self:Send(L["TRINKET READY: %s (%s)"]:format(button.name, button.classLoc), 3, RAID_CLASS_COLORS[button.class]) end +function Announcements:SPELL_INTERRUPT(destUnit,spellID,spellName,spellSchool,extraSpellId,extraSpellName,extraSpellSchool) + local button = Gladdy.buttons[destUnit] + if (not button or not Gladdy.db.announcements.spellInterrupt) then + return + end + self:Send(L["INTERRUPTED: %s (%s)"]:format(extraSpellName, button.name or ""), 3, RAID_CLASS_COLORS[button.class]) +end + function Announcements:CheckDrink(unit, aura) local button = Gladdy.buttons[unit] if (not button or not Gladdy.db.announcements.drinks) then @@ -237,41 +247,47 @@ function Announcements:GetOptions() desc = L["Announce when an enemy's trinket is ready again"], order = 4, }), + spellInterrupt = option({ + type = "toggle", + name = L["Interrupts"], + desc = L["Announces when enemies' spells are interrupted"], + order = 5, + }), drinks = option({ type = "toggle", name = L["Drinking"], desc = L["Announces when enemies sit down to drink"], - order = 5, + order = 6, }), resurrections = option({ type = "toggle", name = L["Resurrection"], desc = L["Announces when an enemy tries to resurrect a teammate"], - order = 6, + order = 7, }), enemy = option({ type = "toggle", name = L["New enemies"], desc = L["Announces when new enemies are discovered"], - order = 7, + order = 8, }), spec = option({ type = "toggle", name = L["Spec Detection"], desc = L["Announces when the spec of an enemy was detected"], - order = 8, + order = 9, }), health = option({ type = "toggle", name = L["Low health"], desc = L["Announces when an enemy drops below a certain health threshold"], - order = 9, + order = 10, }), healthThreshold = option({ type = "range", name = L["Low health threshold"], desc = L["Choose how low an enemy must be before low health is announced"], - order = 10, + order = 11, min = 1, max = 100, step = 1, @@ -283,7 +299,7 @@ function Announcements:GetOptions() type = "select", name = L["Destination"], desc = L["Choose how your announcements are displayed"], - order = 11, + order = 12, values = destValues, }), } From fed5d1c3416835836b159622115934cdf268d7b4 Mon Sep 17 00:00:00 2001 From: Sumsebrum Date: Mon, 10 Jan 2022 23:59:33 +0100 Subject: [PATCH 10/65] reload during arena --- EventListener.lua | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/EventListener.lua b/EventListener.lua index 4d87a28..7d96b78 100644 --- a/EventListener.lua +++ b/EventListener.lua @@ -33,6 +33,16 @@ function EventListener:JOINED_ARENA() self:RegisterEvent("UNIT_SPELLCAST_CHANNEL_START") self:RegisterEvent("UNIT_SPELLCAST_SUCCEEDED") self:SetScript("OnEvent", EventListener.OnEvent) + + -- in case arena has started already we check for units + for i=1,Gladdy.curBracket do + if UnitExists("arena" .. i) then + Gladdy:SpotEnemy("arena" .. i, true) + end + if UnitExists("arenapet" .. i) then + Gladdy:SendMessage("PET_SPOTTED", "arenapet" .. i) + end + end end function EventListener:Reset() From b2c8ed9c44ab8beb6f1793cff70a47ec81cc2eda Mon Sep 17 00:00:00 2001 From: Sumsebrum Date: Tue, 11 Jan 2022 00:00:17 +0100 Subject: [PATCH 11/65] fixed spec detection --- Modules/Cooldowns.lua | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/Modules/Cooldowns.lua b/Modules/Cooldowns.lua index 1ab006d..bf30c5d 100644 --- a/Modules/Cooldowns.lua +++ b/Modules/Cooldowns.lua @@ -338,13 +338,24 @@ function Cooldowns:CooldownReady(button, spellId, frame) end end +local function notIn(spec, list) + for _,v in ipairs(list) do + if spec == v then + return false + end + end + return true +end + function Cooldowns:DetectSpec(unit, spec) local button = Gladdy.buttons[unit] if (not button or not spec or button.spec) then return end - if button.class == "PALADIN" and (spec ~= L["Holy"] or spec ~= L["Retribution"]) then + if button.class == "PALADIN" and notIn(spec, {L["Holy"], L["Retribution"], L["Protection"]}) + or button.class == "SHAMAN" and notIn(spec, {L["Restoration"], L["Enhancement"], L["Elemental"]}) + or button.class == "WARRIOR" and notIn(spec, {L["Arms"], L["Protection"], L["Fury"]}) then return end From e2a78c717b75dabd444d1217db40540557f95311 Mon Sep 17 00:00:00 2001 From: Sumsebrum Date: Tue, 11 Jan 2022 00:01:57 +0100 Subject: [PATCH 12/65] fixed DRs Hibernate/Chastice/Dragonsbreath/ImpConcussiveShot/Counterattack --- Libs/DRData-1.0/DRData-1.0.lua | 38 +++++++++++++++++++--------------- Modules/ExportImport.lua | 6 +++++- 2 files changed, 26 insertions(+), 18 deletions(-) diff --git a/Libs/DRData-1.0/DRData-1.0.lua b/Libs/DRData-1.0/DRData-1.0.lua index e6bd775..6b7d0e7 100644 --- a/Libs/DRData-1.0/DRData-1.0.lua +++ b/Libs/DRData-1.0/DRData-1.0.lua @@ -188,9 +188,9 @@ Data.spells = { --[[ SLEEPS ]]-- -- Hibernate - [2637] = "sleep", - [18657] = "sleep", - [18658] = "sleep", + [2637] = "disorient", + [18657] = "disorient", + [18658] = "disorient", -- Wyvern Sting [19386] = "disorient", @@ -199,19 +199,19 @@ Data.spells = { [27068] = "disorient", --[[ MISC ]]-- - -- Chastise (Maybe this shares DR with Imp HS?) - [44041] = "root", - [44043] = "root", - [44044] = "root", - [44045] = "root", - [44046] = "root", - [44047] = "root", + -- Chastise + [44041] = "chastise", + [44043] = "chastise", + [44044] = "chastise", + [44045] = "chastise", + [44046] = "chastise", + [44047] = "chastise", -- Dragon's Breath - [31661] = "dragonsbreath", -- Dragon's Breath - [33041] = "dragonsbreath", -- Dragon's Breath - [33042] = "dragonsbreath", -- Dragon's Breath - [33043] = "dragonsbreath", -- Dragon's Breath + [31661] = "scatters", -- Dragon's Breath + [33041] = "scatters", -- Dragon's Breath + [33042] = "scatters", -- Dragon's Breath + [33043] = "scatters", -- Dragon's Breath -- Repentance [20066] = "disorient", @@ -224,9 +224,9 @@ Data.spells = { [14309] = "disorient", -- Improved Conc Shot - [19410] = "impconc", - [22915] = "impconc", - [28445] = "impconc", + [19410] = "rndstun", + [22915] = "rndstun", + [28445] = "rndstun", -- Death Coil [6789] = "dc", @@ -242,6 +242,9 @@ Data.spells = { [605] = "charm", [10911] = "charm", [10912] = "charm", + + -- Counterattack + [19306] = "counterattack" } -- DR Category names @@ -264,6 +267,7 @@ Data.typeNames = { ["repentance"] = "Repentance", ["dragonsbreath"] = "Dragon's Breath", ["ua"] = "Unstable Affliction Silence", + ["counterattack"] = "Counterattack Immobilize" } -- Categories that have DR in PvE as well as PvP diff --git a/Modules/ExportImport.lua b/Modules/ExportImport.lua index a1c709e..330499a 100644 --- a/Modules/ExportImport.lua +++ b/Modules/ExportImport.lua @@ -89,7 +89,11 @@ import:AddChild(importClearButton) import.clearButton = importClearButton local deletedOptions = { -- backwards compatibility - growUp = true, + --deleted DR-categories + repentance = true, + sleep = true, + impconc = true, + dragonsbreath = true, freezetrap = true, repentance = true } From 7db32cceef1efb53d1885ed1b777154e1863ac21 Mon Sep 17 00:00:00 2001 From: Sumsebrum Date: Tue, 11 Jan 2022 00:02:10 +0100 Subject: [PATCH 13/65] fix grow up positioning --- Frame.lua | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Frame.lua b/Frame.lua index 128452d..b3d1e78 100644 --- a/Frame.lua +++ b/Frame.lua @@ -58,7 +58,7 @@ function Gladdy:CreateFrame() local scale = f:GetEffectiveScale() self.db.x = f:GetLeft() * scale - self.db.y = (self.db.growUp and f:GetBottom() or f:GetTop()) * scale + self.db.y = (self.db.growDirection == "TOP" and f:GetBottom() or f:GetTop()) * scale end end) @@ -82,7 +82,7 @@ function Gladdy:CreateFrame() local scale = self.frame:GetEffectiveScale() self.db.x = self.frame:GetLeft() * scale - self.db.y = (self.db.growUp and self.frame:GetBottom() or self.frame:GetTop()) * scale + self.db.y = (self.db.growDirection == "TOP" and self.frame:GetBottom() or self.frame:GetTop()) * scale end end) self.anchor:SetScript("OnClick", function() From 2dcdc9c9786fb3775cac6cd6ffee1c8144ef6b47 Mon Sep 17 00:00:00 2001 From: Sumsebrum Date: Tue, 11 Jan 2022 00:02:21 +0100 Subject: [PATCH 14/65] fix dr level text --- Modules/Diminishings.lua | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Modules/Diminishings.lua b/Modules/Diminishings.lua index 2a2c1d2..069efb0 100644 --- a/Modules/Diminishings.lua +++ b/Modules/Diminishings.lua @@ -221,7 +221,6 @@ function Diminishings:UpdateFrame(unit) icon.timeText:SetTextColor(Gladdy.db.drFontColor.r, Gladdy.db.drFontColor.g, Gladdy.db.drFontColor.b, Gladdy.db.drFontColor.a) icon.drLevelText:SetFont(Gladdy:SMFetch("font", "drLevelTextFont"), (Gladdy.db.drIconSize/2 - 1) * Gladdy.db.drLevelTextFontScale, "OUTLINE") - icon.drLevelText:SetTextColor(getDiminishColor(icon.diminishing)) icon.cooldown:SetWidth(icon:GetWidth() - icon:GetWidth()/16) icon.cooldown:SetHeight(icon:GetHeight() - icon:GetHeight()/16) @@ -241,7 +240,6 @@ function Diminishings:UpdateFrame(unit) if Gladdy.db.drLevelTextEnabled then icon.drLevelText:Show() - icon.drLevelText:SetText(getDiminishText(icon.diminishing)) else icon.drLevelText:Hide() end @@ -368,6 +366,8 @@ function Diminishings:AuraFade(unit, spellID) lastIcon.active = true self:Positionate(unit) lastIcon:Show() + lastIcon.drLevelText:SetText(getDiminishText(lastIcon.diminishing)) + lastIcon.drLevelText:SetTextColor(getDiminishColor(lastIcon.diminishing)) end function Diminishings:Positionate(unit) From f923f471d89a627277d64ff17f5934fef0a79573 Mon Sep 17 00:00:00 2001 From: Sumsebrum Date: Tue, 11 Jan 2022 00:03:36 +0100 Subject: [PATCH 15/65] detect spelllock and devour magic --- EventListener.lua | 4 ++++ Modules/Pets.lua | 1 + 2 files changed, 5 insertions(+) diff --git a/EventListener.lua b/EventListener.lua index 7d96b78..530f482 100644 --- a/EventListener.lua +++ b/EventListener.lua @@ -112,6 +112,10 @@ function EventListener:COMBAT_LOG_EVENT_UNFILTERED() end end if srcUnit then + srcUnit = string_gsub(srcUnit, "pet", "") + if (not UnitExists(srcUnit)) then + return + end if (eventType == "SPELL_CAST_SUCCESS" or eventType == "SPELL_AURA_APPLIED") then local unitRace = Gladdy.buttons[srcUnit].race -- cooldown tracker diff --git a/Modules/Pets.lua b/Modules/Pets.lua index 9039ce8..36a32d2 100644 --- a/Modules/Pets.lua +++ b/Modules/Pets.lua @@ -65,6 +65,7 @@ function Pets:ResetUnit(unitId) end function Pets:PET_SPOTTED(unit) + Gladdy.guids[UnitGUID(unit)] = unit if Gladdy.db.petEnabled then self.frames[unit].healthBar:SetAlpha(1) self.frames[unit].healthBar.hp:SetStatusBarColor(Gladdy.db.petHealthBarColor.r, Gladdy.db.petHealthBarColor.g, Gladdy.db.petHealthBarColor.b, Gladdy.db.petHealthBarColor.a) From 0a5176aaed0bff1728778cdbbfc7b0d064efa6b1 Mon Sep 17 00:00:00 2001 From: Sumsebrum Date: Tue, 11 Jan 2022 00:04:08 +0100 Subject: [PATCH 16/65] detect arena and pets faster on reload --- Gladdy.lua | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/Gladdy.lua b/Gladdy.lua index 2b0b28c..a605d9b 100644 --- a/Gladdy.lua +++ b/Gladdy.lua @@ -14,6 +14,8 @@ local DEFAULT_CHAT_FRAME = DEFAULT_CHAT_FRAME local IsAddOnLoaded = IsAddOnLoaded local GetBattlefieldStatus = GetBattlefieldStatus local IsActiveBattlefieldArena = IsActiveBattlefieldArena +local IsInInstance = IsInInstance +local GetNumArenaOpponents = GetNumArenaOpponents local RELEASE_TYPES = { alpha = "Alpha", beta = "Beta", release = "Release"} local PREFIX = "TBC-Classic_v" local VERSION_REGEX = PREFIX .. "(%d+%.%d+)%-(%a)" @@ -422,7 +424,9 @@ end function Gladdy:UPDATE_BATTLEFIELD_STATUS(_, index) local status, mapName, instanceID, levelRangeMin, levelRangeMax, teamSize, isRankedArena, suspendedQueue, bool, queueType = GetBattlefieldStatus(index) - if (status == "active" and teamSize > 0 and IsActiveBattlefieldArena()) then + local instanceType = select(2, IsInInstance()) + Gladdy:Debug("INFO", "UPDATE_BATTLEFIELD_STATUS", instanceType, status, teamSize) + if ((instanceType == "arena" or GetNumArenaOpponents() > 0) and status == "active" and teamSize > 0) then self.curBracket = teamSize self:JoinedArena() end From 1b2311fea2640acd2390e92997ca65ad0b3d4e89 Mon Sep 17 00:00:00 2001 From: Sumsebrum Date: Tue, 11 Jan 2022 00:04:54 +0100 Subject: [PATCH 17/65] debug messages --- Gladdy.lua | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/Gladdy.lua b/Gladdy.lua index a605d9b..1b3f4ba 100644 --- a/Gladdy.lua +++ b/Gladdy.lua @@ -37,6 +37,8 @@ Gladdy.version_releaseType = RELEASE_TYPES.release Gladdy.version = PREFIX .. Gladdy.version_num .. "-" .. Gladdy.version_releaseType Gladdy.VERSION_REGEX = VERSION_REGEX +Gladdy.debug = false + LibStub("AceTimer-3.0"):Embed(Gladdy) LibStub("AceComm-3.0"):Embed(Gladdy) Gladdy.modules = {} @@ -58,6 +60,17 @@ function Gladdy:Print(...) end function Gladdy:Warn(...) + local text = "|cfff29f05Gladdy|r:" + local val + for i = 1, select("#", ...) do + val = select(i, ...) + if (type(val) == 'boolean') then val = val and "true" or false end + text = text .. " " .. tostring(val) + end + DEFAULT_CHAT_FRAME:AddMessage(text) +end + +function Gladdy:Error(...) local text = "|cfffc0303Gladdy|r:" local val for i = 1, select("#", ...) do @@ -68,6 +81,18 @@ function Gladdy:Warn(...) DEFAULT_CHAT_FRAME:AddMessage(text) end +function Gladdy:Debug(lvl, ...) + if Gladdy.debug then + if lvl == "INFO" then + Gladdy:Print(...) + elseif lvl == "WARN" then + Gladdy:Warn(...) + elseif lvl == "ERROR" then + Gladdy:Error(...) + end + end +end + Gladdy.events = CreateFrame("Frame") Gladdy.events.registered = {} Gladdy.events:RegisterEvent("PLAYER_LOGIN") From 8df7aae3b6466de42834132994f260b08fb1d07a Mon Sep 17 00:00:00 2001 From: Sumsebrum Date: Tue, 11 Jan 2022 00:05:31 +0100 Subject: [PATCH 18/65] detect fear ward cd when buffed pre arena start --- EventListener.lua | 33 ++++++++++++++++++++++++++------- Modules/Cooldowns.lua | 4 ++-- 2 files changed, 28 insertions(+), 9 deletions(-) diff --git a/EventListener.lua b/EventListener.lua index 530f482..e867791 100644 --- a/EventListener.lua +++ b/EventListener.lua @@ -1,13 +1,14 @@ -local select, string_gsub, tostring = select, string.gsub, tostring +local select, string_gsub, tostring, pairs = select, string.gsub, tostring, pairs local CombatLogGetCurrentEventInfo = CombatLogGetCurrentEventInfo local AURA_TYPE_DEBUFF = AURA_TYPE_DEBUFF local AURA_TYPE_BUFF = AURA_TYPE_BUFF -local UnitName, UnitAura, UnitRace, UnitClass, UnitGUID, UnitIsUnit = UnitName, UnitAura, UnitRace, UnitClass, UnitGUID, UnitIsUnit +local UnitName, UnitAura, UnitRace, UnitClass, UnitGUID, UnitIsUnit, UnitExists = UnitName, UnitAura, UnitRace, UnitClass, UnitGUID, UnitIsUnit, UnitExists local UnitCastingInfo, UnitChannelInfo = UnitCastingInfo, UnitChannelInfo local GetSpellInfo = GetSpellInfo local FindAuraByName = AuraUtil.FindAuraByName +local GetTime = GetTime local Gladdy = LibStub("Gladdy") local Cooldowns = Gladdy.modules["Cooldowns"] @@ -50,9 +51,9 @@ function EventListener:Reset() self:SetScript("OnEvent", nil) end -function Gladdy:DetectSpec(unit, specSpell) - if specSpell then - self.modules["Cooldowns"]:DetectSpec(unit, specSpell) +function Gladdy:DetectSpec(unit, spec) + if spec then + self.modules["Cooldowns"]:DetectSpec(unit, spec) end end @@ -73,11 +74,18 @@ function Gladdy:SpotEnemy(unit, auraScan) end if auraScan and not button.spec then for n = 1, 30 do - local spellName,_,_,_,_,_,unitCaster = UnitAura(unit, n, "HELPFUL") + local spellName,_,_,_,_,expirationTime,unitCaster = UnitAura(unit, n, "HELPFUL") if ( not spellName ) then break end - if Gladdy.specBuffs[spellName] then + if Gladdy.cooldownBuffs[spellName] then -- Check for auras that detect used CDs (like Fear Ward) + for arenaUnit,v in pairs(self.buttons) do + if (UnitIsUnit(arenaUnit, unitCaster)) then + Cooldowns:CooldownUsed(arenaUnit, v.class, Gladdy.cooldownBuffs[spellName].spellId, expirationTime - GetTime()) + end + end + end + if Gladdy.specBuffs[spellName] then -- Check for auras that detect a spec local unitPet = string_gsub(unit, "%d$", "pet%1") if UnitIsUnit(unit, unitCaster) or UnitIsUnit(unitPet, unitCaster) then Gladdy:DetectSpec(unit, Gladdy.specBuffs[spellName]) @@ -202,6 +210,10 @@ Gladdy.exceptionNames = { -- TODO MOVE ME TO CLASSBUFFS LIB [27010] = select(1, GetSpellInfo(27010)) .. " " .. select(1, GetSpellInfo(16689)), } +Gladdy.cooldownBuffs = { + [GetSpellInfo(6346)] = { cd = 180, spellId = 6346 }, -- Fear Ward +} + function EventListener:UNIT_AURA(unit) local button = Gladdy.buttons[unit] if not button then @@ -220,6 +232,13 @@ function EventListener:UNIT_AURA(unit) Gladdy:SendMessage("AURA_GAIN_LIMIT", unit, auraType, n - 1) break end + if Gladdy.cooldownBuffs[spellName] then -- Check for auras that hint used CDs (like Fear Ward) + for arenaUnit,v in pairs(Gladdy.buttons) do + if (UnitIsUnit(arenaUnit, unitCaster)) then + Cooldowns:CooldownUsed(arenaUnit, v.class, Gladdy.cooldownBuffs[spellName].spellId, expirationTime - GetTime()) + end + end + end if not button.spec and Gladdy.specBuffs[spellName] then local unitPet = string_gsub(unit, "%d$", "pet%1") if unitCaster and (UnitIsUnit(unit, unitCaster) or UnitIsUnit(unitPet, unitCaster)) then diff --git a/Modules/Cooldowns.lua b/Modules/Cooldowns.lua index bf30c5d..0ce1594 100644 --- a/Modules/Cooldowns.lua +++ b/Modules/Cooldowns.lua @@ -502,7 +502,7 @@ function Cooldowns:UpdateCooldowns(button) end end -function Cooldowns:CooldownUsed(unit, unitClass, spellId) +function Cooldowns:CooldownUsed(unit, unitClass, spellId, expirationTimeInSeconds) local button = Gladdy.buttons[unit] if not button then return @@ -547,7 +547,7 @@ function Cooldowns:CooldownUsed(unit, unitClass, spellId) if (Gladdy.db.cooldown) then -- start cooldown - self:CooldownStart(button, spellId, cd) + self:CooldownStart(button, spellId, expirationTimeInSeconds or cd) end --[[ announcement From be292401cc1aef152a7b69ce9393c910ed200998 Mon Sep 17 00:00:00 2001 From: Sumsebrum Date: Tue, 11 Jan 2022 00:05:57 +0100 Subject: [PATCH 19/65] pixel perfect scale minor adjustments --- Gladdy.lua | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/Gladdy.lua b/Gladdy.lua index 1b3f4ba..f84824f 100644 --- a/Gladdy.lua +++ b/Gladdy.lua @@ -8,6 +8,7 @@ local tsort = table.sort local str_lower = string.lower local math_abs = math.abs local GetTime = GetTime +local GetPhysicalScreenSize = GetPhysicalScreenSize local InCombatLockdown = InCombatLockdown local CreateFrame = CreateFrame local DEFAULT_CHAT_FRAME = DEFAULT_CHAT_FRAME @@ -290,15 +291,17 @@ end function Gladdy:PixelPerfectScale(update) local physicalWidth, physicalHeight = GetPhysicalScreenSize() - local perfectUIScale = 768/physicalHeight--768/select(2, strsplit("x",({ GetScreenResolutions()})[GetCurrentResolution()])) + local perfectUIScale = 768.0/physicalHeight--768/select(2, strsplit("x",({ GetScreenResolutions()})[GetCurrentResolution()])) if self.db and self.db.pixelPerfect and self.frame then self.frame:SetIgnoreParentScale(true) self.frame:SetScale(perfectUIScale) - --self.db.frameScale = perfectUIScale --(GetCVar("useUiScale") == "1" and 1 + perfectUIScale - GetCVar("UIScale") or perfectUIScale) + --local adaptiveScale = (GetCVar("useUiScale") == "1" and 1.0 + perfectUIScale - GetCVar("UIScale") or perfectUIScale) + --self.frame:SetScale(adaptiveScale) if update then self:UpdateFrame() end elseif self.frame then + self.frame:SetScale(self.db.frameScale) self.frame:SetIgnoreParentScale(false) end end From adb06d0c7fc23b23ee7f14123a63e313b15ff64a Mon Sep 17 00:00:00 2001 From: Sumsebrum Date: Tue, 11 Jan 2022 00:13:31 +0100 Subject: [PATCH 20/65] add spec detection spells: - Expose Weakness (Survival Hunter) - Slow (Arcane Mage) - Improved Blink (Fire Mage) - Vindication (Retribution Paladin) - Holy Shield (Protection Paladin) - Vampiric Embrace (Shadow Priest) - Blade Flurry (Combat Rogue) - Unleashed Rage (Enhancement Shaman) - Flurry (Enhancement Shaman) - Shamanistic Rage (Enhancement Shaman) - Healing Way (Restoration Shaman) - Totem of Wrath (Elemental Shaman) - Dark Pact (Affliction Warlock) - Conflagate (Destruction Warlock) - Shield Slam (Protection Warrior) Added Cooldowns: - Scare Beast (Hunter) - Feign Death (Hunter) - Viper Sting (Hunter) - Flare (Hunter) - Fear Ward (Priest) - Shadow Word: Death (Priest) - Evocation (Mage) - Grounding Totem (Shaman) - Spell Lock (Warlock) - Devour Magic (Warlock) - Intercept (Warrior) Added Auras: - Scare Beast (Hunter) - Fear Ward (Priest) --- Constants.lua | 48 +++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 45 insertions(+), 3 deletions(-) diff --git a/Constants.lua b/Constants.lua index 5595fe2..1e431b8 100644 --- a/Constants.lua +++ b/Constants.lua @@ -26,13 +26,16 @@ local specBuffs = { [GetSpellInfo(20895)] = L["Beast Mastery"], -- Spirit Bond [GetSpellInfo(34455)] = L["Beast Mastery"], -- Ferocious Inspiration [GetSpellInfo(27066)] = L["Marksmanship"], -- Trueshot Aura + [GetSpellInfo(34501)] = L["Survival"], -- Expose Weakness -- MAGE [GetSpellInfo(33405)] = L["Frost"], -- Ice Barrier [GetSpellInfo(11129)] = L["Fire"], -- Combustion [GetSpellInfo(12042)] = L["Arcane"], -- Arcane Power [GetSpellInfo(12043)] = L["Arcane"], -- Presence of Mind + [GetSpellInfo(31589)] = L["Arcane"], -- Slow [GetSpellInfo(12472)] = L["Frost"], -- Icy Veins + [GetSpellInfo(46989)] = L["Fire"], -- Improved Blink -- PALADIN [GetSpellInfo(31836)] = L["Holy"], -- Light's Grace @@ -41,9 +44,12 @@ local specBuffs = { [GetSpellInfo(20375)] = L["Retribution"], -- Seal of Command [GetSpellInfo(20049)] = L["Retribution"], -- Vengeance [GetSpellInfo(20218)] = L["Retribution"], -- Sanctity Aura + [GetSpellInfo(26018)] = L["Retribution"], -- Vindication + [GetSpellInfo(27179)] = L["Protection"], -- Holy Shield -- PRIEST [GetSpellInfo(15473)] = L["Shadow"], -- Shadowform + [GetSpellInfo(15286)] = L["Shadow"], -- Vampiric Embrace [GetSpellInfo(45234)] = L["Discipline"], -- Focused Will [GetSpellInfo(27811)] = L["Discipline"], -- Blessed Recovery [GetSpellInfo(33142)] = L["Holy"], -- Blessed Resilience @@ -59,11 +65,15 @@ local specBuffs = { [GetSpellInfo(36563)] = L["Subtlety"], -- Shadowstep DMG [GetSpellInfo(14278)] = L["Subtlety"], -- Ghostly Strike [GetSpellInfo(31233)] = L["Assassination"], -- Find Weakness + [GetSpellInfo(13877)] = L["Combat"], -- Blade Flurry --Shaman + [GetSpellInfo(30807)] = L["Enhancement"], -- Unleashed Rage + [GetSpellInfo(16280)] = L["Enhancement"], -- Flurry + [GetSpellInfo(30823)] = L["Enhancement"], -- Shamanistic Rage [GetSpellInfo(16190)] = L["Restoration"], -- Mana Tide Totem [GetSpellInfo(32594)] = L["Restoration"], -- Earth Shield - [GetSpellInfo(30823)] = L["Enhancement"], -- Shamanistic Rage + [GetSpellInfo(29202)] = L["Restoration"], -- Healing Way -- WARLOCK [GetSpellInfo(19028)] = L["Demonology"], -- Soul Link @@ -122,11 +132,13 @@ local specSpells = { [GetSpellInfo(34861)] = L["Holy"], -- Circle of Healing [GetSpellInfo(15473)] = L["Shadow"], -- Shadowform [GetSpellInfo(34917)] = L["Shadow"], -- Vampiric Touch + [GetSpellInfo(15286)] = L["Shadow"], -- Vampiric Embrace -- ROGUE [GetSpellInfo(34413)] = L["Assassination"], -- Mutilate [GetSpellInfo(14177)] = L["Assassination"], -- Cold Blood [GetSpellInfo(13750)] = L["Combat"], -- Adrenaline Rush + [GetSpellInfo(13877)] = L["Combat"], -- Blade Flurry [GetSpellInfo(14185)] = L["Subtlety"], -- Preparation [GetSpellInfo(16511)] = L["Subtlety"], -- Hemorrhage [GetSpellInfo(36554)] = L["Subtlety"], -- Shadowstep @@ -135,6 +147,7 @@ local specSpells = { -- SHAMAN [GetSpellInfo(16166)] = L["Elemental"], -- Elemental Mastery + [GetSpellInfo(30706)] = L["Elemental"], -- Totem of Wrath [GetSpellInfo(30823)] = L["Enhancement"], -- Shamanistic Rage [GetSpellInfo(17364)] = L["Enhancement"], -- Stormstrike [GetSpellInfo(16190)] = L["Restoration"], -- Mana Tide Totem @@ -143,8 +156,10 @@ local specSpells = { -- WARLOCK [GetSpellInfo(30405)] = L["Affliction"], -- Unstable Affliction + [GetSpellInfo(18220)] = L["Affliction"], -- Dark Pact --[GetSpellInfo(30911)] = L["Affliction"], -- Siphon Life [GetSpellInfo(30414)] = L["Destruction"], -- Shadowfury + [GetSpellInfo(30912)] = L["Destruction"], -- Conflagrate -- WARRIOR [GetSpellInfo(30330)] = L["Arms"], -- Mortal Strike @@ -152,6 +167,7 @@ local specSpells = { [GetSpellInfo(30335)] = L["Fury"], -- Bloodthirst [GetSpellInfo(12809)] = L["Protection"], -- Concussion Blow [GetSpellInfo(30022)] = L["Protection"], -- Devastation + [GetSpellInfo(30356)] = L["Protection"], -- Shield Slam } function Gladdy:GetSpecSpells() return specSpells @@ -264,6 +280,16 @@ local importantAuras = { onDamage = true, spellID = 19503, }, + -- Scare Beast + [GetSpellInfo(14327)] = { + track = AURA_TYPE_DEBUFF, + duration = 8, + priority = 40, + onDamage = true, + fear = true, + magic = true, + spellID = 14327, + }, -- Silencing Shot [GetSpellInfo(34490)] = { track = AURA_TYPE_DEBUFF, @@ -446,6 +472,13 @@ local importantAuras = { priority = 10, spellID = 33206, }, + -- Fear Ward + [GetSpellInfo(6346)] = { + track = AURA_TYPE_BUFF, + duration = 180, + priority = 9, + spellID = 6346, + }, -- Sap @@ -796,7 +829,7 @@ local cooldownList = { ["MAGE"] = { [1953] = 15, -- Blink --[122] = 22, -- Frost Nova - --[12051] = 480, --Evocation + [12051] = 480, --Evocation [2139] = 24, -- Counterspell [45438] = { cd = 300, [L["Frost"]] = 240, }, -- Ice Block [12472] = { cd = 180, spec = L["Frost"], }, -- Icy Veins @@ -828,6 +861,8 @@ local cooldownList = { [10060] = { cd = 180, spec = L["Discipline"], }, -- Power Infusion [33206] = { cd = 120, spec = L["Discipline"], }, -- Pain Suppression [34433] = 300, -- Shadowfiend + [32379] = 12, -- Shadow Word: Death + [6346] = 180, -- Fear Ward }, -- Druid @@ -853,6 +888,7 @@ local cooldownList = { [16166] = { cd = 180, spec = L["Elemental"], }, -- Elemental Mastery [16188] = { cd = 180, spec = L["Restoration"], }, -- Natures Swiftness [16190] = { cd = 300, spec = L["Restoration"], }, -- Mana Tide Totem + [8177] = 15, -- Grounding Totem }, -- Paladin @@ -882,7 +918,8 @@ local cooldownList = { ["WARLOCK"] = { [17928] = 40, -- Howl of Terror [27223] = 120, -- Death Coil - --[19647] = { cd = 24 }, -- Spell Lock; how will I handle pet spells? + [19647] = 24, -- Spell Lock + [27277] = 8, -- Devour Magic [30414] = { cd = 20, spec = L["Destruction"], }, -- Shadowfury [17877] = { cd = 15, spec = L["Destruction"], }, -- Shadowburn [18708] = { cd = 900, spec = L["Demonology"], }, -- Feldom @@ -907,6 +944,7 @@ local cooldownList = { [18499] = 30, -- Berserker Rage --[2565] = 60, -- Shield Block [12292] = { cd = 180, spec = L["Arms"], }, -- Death Wish + [20252] = { cd = 30, [L["Arms"]] = 20 }, -- Intercept [12975] = { cd = 180, spec = L["Protection"], }, -- Last Stand [12809] = { cd = 30, spec = L["Protection"], }, -- Concussion Blow @@ -915,6 +953,7 @@ local cooldownList = { -- Hunter ["HUNTER"] = { [19503] = 30, -- Scatter Shot + [14327] = 30, -- Scare Beast [19263] = 300, -- Deterrence; not on BM but can't do 2 specs [14311] = { cd = 30, -- Freezing Trap sharedCD = { @@ -938,6 +977,9 @@ local cooldownList = { [19386] = { cd = 60, spec = L["Survival"], }, -- Wyvern Sting [19577] = { cd = 60, spec = L["Beast Mastery"], }, -- Intimidation [38373] = { cd = 120, spec = L["Beast Mastery"], }, -- The Beast Within + [5384] = 30, -- Feign Death + [3034] = 15, -- Viper Sting + [1543] = 20, -- Flare }, -- Rogue From 59da6f34c6f00bc769f30b663c00fb3dea608b8b Mon Sep 17 00:00:00 2001 From: Sumsebrum Date: Tue, 11 Jan 2022 00:29:17 +0100 Subject: [PATCH 21/65] movable frames --- Constants.lua | 55 +++++ Frame.lua | 271 ++++++++++++++++++------ Gladdy.lua | 88 ++------ Modules/BuffsDebuffs.lua | 396 +++++++++++++++++------------------- Modules/Castbar.lua | 82 ++++---- Modules/Classicon.lua | 46 +++-- Modules/CombatIndicator.lua | 50 ++--- Modules/Cooldowns.lua | 193 +++++++++--------- Modules/Diminishings.lua | 94 +++++---- Modules/ExportImport.lua | 19 +- Modules/Pets.lua | 36 +++- Modules/Racial.lua | 50 +++-- Modules/Trinket.lua | 55 +++-- Options.lua | 54 +++-- 14 files changed, 881 insertions(+), 608 deletions(-) diff --git a/Constants.lua b/Constants.lua index 1e431b8..7efeeee 100644 --- a/Constants.lua +++ b/Constants.lua @@ -1180,3 +1180,58 @@ function Gladdy:GetArenaTimer() end end +Gladdy.legacy = { + castBarPos = "LEFT", + buffsCooldownPos = "TOP", + buffsBuffsCooldownPos = "BOTTOM", + classIconPos = "LEFT", + ciAnchor = "healthBar", + ciPos = "TOP", + cooldownYPos = "TOP", + cooldownXPos = "LEFT", + drCooldownPos = "RIGHT", + racialAnchor = "trinket", + racialPos = "RIGHT", + trinketPos = "RIGHT", + padding = 1, + growUp = false, +} + +Gladdy.newDefaults = { + ["bottomMargin"] = 94.99996948242188, + ["newLayout"] = true, + Pets = { + ["petYOffset"] = -81.99993896484375, + ["petXOffset"] = 181, + }, + ClassIcon = { + ["classIconXOffset"] = -74.90008544921875, + }, + Racial = { + ["racialXOffset"] = 255.9000244140625, + }, + Trinket = { + ["trinketXOffset"] = 182, + }, + ["Combat Indicator"] = { + ["ciXOffset"] = 79.99993896484375, + ["ciYOffset"] = -10.99993896484375, + }, + Cooldowns = { + ["cooldownYOffset"] = 31, + }, + ["Buffs and Debuffs"] = { + ["buffsBuffsXOffset"] = 29, + ["buffsBuffsYOffset"] = -82.99993896484375, + ["buffsXOffset"] = 29, + ["buffsYOffset"] = 62.00006103515625, + }, + Diminishings = { + ["drXOffset"] = 329.7999877929688, + ["drYOffset"] = -22.5, + }, + ["Cast Bar"] = { + ["castBarXOffset"] = -235.900146484375, + ["castBarYOffset"] = -30.5, + }, +} \ No newline at end of file diff --git a/Frame.lua b/Frame.lua index b3d1e78..e6d58e0 100644 --- a/Frame.lua +++ b/Frame.lua @@ -1,6 +1,9 @@ local CreateFrame = CreateFrame local UIParent = UIParent local InCombatLockdown = InCombatLockdown +local math_abs = math.abs +local pairs = pairs +local LibStub = LibStub local Gladdy = LibStub("Gladdy") local L = Gladdy.L @@ -45,7 +48,7 @@ function Gladdy:CreateFrame() self.frame:SetClampedToScreen(true) self.frame:EnableMouse(false) self.frame:SetMovable(true) - self.frame:RegisterForDrag("LeftButton") + --self.frame:RegisterForDrag("LeftButton") self.frame:SetScript("OnDragStart", function(f) if (not InCombatLockdown() and not self.db.locked) then @@ -126,72 +129,24 @@ function Gladdy:UpdateFrame() local highlightBorderSize = (self.db.highlightInset and 0 or self.db.highlightBorderSize * 2) local powerBarHeight = self.db.powerBarEnabled and (self.db.powerBarHeight + 1) or 0 - local leftSize = 0 - local rightSize = 0 - --Trinket + Racial - if self.db.trinketEnabled and self.db.trinketPos == "LEFT" then - leftSize = leftSize + self.db.trinketSize * self.db.trinketWidthFactor + self.db.padding - if self.db.racialEnabled and self.db.racialAnchor == "trinket" and self.db.racialPos == "LEFT" then - leftSize = leftSize + self.db.racialSize * self.db.racialWidthFactor + self.db.padding - end - end - if self.db.trinketEnabled and self.db.trinketPos == "RIGHT" then - rightSize = rightSize + self.db.trinketSize * self.db.trinketWidthFactor + self.db.padding - if self.db.racialEnabled and self.db.racialAnchor == "trinket" and self.db.racialPos == "RIGHT" then - rightSize = rightSize + self.db.racialSize * self.db.racialWidthFactor + self.db.padding - end - end - --ClassIcon - if self.db.classIconPos == "LEFT" then - leftSize = leftSize + self.db.classIconSize * self.db.classIconWidthFactor + self.db.padding - else - rightSize = rightSize + self.db.classIconSize * self.db.classIconWidthFactor + self.db.padding - end - --Highlight - if not self.db.highlightInset then - leftSize = leftSize + self.db.highlightBorderSize - rightSize = rightSize + self.db.highlightBorderSize - end local margin = powerBarHeight - local width = self.db.barWidth + leftSize + rightSize local height = (self.db.healthBarHeight + powerBarHeight) * teamSize + (self.db.highlightInset and 0 or self.db.highlightBorderSize * 2 * teamSize) + self.db.bottomMargin * (teamSize - 1) -- Highlight margin = margin + highlightBorderSize - - if (self.db.cooldownYPos == "TOP" or self.db.cooldownYPos == "BOTTOM") and self.db.cooldown then - margin = margin + self.db.cooldownSize - height = height + self.db.cooldownSize * (teamSize - 1) - end - if (self.db.buffsCooldownPos == "TOP" or self.db.buffsCooldownPos == "BOTTOM") and self.db.buffsEnabled then - margin = margin + self.db.buffsIconSize - height = height + self.db.buffsIconSize * (teamSize - 1) - end - if (self.db.buffsBuffsCooldownPos == "TOP" or self.db.buffsBuffsCooldownPos == "BOTTOM") and self.db.buffsEnabled then - margin = margin + self.db.buffsBuffsIconSize - height = height + self.db.buffsBuffsIconSize * (teamSize - 1) - end - if self.db.buffsCooldownPos == "TOP" and self.db.cooldownYPos == "TOP" and self.db.cooldown and self.db.buffsEnabled then - margin = margin + 1 - height = height + (teamSize - 1) - end - if self.db.buffsCooldownPos == "BOTTOM" and self.db.cooldownYPos == "BOTTOM" and self.db.cooldown and self.db.buffsEnabled then - margin = margin + 1 - height = height + (teamSize - 1) - end + margin, height = Gladdy:LegacyPositioning(margin, height, teamSize) -- GrowDirection if (self.db.growDirection == "LEFT" or self.db.growDirection == "RIGHT") then - width = self.db.barWidth * teamSize + (leftSize + rightSize) * teamSize + self.db.bottomMargin * (teamSize - 1) height = self.db.healthBarHeight + powerBarHeight end self.frame:SetScale(self.db.frameScale) self:PixelPerfectScale(false) - self.frame:SetWidth(width) + self.frame:SetWidth(self.db.barWidth + highlightBorderSize) self.frame:SetHeight(height) self.frame:ClearAllPoints() self.frame.background:SetBackdropColor(self.db.backgroundColor.r, self.db.backgroundColor.g, self.db.backgroundColor.b, self.db.backgroundColor.a) @@ -209,14 +164,14 @@ function Gladdy:UpdateFrame() end --Anchor - self.anchor:SetWidth(width) + self.anchor:SetWidth(self.db.barWidth * 2 + highlightBorderSize) self.anchor:ClearAllPoints() if (self.db.growDirection == "TOP") then - self.anchor:SetPoint("TOPLEFT", self.frame, "BOTTOMLEFT") + self.anchor:SetPoint("TOP", self.frame, "BOTTOM") elseif self.growDirection == "BOTTOM" or self.growDirection == "RIGHT" then - self.anchor:SetPoint("BOTTOMLEFT", self.frame, "TOPLEFT") + self.anchor:SetPoint("BOTTOM", self.frame, "TOP") else - self.anchor:SetPoint("BOTTOMRIGHT", self.frame, "TOPRIGHT") + self.anchor:SetPoint("BOTTOM", self.frame, "TOP") end if (self.db.locked) then @@ -236,7 +191,7 @@ function Gladdy:UpdateFrame() button.secure:ClearAllPoints() if (self.db.growDirection == "TOP") then if (i == 1) then - button:SetPoint("BOTTOMLEFT", self.frame, "BOTTOMLEFT", leftSize, powerBarHeight) + button:SetPoint("BOTTOMLEFT", self.frame, "BOTTOMLEFT", 0, powerBarHeight) button.secure:SetPoint("TOPLEFT", button.healthBar, "TOPLEFT") else button:SetPoint("BOTTOMLEFT", self.buttons["arena" .. (i - 1)], "TOPLEFT", 0, margin + self.db.bottomMargin) @@ -244,7 +199,7 @@ function Gladdy:UpdateFrame() end elseif (self.db.growDirection == "BOTTOM") then if (i == 1) then - button:SetPoint("TOPLEFT", self.frame, "TOPLEFT", leftSize, 0) + button:SetPoint("TOPLEFT", self.frame, "TOPLEFT", 0, 0) button.secure:SetPoint("TOPLEFT", button.healthBar, "TOPLEFT") else button:SetPoint("TOPLEFT", self.buttons["arena" .. (i - 1)], "BOTTOMLEFT", 0, -margin - self.db.bottomMargin) @@ -252,18 +207,18 @@ function Gladdy:UpdateFrame() end elseif (self.db.growDirection == "LEFT") then if (i == 1) then - button:SetPoint("TOPRIGHT", self.frame, "TOPRIGHT", -rightSize, 0) + button:SetPoint("TOPRIGHT", self.frame, "TOPRIGHT", -0, 0) button.secure:SetPoint("TOPLEFT", button.healthBar, "TOPLEFT") else - button:SetPoint("TOPRIGHT", self.buttons["arena" .. (i - 1)], "TOPLEFT", -rightSize - leftSize - self.db.bottomMargin, 0) + button:SetPoint("TOPRIGHT", self.buttons["arena" .. (i - 1)], "TOPLEFT", - self.db.bottomMargin, 0) button.secure:SetPoint("TOPLEFT", button.healthBar, "TOPLEFT") end elseif (self.db.growDirection == "RIGHT") then if (i == 1) then - button:SetPoint("TOPLEFT", self.frame, "TOPLEFT", leftSize, 0) + button:SetPoint("TOPLEFT", self.frame, "TOPLEFT", 0, 0) button.secure:SetPoint("TOPLEFT", button.healthBar, "TOPLEFT") else - button:SetPoint("TOPLEFT", self.buttons["arena" .. (i - 1)], "TOPRIGHT", leftSize + rightSize + self.db.bottomMargin, 0) + button:SetPoint("TOPLEFT", self.buttons["arena" .. (i - 1)], "TOPRIGHT", self.db.bottomMargin, 0) button.secure:SetPoint("TOPLEFT", button.healthBar, "TOPLEFT") end end @@ -287,6 +242,27 @@ function Gladdy:UpdateFrame() elseif Gladdy.db.hideBlizzard == "never" then Gladdy:BlizzArenaSetAlpha(1) end + if (not Gladdy.db.newLayout) then + Gladdy.db.newLayout = true + --get margin + local arena1Bottom + local arena2Top + if (self.db.growDirection == "BOTTOM") then + arena1Bottom = self.buttons["arena1"].secure:GetBottom() + arena2Top = self.buttons["arena2"].secure:GetTop() + elseif (self.db.growDirection == "TOP") then + arena1Bottom = self.buttons["arena1"].secure:GetTop() + arena2Top = self.buttons["arena2"].secure:GetBottom() + elseif (self.db.growDirection == "LEFT") then + arena1Bottom = self.buttons["arena1"].secure:GetLeft() + arena2Top = self.buttons["arena2"].secure:GetRight() + elseif (self.db.growDirection == "RIGHT") then + arena1Bottom = self.buttons["arena1"].secure:GetRight() + arena2Top = self.buttons["arena2"].secure:GetLeft() + end + Gladdy.db.bottomMargin = math_abs(arena1Bottom - arena2Top) + Gladdy:UpdateFrame() + end end function Gladdy:HideFrame() @@ -381,6 +357,179 @@ function Gladdy:CreateButton(i) self:ResetButton("arena" .. i) end + + +function Gladdy:SetPosition(frame, unit, xOffsetDB, yOffsetDB, newLayout, module) + local button = self.buttons[unit] + if not button or not frame or not xOffsetDB or not yOffsetDB then + return + end + + if (not newLayout) then + --Gladdy:Debug("INFO", name, "old X/Y:", frame:GetCenter()) + local xOffset, yOffset = frame:GetLeft(), frame:GetTop() + local x,y = button.healthBar:GetLeft(), button.healthBar:GetTop() + local newXOffset = math_abs(x - xOffset) * (x > xOffset and -1 or 1) + local newYOffset = math_abs(y - yOffset) * (y > yOffset and -1 or 1) + frame:ClearAllPoints() + frame:SetPoint("TOPLEFT", button.healthBar, "TOPLEFT", newXOffset, newYOffset) + --Gladdy:Debug("INFO", name, "new X/Y:", frame:GetCenter()) + if unit == "arena1" then + Gladdy.db[xOffsetDB] = newXOffset + Gladdy.db[yOffsetDB] = newYOffset + LibStub("AceConfigRegistry-3.0"):NotifyChange("Gladdy") + end + else + frame:ClearAllPoints() + frame:SetPoint("TOPLEFT", button.healthBar, "TOPLEFT", Gladdy.db[xOffsetDB], Gladdy.db[yOffsetDB]) + end + if (self.newDefaults[module.name]) then + for k,v in pairs(self.newDefaults[module.name]) do + module.defaults[k] = v + end + end +end + +function Gladdy:CreateMover(frame, xConfig, yConfig, name, points, width, height, xOffset, yOffset, activated) + if not frame.mover then + frame:EnableMouse(false) + frame:SetMovable(true) + frame.mover = CreateFrame("Frame", nil, frame, BackdropTemplateMixin and "BackdropTemplate") + frame.mover:SetFrameStrata("DIALOG") + frame.mover:SetPoint(points[1], frame, points[2], xOffset or 0, yOffset or 0) + frame.mover:SetHeight(height or frame:GetHeight()) + frame.mover:SetWidth(width or frame:GetWidth()) + + local backdrop = { + bgFile = "Interface/Tooltips/UI-Tooltip-Background", + edgeFile = "", + tile = true, tileSize = 16, edgeSize = 10, + insets = {left = 0, right = 0, top = 0, bottom = 0} + } + frame.mover:SetBackdrop(backdrop) + frame.mover:SetBackdropColor(0,1,0,0.5) + frame.mover.border = CreateFrame("Frame", nil, frame.mover, BackdropTemplateMixin and "BackdropTemplate") + frame.mover.border:SetBackdrop({ edgeFile = Gladdy:SMFetch("border", "highlightBorderStyle"), edgeSize = 2 }) + frame.mover.border:SetAllPoints(frame.mover) + frame.mover.border:SetBackdropBorderColor(0,1,0,1) + + frame.mover.text = frame.mover.border:CreateFontString(nil, "ARTWORK", "GameFontHighlightSmall") + frame.mover.text:SetText(name) + frame.mover.text:SetPoint("CENTER") + + frame.mover:SetMovable(true) + frame.mover:EnableMouse(true) + + frame.mover:SetScript("OnMouseDown", function(self) + self.point = { frame:GetPoint() } + self.start = { frame:GetCenter() } + frame:StartMoving() + self:StartMoving() + end) + frame.mover:SetScript("OnMouseUp", function(self) + frame:StopMovingOrSizing() + self:StopMovingOrSizing() + self.stop = { frame:GetCenter() } + local diffX = math_abs(self.start[1] - self.stop[1]) + diffX = self.start[1] > self.stop[1] and -diffX or diffX + local diffY = math_abs(self.start[2] - self.stop[2]) + diffY = self.start[2] > self.stop[2] and -diffY or diffY + frame:ClearAllPoints() + frame:SetPoint(self.point[1], self.point[2], self.point[3], self.point[4] + diffX, self.point[5] + diffY) + Gladdy.db[xConfig] = self.point[4] + diffX + Gladdy.db[yConfig] = self.point[5] + diffY + LibStub("AceConfigRegistry-3.0"):NotifyChange("Gladdy") + Gladdy:UpdateFrame() + end) + else + frame.mover:ClearAllPoints() + frame.mover:SetPoint(points[1], frame, points[2], xOffset or 0, yOffset or 0) + frame.mover:SetHeight(height or frame:GetHeight()) + frame.mover:SetWidth(width or frame:GetWidth()) + end + if self.frame and self.frame.testing and self.db.showMover then + frame.mover:Show() + else + frame.mover:Hide() + end +end + +--------------------------- + +-- LAGACY SUPPORT + +--------------------------- + +function Gladdy:LegacyPositioning(margin, height, teamSize) + if not Gladdy.db.newLayout then + for k,v in pairs(Gladdy.legacy) do + if Gladdy.db[k] == nil then + Gladdy:Debug("INFO", "Gladdy:LegacyPositioning write", k,v) + Gladdy.db[k] = v + else + Gladdy:Debug("INFO", "Gladdy:LegacyPositioning found", k,v) + end + end + if (self.db.cooldownYPos == "TOP" or self.db.cooldownYPos == "BOTTOM") and self.db.cooldown then + margin = margin + self.db.cooldownSize + height = height + self.db.cooldownSize * (teamSize - 1) + end + if (self.db.buffsCooldownPos == "TOP" or self.db.buffsCooldownPos == "BOTTOM") and self.db.buffsEnabled then + margin = margin + self.db.buffsIconSize + height = height + self.db.buffsIconSize * (teamSize - 1) + end + if (self.db.buffsBuffsCooldownPos == "TOP" or self.db.buffsBuffsCooldownPos == "BOTTOM") and self.db.buffsEnabled then + margin = margin + self.db.buffsBuffsIconSize + height = height + self.db.buffsBuffsIconSize * (teamSize - 1) + end + if self.db.buffsCooldownPos == "TOP" and self.db.cooldownYPos == "TOP" and self.db.cooldown and self.db.buffsEnabled then + margin = margin + 1 + height = height + (teamSize - 1) + end + if self.db.buffsCooldownPos == "BOTTOM" and self.db.cooldownYPos == "BOTTOM" and self.db.cooldown and self.db.buffsEnabled then + margin = margin + 1 + height = height + (teamSize - 1) + end + end + return margin, height +end + +function Gladdy:PositionButton(button, i, leftSize, rightSize, powerBarHeight, margin) + if (self.db.growDirection == "TOP") then + if (i == 1) then + button:SetPoint("BOTTOMLEFT", self.frame, "BOTTOMLEFT", leftSize, powerBarHeight) + button.secure:SetPoint("TOPLEFT", button.healthBar, "TOPLEFT") + else + button:SetPoint("BOTTOMLEFT", self.buttons["arena" .. (i - 1)], "TOPLEFT", 0, margin + self.db.bottomMargin) + button.secure:SetPoint("TOPLEFT", button.healthBar, "TOPLEFT") + end + elseif (self.db.growDirection == "BOTTOM") then + if (i == 1) then + button:SetPoint("TOPLEFT", self.frame, "TOPLEFT", leftSize, 0) + button.secure:SetPoint("TOPLEFT", button.healthBar, "TOPLEFT") + else + button:SetPoint("TOPLEFT", self.buttons["arena" .. (i - 1)], "BOTTOMLEFT", 0, -margin - self.db.bottomMargin) + button.secure:SetPoint("TOPLEFT", button.healthBar, "TOPLEFT") + end + elseif (self.db.growDirection == "LEFT") then + if (i == 1) then + button:SetPoint("TOPRIGHT", self.frame, "TOPRIGHT", -rightSize, 0) + button.secure:SetPoint("TOPLEFT", button.healthBar, "TOPLEFT") + else + button:SetPoint("TOPRIGHT", self.buttons["arena" .. (i - 1)], "TOPLEFT", -rightSize - leftSize - self.db.bottomMargin, 0) + button.secure:SetPoint("TOPLEFT", button.healthBar, "TOPLEFT") + end + elseif (self.db.growDirection == "RIGHT") then + if (i == 1) then + button:SetPoint("TOPLEFT", self.frame, "TOPLEFT", leftSize, 0) + button.secure:SetPoint("TOPLEFT", button.healthBar, "TOPLEFT") + else + button:SetPoint("TOPLEFT", self.buttons["arena" .. (i - 1)], "TOPRIGHT", leftSize + rightSize + self.db.bottomMargin, 0) + button.secure:SetPoint("TOPLEFT", button.healthBar, "TOPLEFT") + end + end +end + function Gladdy:GetAnchor(unit, position) local anchor = "healthBar" if Gladdy.db.classIconPos == position then diff --git a/Gladdy.lua b/Gladdy.lua index f84824f..d117a96 100644 --- a/Gladdy.lua +++ b/Gladdy.lua @@ -6,7 +6,6 @@ local pairs = pairs local tinsert = table.insert local tsort = table.sort local str_lower = string.lower -local math_abs = math.abs local GetTime = GetTime local GetPhysicalScreenSize = GetPhysicalScreenSize local InCombatLockdown = InCombatLockdown @@ -97,6 +96,7 @@ end Gladdy.events = CreateFrame("Frame") Gladdy.events.registered = {} Gladdy.events:RegisterEvent("PLAYER_LOGIN") +Gladdy.events:RegisterEvent("PLAYER_LOGOUT") Gladdy.events:RegisterEvent("CVAR_UPDATE") hooksecurefunc("VideoOptionsFrameOkay_OnClick", function(self, button, down, apply) if (self:GetName() == "VideoOptionsFrameApply") then @@ -111,6 +111,8 @@ Gladdy.events:SetScript("OnEvent", function(self, event, ...) if (str_lower(select(1, ...)) == "uiscale") then Gladdy:PixelPerfectScale(true) end + elseif (event == "PLAYER_LOGOUT") then + Gladdy:DeleteUnknownOptions(Gladdy.db, Gladdy.defaults.profile) else local func = self.registered[event] @@ -202,68 +204,6 @@ function Gladdy:NewModule(name, priority, defaults) return module end -function Gladdy:CreateMover(frame, xConfig, yConfig, name, points, width, height, xOffset, yOffset) - if not frame.mover then - frame.mover = CreateFrame("Frame", nil, frame, BackdropTemplateMixin and "BackdropTemplate") - frame.mover:SetFrameStrata("DIALOG") - frame.mover:SetPoint(points[1], frame, points[2], xOffset or 0, yOffset or 0) - frame.mover:SetHeight(height or frame:GetHeight()) - frame.mover:SetWidth(width or frame:GetWidth()) - - local backdrop = { - bgFile = "Interface/Tooltips/UI-Tooltip-Background", - edgeFile = "", - tile = true, tileSize = 16, edgeSize = 10, - insets = {left = 0, right = 0, top = 0, bottom = 0} - } - frame.mover:SetBackdrop(backdrop) - frame.mover:SetBackdropColor(0,1,0,0.5) - frame.mover.border = CreateFrame("Frame", nil, frame.mover, BackdropTemplateMixin and "BackdropTemplate") - frame.mover.border:SetBackdrop({ edgeFile = Gladdy:SMFetch("border", "highlightBorderStyle"), edgeSize = 2 }) - frame.mover.border:SetAllPoints(frame.mover) - frame.mover.border:SetBackdropBorderColor(0,1,0,1) - - frame.mover.text = frame.mover.border:CreateFontString(nil, "ARTWORK", "GameFontHighlightSmall") - frame.mover.text:SetText(name) - frame.mover.text:SetPoint("CENTER") - - frame.mover:SetMovable(true) - frame.mover:EnableMouse(true) - - frame.mover:SetScript("OnMouseDown", function(self) - self.point = { frame:GetPoint() } - self.start = { frame:GetCenter() } - frame:StartMoving() - self:StartMoving() - end) - frame.mover:SetScript("OnMouseUp", function(self) - frame:StopMovingOrSizing() - self:StopMovingOrSizing() - self.stop = { frame:GetCenter() } - local diffX = math_abs(self.start[1] - self.stop[1]) - diffX = self.start[1] > self.stop[1] and -diffX or diffX - local diffY = math_abs(self.start[2] - self.stop[2]) - diffY = self.start[2] > self.stop[2] and -diffY or diffY - frame:ClearAllPoints() - frame:SetPoint(self.point[1], self.point[2], self.point[3], self.point[4] + diffX, self.point[5] + diffY) - Gladdy.db[xConfig] = self.point[4] + diffX - Gladdy.db[yConfig] = self.point[5] + diffY - LibStub("AceConfigRegistry-3.0"):NotifyChange("Gladdy") - Gladdy:UpdateFrame() - end) - else - frame.mover:ClearAllPoints() - frame.mover:SetPoint(points[1], frame, points[2], xOffset or 0, yOffset or 0) - frame.mover:SetHeight(height or frame:GetHeight()) - frame.mover:SetWidth(width or frame:GetWidth()) - end - if self.frame and self.frame.testing then - frame.mover:Show() - else - frame.mover:Hide() - end -end - --------------------------- -- INIT @@ -310,7 +250,7 @@ function Gladdy:OnInitialize() self.dbi = LibStub("AceDB-3.0"):New("GladdyXZ", self.defaults) self.dbi.RegisterCallback(self, "OnProfileChanged", "OnProfileChanged") self.dbi.RegisterCallback(self, "OnProfileCopied", "OnProfileChanged") - self.dbi.RegisterCallback(self, "OnProfileReset", "OnProfileChanged") + self.dbi.RegisterCallback(self, "OnProfileReset", "OnProfileReset") self.db = self.dbi.profile self.LSM = LibStub("LibSharedMedia-3.0") @@ -347,18 +287,32 @@ function Gladdy:OnInitialize() for _, module in self:IterModules() do self:Call(module, "Initialize") -- B.E > A.E :D end - self:DeleteUnknownOptions(self.db, self.defaults.profile) if Gladdy.db.hideBlizzard == "always" then Gladdy:BlizzArenaSetAlpha(0) end + if not self.db.newLayout then + self:ToggleFrame(3) + self:HideFrame() + end +end + +function Gladdy:OnProfileReset() + self.db = self.dbi.profile + Gladdy:Debug("INFO", "OnProfileReset") + self:HideFrame() + self:ToggleFrame(3) + Gladdy.options.args.lock.name = Gladdy.db.locked and L["Unlock frame"] or L["Lock frame"] + Gladdy.options.args.showMover.name = Gladdy.db.showMover and L["Hide Mover"] or L["Show Mover"] + LibStub("AceConfigRegistry-3.0"):NotifyChange("Gladdy") end function Gladdy:OnProfileChanged() self.db = self.dbi.profile - self:DeleteUnknownOptions(self.db, self.defaults.profile) - self:HideFrame() self:ToggleFrame(3) + Gladdy.options.args.lock.name = Gladdy.db.locked and L["Unlock frame"] or L["Lock frame"] + Gladdy.options.args.showMover.name = Gladdy.db.showMover and L["Hide Mover"] or L["Show Mover"] + LibStub("AceConfigRegistry-3.0"):NotifyChange("Gladdy") end function Gladdy:OnEnable() diff --git a/Modules/BuffsDebuffs.lua b/Modules/BuffsDebuffs.lua index 0590c9c..81ff806 100644 --- a/Modules/BuffsDebuffs.lua +++ b/Modules/BuffsDebuffs.lua @@ -31,11 +31,9 @@ local BuffsDebuffs = Gladdy:NewModule("Buffs and Debuffs", nil, { buffsFontScale = 1, buffsFontColor = {r = 1, g = 1, b = 0, a = 1}, buffsDynamicColor = true, - buffsCooldownPos = "TOP", buffsCooldownGrowDirection = "RIGHT", buffsXOffset = 0, buffsYOffset = 0, - buffsBuffsCooldownPos = "BOTTOM", buffsBuffsCooldownGrowDirection = "RIGHT", buffsBuffsXOffset = 0, buffsBuffsYOffset = 0, @@ -51,7 +49,7 @@ local BuffsDebuffs = Gladdy:NewModule("Buffs and Debuffs", nil, { buffsBorderColorImmune = Gladdy:GetAuraTypeColor()["immune"], buffsBorderColorDisease = Gladdy:GetAuraTypeColor()["disease"], buffsBorderColorForm = Gladdy:GetAuraTypeColor()["form"], - buffsBorderColorAura = Gladdy:GetAuraTypeColor()["aura"] + buffsBorderColorAura = Gladdy:GetAuraTypeColor()["aura"], }) local spellSchoolToOptionValueTable @@ -233,18 +231,15 @@ end --------------------------- function BuffsDebuffs:CreateFrame(unit) - local verticalMargin = (Gladdy.db.highlightInset and 0 or Gladdy.db.highlightBorderSize) + Gladdy.db.padding local debuffFrame = CreateFrame("Frame", "GladdyDebuffs" .. unit, Gladdy.buttons[unit]) debuffFrame:SetMovable(true) debuffFrame:SetHeight(Gladdy.db.buffsIconSize) debuffFrame:SetWidth(1) - debuffFrame:SetPoint("BOTTOMLEFT", Gladdy.buttons[unit].healthBar, "TOPLEFT", 0, verticalMargin) debuffFrame.unit = unit local buffFrame = CreateFrame("Frame", "GladdyBuffs" .. unit, Gladdy.buttons[unit]) buffFrame:SetMovable(true) buffFrame:SetHeight(Gladdy.db.buffsIconSize) buffFrame:SetWidth(1) - buffFrame:SetPoint("BOTTOMLEFT", Gladdy.buttons[unit].healthBar, "TOPLEFT", 0, verticalMargin) buffFrame.unit = unit self.frames[unit] = {} self.frames[unit].buffFrame = buffFrame @@ -285,156 +280,30 @@ local function styleIcon(aura, auraType) end function BuffsDebuffs:UpdateFrame(unit) - self.frames[unit].debuffFrame:SetHeight(Gladdy.db.buffsIconSize) - self.frames[unit].debuffFrame:ClearAllPoints() - --DEBUFFS - local powerBarHeight = Gladdy.db.powerBarEnabled and (Gladdy.db.powerBarHeight + 1) or 0 - local horizontalMargin = (Gladdy.db.highlightInset and 0 or Gladdy.db.highlightBorderSize) - local verticalMargin = -(Gladdy.db.powerBarHeight)/2 - if Gladdy.db.buffsCooldownPos == "TOP" then - verticalMargin = horizontalMargin + 1 - if Gladdy.db.cooldownYPos == "TOP" and Gladdy.db.cooldown then - verticalMargin = verticalMargin + Gladdy.db.cooldownSize - end - if Gladdy.db.buffsCooldownGrowDirection == "LEFT" then - self.frames[unit].debuffFrame:SetPoint("BOTTOMLEFT", Gladdy.buttons[unit].healthBar, "TOPRIGHT", Gladdy.db.buffsXOffset, Gladdy.db.buffsYOffset + verticalMargin) - else - self.frames[unit].debuffFrame:SetPoint("BOTTOMRIGHT", Gladdy.buttons[unit].healthBar, "TOPLEFT", Gladdy.db.buffsXOffset, Gladdy.db.buffsYOffset + verticalMargin) - end - elseif Gladdy.db.buffsCooldownPos == "BOTTOM" then - verticalMargin = horizontalMargin + 1 - if Gladdy.db.cooldownYPos == "BOTTOM" and Gladdy.db.cooldown then - verticalMargin = verticalMargin + Gladdy.db.cooldownSize - end - if Gladdy.db.buffsCooldownGrowDirection == "LEFT" then - self.frames[unit].debuffFrame:SetPoint("TOPLEFT", Gladdy.buttons[unit].healthBar, "BOTTOMRIGHT", Gladdy.db.buffsXOffset, Gladdy.db.buffsYOffset -verticalMargin - powerBarHeight) - else - self.frames[unit].debuffFrame:SetPoint("TOPRIGHT", Gladdy.buttons[unit].healthBar, "BOTTOMLEFT", Gladdy.db.buffsXOffset, Gladdy.db.buffsYOffset -verticalMargin - powerBarHeight) - end - elseif Gladdy.db.buffsCooldownPos == "LEFT" then - horizontalMargin = horizontalMargin - 1 + Gladdy.db.padding - local anchor = Gladdy:GetAnchor(unit, "LEFT") - if anchor == Gladdy.buttons[unit].healthBar then - self.frames[unit].debuffFrame:SetPoint("RIGHT", anchor, "LEFT", -horizontalMargin + Gladdy.db.buffsXOffset, Gladdy.db.buffsYOffset) - else - self.frames[unit].debuffFrame:SetPoint("RIGHT", anchor, "LEFT", -Gladdy.db.padding + Gladdy.db.buffsXOffset, Gladdy.db.buffsYOffset) - end - - elseif Gladdy.db.buffsCooldownPos == "RIGHT" then - horizontalMargin = horizontalMargin - 1 + Gladdy.db.padding - local anchor = Gladdy:GetAnchor(unit, "RIGHT") - if anchor == Gladdy.buttons[unit].healthBar then - self.frames[unit].debuffFrame:SetPoint("LEFT", anchor, "RIGHT", horizontalMargin + Gladdy.db.buffsXOffset, Gladdy.db.buffsYOffset) - else - self.frames[unit].debuffFrame:SetPoint("LEFT", anchor, "RIGHT", horizontalMargin + Gladdy.db.buffsXOffset, Gladdy.db.buffsYOffset) - end - end + self.frames[unit].debuffFrame:SetHeight(Gladdy.db.buffsIconSize) + Gladdy:SetPosition(self.frames[unit].debuffFrame, unit, "buffsXOffset", "buffsYOffset", BuffsDebuffs:LegacySetPositionDebuffs(unit), BuffsDebuffs) if (unit == "arena1") then Gladdy:CreateMover(self.frames[unit].debuffFrame, "buffsXOffset", "buffsYOffset", L["Debuffs"], - Gladdy.db.buffsCooldownGrowDirection == "LEFT" and {"TOPRIGHT", "TOPRIGHT"} or {"TOPLEFT", "TOPLEFT"}, + {"TOPRIGHT", "TOPRIGHT"}, Gladdy.db.buffsIconSize * Gladdy.db.buffsWidthFactor, - Gladdy.db.buffsIconSize, Gladdy.db.buffsCooldownGrowDirection == "LEFT"and -1 or 1, 0) + Gladdy.db.buffsIconSize, 0, 0) + if not Gladdy.db.buffsEnabled then + self.frames[unit].debuffFrame.mover:Hide() + end end --BUFFS self.frames[unit].buffFrame:SetHeight(Gladdy.db.buffsBuffsIconSize) - self.frames[unit].buffFrame:ClearAllPoints() - horizontalMargin = (Gladdy.db.highlightInset and 0 or Gladdy.db.highlightBorderSize) - verticalMargin = -(Gladdy.db.powerBarHeight)/2 - if Gladdy.db.buffsBuffsCooldownPos == "TOP" then - verticalMargin = horizontalMargin + 1 - if Gladdy.db.cooldownYPos == "TOP" and Gladdy.db.cooldown then - verticalMargin = verticalMargin + Gladdy.db.cooldownSize - end - if Gladdy.db.buffsBuffsCooldownGrowDirection == "LEFT" then - self.frames[unit].buffFrame:SetPoint("BOTTOMLEFT", Gladdy.buttons[unit].healthBar, "TOPRIGHT", Gladdy.db.buffsXOffset, Gladdy.db.buffsBuffsYOffset + verticalMargin) - else - self.frames[unit].buffFrame:SetPoint("BOTTOMRIGHT", Gladdy.buttons[unit].healthBar, "TOPLEFT", Gladdy.db.buffsXOffset, Gladdy.db.buffsBuffsYOffset + verticalMargin) - end - elseif Gladdy.db.buffsBuffsCooldownPos == "BOTTOM" then - verticalMargin = horizontalMargin + 1 - if Gladdy.db.cooldownYPos == "BOTTOM" and Gladdy.db.cooldown then - verticalMargin = verticalMargin + Gladdy.db.cooldownSize - end - if Gladdy.db.buffsBuffsCooldownGrowDirection == "LEFT" then - self.frames[unit].buffFrame:SetPoint("TOPLEFT", Gladdy.buttons[unit].healthBar, "BOTTOMRIGHT", Gladdy.db.buffsBuffsXOffset, Gladdy.db.buffsBuffsYOffset -verticalMargin - powerBarHeight) - else - self.frames[unit].buffFrame:SetPoint("TOPRIGHT", Gladdy.buttons[unit].healthBar, "BOTTOMLEFT", Gladdy.db.buffsBuffsXOffset, Gladdy.db.buffsBuffsYOffset -verticalMargin - powerBarHeight) - end - elseif Gladdy.db.buffsBuffsCooldownPos == "LEFT" then - horizontalMargin = horizontalMargin - 1 + Gladdy.db.padding - if (Gladdy.db.trinketPos == "LEFT" and Gladdy.db.trinketEnabled) then - horizontalMargin = horizontalMargin + (Gladdy.db.trinketSize * Gladdy.db.trinketWidthFactor) + Gladdy.db.padding - if (Gladdy.db.classIconPos == "LEFT") then - horizontalMargin = horizontalMargin + (Gladdy.db.classIconSize * Gladdy.db.classIconWidthFactor) + Gladdy.db.padding - end - elseif (Gladdy.db.classIconPos == "LEFT") then - horizontalMargin = horizontalMargin + (Gladdy.db.classIconSize * Gladdy.db.classIconWidthFactor) + Gladdy.db.padding - if (Gladdy.db.trinketPos == "LEFT" and Gladdy.db.trinketEnabled) then - horizontalMargin = horizontalMargin + (Gladdy.db.trinketSize * Gladdy.db.trinketWidthFactor) + Gladdy.db.padding - end - end - if (Gladdy.db.drCooldownPos == "LEFT" and Gladdy.db.drEnabled) then - verticalMargin = verticalMargin + Gladdy.db.drIconSize/2 + Gladdy.db.padding/2 - end - if (Gladdy.db.castBarPos == "LEFT") then - verticalMargin = verticalMargin - - (((Gladdy.db.castBarHeight < Gladdy.db.castBarIconSize) and Gladdy.db.castBarIconSize - or Gladdy.db.castBarHeight)/2 + Gladdy.db.padding/2) - end - if (Gladdy.db.cooldownYPos == "LEFT" and Gladdy.db.cooldown) then - verticalMargin = verticalMargin + (Gladdy.db.buffsBuffsIconSize/2 + Gladdy.db.padding/2) - end - --self.frames[unit].buffFrame:SetPoint("RIGHT", Gladdy.buttons[unit].healthBar, "LEFT", -horizontalMargin + Gladdy.db.buffsBuffsXOffset, Gladdy.db.buffsBuffsYOffset + verticalMargin) - - local anchor = Gladdy:GetAnchor(unit, "LEFT") - horizontalMargin = (Gladdy.db.highlightInset and 0 or Gladdy.db.highlightBorderSize) - 1 + Gladdy.db.padding - if anchor == Gladdy.buttons[unit].healthBar then - self.frames[unit].buffFrame:SetPoint("RIGHT", anchor, "LEFT", -horizontalMargin + Gladdy.db.buffsBuffsXOffset, Gladdy.db.buffsBuffsYOffset) - else - self.frames[unit].buffFrame:SetPoint("RIGHT", anchor, "LEFT", -Gladdy.db.padding + Gladdy.db.buffsBuffsXOffset, Gladdy.db.buffsBuffsYOffset) - end - - elseif Gladdy.db.buffsBuffsCooldownPos == "RIGHT" then - horizontalMargin = horizontalMargin - 1 + Gladdy.db.padding - if (Gladdy.db.trinketPos == "RIGHT" and Gladdy.db.trinketEnabled) then - horizontalMargin = horizontalMargin + (Gladdy.db.trinketSize * Gladdy.db.trinketWidthFactor) + Gladdy.db.padding - if (Gladdy.db.classIconPos == "RIGHT") then - horizontalMargin = horizontalMargin + (Gladdy.db.classIconSize * Gladdy.db.classIconWidthFactor) + Gladdy.db.padding - end - elseif (Gladdy.db.classIconPos == "RIGHT") then - horizontalMargin = horizontalMargin + (Gladdy.db.classIconSize * Gladdy.db.classIconWidthFactor) + Gladdy.db.padding - if (Gladdy.db.trinketPos == "RIGHT" and Gladdy.db.trinketEnabled) then - horizontalMargin = horizontalMargin + (Gladdy.db.trinketSize * Gladdy.db.trinketWidthFactor) + Gladdy.db.padding - end - end - if (Gladdy.db.drCooldownPos == "RIGHT" and Gladdy.db.drEnabled) then - verticalMargin = verticalMargin + Gladdy.db.drIconSize/2 + Gladdy.db.padding/2 - end - if (Gladdy.db.castBarPos == "RIGHT") then - verticalMargin = verticalMargin - - (((Gladdy.db.castBarHeight < Gladdy.db.castBarIconSize) and Gladdy.db.castBarIconSize - or Gladdy.db.castBarHeight)/2 + Gladdy.db.padding/2) - end - if (Gladdy.db.cooldownYPos == "RIGHT" and Gladdy.db.cooldown) then - verticalMargin = verticalMargin + (Gladdy.db.buffsBuffsIconSize/2 + Gladdy.db.padding/2) - end - --self.frames[unit].buffFrame:SetPoint("LEFT", Gladdy.buttons[unit].healthBar, "RIGHT", horizontalMargin + Gladdy.db.buffsBuffsXOffset, Gladdy.db.buffsBuffsYOffset + verticalMargin) - - local anchor = Gladdy:GetAnchor(unit, "RIGHT") - horizontalMargin = (Gladdy.db.highlightInset and 0 or Gladdy.db.highlightBorderSize) - 1 + Gladdy.db.padding - if anchor == Gladdy.buttons[unit].healthBar then - self.frames[unit].buffFrame:SetPoint("LEFT", anchor, "RIGHT", horizontalMargin + Gladdy.db.buffsBuffsXOffset, Gladdy.db.buffsBuffsYOffset) - else - self.frames[unit].buffFrame:SetPoint("LEFT", anchor, "RIGHT", Gladdy.db.padding + Gladdy.db.buffsBuffsXOffset, Gladdy.db.buffsBuffsYOffset) - end - end + Gladdy:SetPosition(self.frames[unit].buffFrame, unit, "buffsBuffsXOffset", "buffsBuffsYOffset", BuffsDebuffs:LegacySetPositionBuffs(unit), BuffsDebuffs) if (unit == "arena1") then Gladdy:CreateMover(self.frames[unit].buffFrame, "buffsBuffsXOffset", "buffsBuffsYOffset", L["Buffs"], - Gladdy.db.buffsBuffsCooldownGrowDirection == "LEFT" and {"TOPRIGHT", "TOPRIGHT"} or {"TOPLEFT", "TOPLEFT"}, + {"TOPRIGHT", "TOPRIGHT"}, Gladdy.db.buffsBuffsIconSize * Gladdy.db.buffsBuffsWidthFactor, - Gladdy.db.buffsBuffsIconSize, Gladdy.db.buffsBuffsCooldownGrowDirection == "LEFT"and -1 or 1, 0) + Gladdy.db.buffsBuffsIconSize, 0, 0) + if not Gladdy.db.buffsEnabled then + self.frames[unit].buffFrame.mover:Hide() + end end for i=1, #self.frames[unit].auras[AURA_TYPE_BUFF] do @@ -456,13 +325,8 @@ end function BuffsDebuffs:UpdateAurasOnUnit(unit) for i=1, #self.frames[unit].auras[AURA_TYPE_BUFF] do if i == 1 then - if Gladdy.db.buffsBuffsCooldownGrowDirection == "LEFT" then - self.frames[unit].auras[AURA_TYPE_BUFF][i]:ClearAllPoints() - self.frames[unit].auras[AURA_TYPE_BUFF][i]:SetPoint("RIGHT", self.frames[unit].buffFrame, "LEFT") - else - self.frames[unit].auras[AURA_TYPE_BUFF][i]:ClearAllPoints() - self.frames[unit].auras[AURA_TYPE_BUFF][i]:SetPoint("LEFT", self.frames[unit].buffFrame, "RIGHT") - end + self.frames[unit].auras[AURA_TYPE_BUFF][i]:ClearAllPoints() + self.frames[unit].auras[AURA_TYPE_BUFF][i]:SetPoint("RIGHT", self.frames[unit].buffFrame, "LEFT") else if Gladdy.db.buffsBuffsCooldownGrowDirection == "LEFT" then self.frames[unit].auras[AURA_TYPE_BUFF][i]:ClearAllPoints() @@ -475,13 +339,8 @@ function BuffsDebuffs:UpdateAurasOnUnit(unit) end for i=1, #self.frames[unit].auras[AURA_TYPE_DEBUFF] do if i == 1 then - if Gladdy.db.buffsCooldownGrowDirection == "LEFT" then - self.frames[unit].auras[AURA_TYPE_DEBUFF][i]:ClearAllPoints() - self.frames[unit].auras[AURA_TYPE_DEBUFF][i]:SetPoint("RIGHT", self.frames[unit].debuffFrame, "LEFT") - else - self.frames[unit].auras[AURA_TYPE_DEBUFF][i]:ClearAllPoints() - self.frames[unit].auras[AURA_TYPE_DEBUFF][i]:SetPoint("LEFT", self.frames[unit].debuffFrame, "RIGHT") - end + self.frames[unit].auras[AURA_TYPE_DEBUFF][i]:ClearAllPoints() + self.frames[unit].auras[AURA_TYPE_DEBUFF][i]:SetPoint("RIGHT", self.frames[unit].debuffFrame, "LEFT") else if Gladdy.db.buffsCooldownGrowDirection == "LEFT" then self.frames[unit].auras[AURA_TYPE_DEBUFF][i]:ClearAllPoints() @@ -602,36 +461,6 @@ end -- OPTIONS ------------ -local function option(params) - local defaults = { - get = function(info) - local key = info.arg or info[#info] - return Gladdy.dbi.profile[key] - end, - set = function(info, value) - local key = info.arg or info[#info] - Gladdy.dbi.profile[key] = value - if Gladdy.db.buffsCooldownPos == "LEFT" then - Gladdy.db.buffsCooldownGrowDirection = "LEFT" - elseif Gladdy.db.buffsCooldownPos == "RIGHT" then - Gladdy.db.buffsCooldownGrowDirection = "RIGHT" - end - if Gladdy.db.buffsBuffsCooldownPos == "LEFT" then - Gladdy.db.buffsBuffsCooldownGrowDirection = "LEFT" - elseif Gladdy.db.buffsBuffsCooldownPos == "RIGHT" then - Gladdy.db.buffsBuffsCooldownGrowDirection = "RIGHT" - end - Gladdy:UpdateFrame() - end, - } - - for k, v in pairs(params) do - defaults[k] = v - end - - return defaults -end - function BuffsDebuffs:GetOptions() return { headerBuffs = { @@ -714,18 +543,6 @@ function BuffsDebuffs:GetOptions() name = L["Position"], order = 5, }, - buffsBuffsCooldownPos = option({ - type = "select", - name = L["Aura Position"], - desc = L["Position of the aura icons"], - order = 21, - values = { - ["TOP"] = L["Top"], - ["BOTTOM"] = L["Bottom"], - ["LEFT"] = L["Left"], - ["RIGHT"] = L["Right"], - }, - }), buffsBuffsCooldownGrowDirection = Gladdy:option({ type = "select", name = L["Grow Direction"], @@ -836,18 +653,6 @@ function BuffsDebuffs:GetOptions() name = L["Position"], order = 5, }, - buffsCooldownPos = option({ - type = "select", - name = L["Aura Position"], - desc = L["Position of the aura icons"], - order = 21, - values = { - ["TOP"] = L["Top"], - ["BOTTOM"] = L["Bottom"], - ["LEFT"] = L["Left"], - ["RIGHT"] = L["Right"], - }, - }), buffsCooldownGrowDirection = Gladdy:option({ type = "select", name = L["Grow Direction"], @@ -1108,3 +913,168 @@ function BuffsDebuffs:GetOptions() } end +--------------------------- + +-- LAGACY HANDLER + +--------------------------- + +function BuffsDebuffs:LegacySetPositionDebuffs(unit) + if Gladdy.db.newLayout then + return Gladdy.db.newLayout + end + self.frames[unit].debuffFrame:ClearAllPoints() + local powerBarHeight = Gladdy.db.powerBarEnabled and (Gladdy.db.powerBarHeight + 1) or 0 + local horizontalMargin = (Gladdy.db.highlightInset and 0 or Gladdy.db.highlightBorderSize) + local verticalMargin = -(Gladdy.db.powerBarHeight)/2 + local offset = 0 + if (Gladdy.db.buffsCooldownGrowDirection == "RIGHT") then + offset = Gladdy.db.buffsIconSize * Gladdy.db.buffsWidthFactor + end + local pos = Gladdy.db.buffsCooldownPos + + if pos == "TOP" then + verticalMargin = horizontalMargin + 1 + if Gladdy.db.cooldownYPos == "TOP" and Gladdy.db.cooldown then + verticalMargin = verticalMargin + Gladdy.db.cooldownSize + end + if Gladdy.db.buffsCooldownGrowDirection == "LEFT" then + self.frames[unit].debuffFrame:SetPoint("BOTTOMLEFT", Gladdy.buttons[unit].healthBar, "TOPRIGHT", Gladdy.db.buffsXOffset + offset, Gladdy.db.buffsYOffset + verticalMargin) + else + self.frames[unit].debuffFrame:SetPoint("BOTTOMRIGHT", Gladdy.buttons[unit].healthBar, "TOPLEFT", Gladdy.db.buffsXOffset + offset, Gladdy.db.buffsYOffset + verticalMargin) + end + elseif pos == "BOTTOM" then + verticalMargin = horizontalMargin + 1 + if Gladdy.db.cooldownYPos == "BOTTOM" and Gladdy.db.cooldown then + verticalMargin = verticalMargin + Gladdy.db.cooldownSize + end + if Gladdy.db.buffsCooldownGrowDirection == "LEFT" then + self.frames[unit].debuffFrame:SetPoint("TOPLEFT", Gladdy.buttons[unit].healthBar, "BOTTOMRIGHT", Gladdy.db.buffsXOffset + offset, Gladdy.db.buffsYOffset -verticalMargin - powerBarHeight) + else + self.frames[unit].debuffFrame:SetPoint("TOPRIGHT", Gladdy.buttons[unit].healthBar, "BOTTOMLEFT", Gladdy.db.buffsXOffset + offset, Gladdy.db.buffsYOffset -verticalMargin - powerBarHeight) + end + elseif pos == "LEFT" then + horizontalMargin = horizontalMargin - 1 + Gladdy.db.padding + local anchor = Gladdy:GetAnchor(unit, "LEFT") + if anchor == Gladdy.buttons[unit].healthBar then + self.frames[unit].debuffFrame:SetPoint("RIGHT", anchor, "LEFT", -horizontalMargin + Gladdy.db.buffsXOffset + offset, Gladdy.db.buffsYOffset) + else + self.frames[unit].debuffFrame:SetPoint("RIGHT", anchor, "LEFT", -Gladdy.db.padding + Gladdy.db.buffsXOffset + offset, Gladdy.db.buffsYOffset) + end + elseif pos == "RIGHT" then + horizontalMargin = horizontalMargin - 1 + Gladdy.db.padding + local anchor = Gladdy:GetAnchor(unit, "RIGHT") + if anchor == Gladdy.buttons[unit].healthBar then + self.frames[unit].debuffFrame:SetPoint("LEFT", anchor, "RIGHT", horizontalMargin + Gladdy.db.buffsXOffset + offset, Gladdy.db.buffsYOffset) + else + self.frames[unit].debuffFrame:SetPoint("LEFT", anchor, "RIGHT", horizontalMargin + Gladdy.db.buffsXOffset + offset, Gladdy.db.buffsYOffset) + end + end + return Gladdy.db.newLayout +end + +function BuffsDebuffs:LegacySetPositionBuffs(unit) + if Gladdy.db.newLayout then + return Gladdy.db.newLayout + end + self.frames[unit].buffFrame:ClearAllPoints() + local horizontalMargin = (Gladdy.db.highlightInset and 0 or Gladdy.db.highlightBorderSize) + local verticalMargin = -(Gladdy.db.powerBarHeight)/2 + local powerBarHeight = Gladdy.db.powerBarEnabled and (Gladdy.db.powerBarHeight + 1) or 0 + local offset = 0 + if (Gladdy.db.buffsBuffsCooldownGrowDirection == "RIGHT") then + offset = Gladdy.db.buffsBuffsIconSize * Gladdy.db.buffsBuffsWidthFactor + end + + local pos = Gladdy.db.buffsBuffsCooldownPos + + if pos == "TOP" then + verticalMargin = horizontalMargin + 1 + if Gladdy.db.cooldownYPos == "TOP" and Gladdy.db.cooldown then + verticalMargin = verticalMargin + Gladdy.db.cooldownSize + end + if Gladdy.db.buffsBuffsCooldownGrowDirection == "LEFT" then + self.frames[unit].buffFrame:SetPoint("BOTTOMLEFT", Gladdy.buttons[unit].healthBar, "TOPRIGHT", Gladdy.db.buffsXOffset + offset, Gladdy.db.buffsBuffsYOffset + verticalMargin) + else + self.frames[unit].buffFrame:SetPoint("BOTTOMRIGHT", Gladdy.buttons[unit].healthBar, "TOPLEFT", Gladdy.db.buffsXOffset + offset, Gladdy.db.buffsBuffsYOffset + verticalMargin) + end + elseif pos == "BOTTOM" then + verticalMargin = horizontalMargin + 1 + if Gladdy.db.cooldownYPos == "BOTTOM" and Gladdy.db.cooldown then + verticalMargin = verticalMargin + Gladdy.db.cooldownSize + end + if Gladdy.db.buffsBuffsCooldownGrowDirection == "LEFT" then + self.frames[unit].buffFrame:SetPoint("TOPLEFT", Gladdy.buttons[unit].healthBar, "BOTTOMRIGHT", Gladdy.db.buffsBuffsXOffset + offset, Gladdy.db.buffsBuffsYOffset -verticalMargin - powerBarHeight) + else + self.frames[unit].buffFrame:SetPoint("TOPRIGHT", Gladdy.buttons[unit].healthBar, "BOTTOMLEFT", Gladdy.db.buffsBuffsXOffset + offset, Gladdy.db.buffsBuffsYOffset -verticalMargin - powerBarHeight) + end + elseif pos == "LEFT" then + horizontalMargin = horizontalMargin - 1 + Gladdy.db.padding + if (Gladdy.db.trinketPos == "LEFT" and Gladdy.db.trinketEnabled) then + horizontalMargin = horizontalMargin + (Gladdy.db.trinketSize * Gladdy.db.trinketWidthFactor) + Gladdy.db.padding + if (Gladdy.db.classIconPos == "LEFT") then + horizontalMargin = horizontalMargin + (Gladdy.db.classIconSize * Gladdy.db.classIconWidthFactor) + Gladdy.db.padding + end + elseif (Gladdy.db.classIconPos == "LEFT") then + horizontalMargin = horizontalMargin + (Gladdy.db.classIconSize * Gladdy.db.classIconWidthFactor) + Gladdy.db.padding + if (Gladdy.db.trinketPos == "LEFT" and Gladdy.db.trinketEnabled) then + horizontalMargin = horizontalMargin + (Gladdy.db.trinketSize * Gladdy.db.trinketWidthFactor) + Gladdy.db.padding + end + end + if (Gladdy.db.drCooldownPos == "LEFT" and Gladdy.db.drEnabled) then + verticalMargin = verticalMargin + Gladdy.db.drIconSize/2 + Gladdy.db.padding/2 + end + if (Gladdy.db.castBarPos == "LEFT") then + verticalMargin = verticalMargin - + (((Gladdy.db.castBarHeight < Gladdy.db.castBarIconSize) and Gladdy.db.castBarIconSize + or Gladdy.db.castBarHeight)/2 + Gladdy.db.padding/2) + end + if (Gladdy.db.cooldownYPos == "LEFT" and Gladdy.db.cooldown) then + verticalMargin = verticalMargin + (Gladdy.db.buffsBuffsIconSize/2 + Gladdy.db.padding/2) + end + --self.frames[unit].buffFrame:SetPoint("RIGHT", Gladdy.buttons[unit].healthBar, "LEFT", -horizontalMargin + Gladdy.db.buffsBuffsXOffset, Gladdy.db.buffsBuffsYOffset + verticalMargin) + + local anchor = Gladdy:GetAnchor(unit, "LEFT") + horizontalMargin = (Gladdy.db.highlightInset and 0 or Gladdy.db.highlightBorderSize) - 1 + Gladdy.db.padding + if anchor == Gladdy.buttons[unit].healthBar then + self.frames[unit].buffFrame:SetPoint("RIGHT", anchor, "LEFT", -horizontalMargin + Gladdy.db.buffsBuffsXOffset + offset, Gladdy.db.buffsBuffsYOffset) + else + self.frames[unit].buffFrame:SetPoint("RIGHT", anchor, "LEFT", -Gladdy.db.padding + Gladdy.db.buffsBuffsXOffset + offset, Gladdy.db.buffsBuffsYOffset) + end + + elseif pos == "RIGHT" then + horizontalMargin = horizontalMargin - 1 + Gladdy.db.padding + if (Gladdy.db.trinketPos == "RIGHT" and Gladdy.db.trinketEnabled) then + horizontalMargin = horizontalMargin + (Gladdy.db.trinketSize * Gladdy.db.trinketWidthFactor) + Gladdy.db.padding + if (Gladdy.db.classIconPos == "RIGHT") then + horizontalMargin = horizontalMargin + (Gladdy.db.classIconSize * Gladdy.db.classIconWidthFactor) + Gladdy.db.padding + end + elseif (Gladdy.db.classIconPos == "RIGHT") then + horizontalMargin = horizontalMargin + (Gladdy.db.classIconSize * Gladdy.db.classIconWidthFactor) + Gladdy.db.padding + if (Gladdy.db.trinketPos == "RIGHT" and Gladdy.db.trinketEnabled) then + horizontalMargin = horizontalMargin + (Gladdy.db.trinketSize * Gladdy.db.trinketWidthFactor) + Gladdy.db.padding + end + end + if (Gladdy.db.drCooldownPos == "RIGHT" and Gladdy.db.drEnabled) then + verticalMargin = verticalMargin + Gladdy.db.drIconSize/2 + Gladdy.db.padding/2 + end + if (Gladdy.db.castBarPos == "RIGHT") then + verticalMargin = verticalMargin - + (((Gladdy.db.castBarHeight < Gladdy.db.castBarIconSize) and Gladdy.db.castBarIconSize + or Gladdy.db.castBarHeight)/2 + Gladdy.db.padding/2) + end + if (Gladdy.db.cooldownYPos == "RIGHT" and Gladdy.db.cooldown) then + verticalMargin = verticalMargin + (Gladdy.db.buffsBuffsIconSize/2 + Gladdy.db.padding/2) + end + --self.frames[unit].buffFrame:SetPoint("LEFT", Gladdy.buttons[unit].healthBar, "RIGHT", horizontalMargin + Gladdy.db.buffsBuffsXOffset, Gladdy.db.buffsBuffsYOffset + verticalMargin) + + local anchor = Gladdy:GetAnchor(unit, "RIGHT") + horizontalMargin = (Gladdy.db.highlightInset and 0 or Gladdy.db.highlightBorderSize) - 1 + Gladdy.db.padding + if anchor == Gladdy.buttons[unit].healthBar then + self.frames[unit].buffFrame:SetPoint("LEFT", anchor, "RIGHT", horizontalMargin + Gladdy.db.buffsBuffsXOffset + offset, Gladdy.db.buffsBuffsYOffset) + else + self.frames[unit].buffFrame:SetPoint("LEFT", anchor, "RIGHT", Gladdy.db.padding + Gladdy.db.buffsBuffsXOffset + offset, Gladdy.db.buffsBuffsYOffset) + end + end + return Gladdy.db.newLayout +end \ No newline at end of file diff --git a/Modules/Castbar.lua b/Modules/Castbar.lua index 4717563..1eb5b70 100644 --- a/Modules/Castbar.lua +++ b/Modules/Castbar.lua @@ -34,7 +34,6 @@ local Castbar = Gladdy:NewModule("Cast Bar", 70, { castBarBorderColor = { r = 0, g = 0, b = 0, a = 1 }, castBarFontColor = { r = 1, g = 1, b = 1, a = 1 }, castBarGuesses = true, - castBarPos = "LEFT", castBarXOffset = 0, castBarYOffset = 0, castBarIconPos = "LEFT", @@ -57,15 +56,17 @@ end --------------------------- function Castbar:CreateFrame(unit) - local castBar = CreateFrame("Frame", nil, Gladdy.buttons[unit], BackdropTemplateMixin and "BackdropTemplate") + local castBar = CreateFrame("Frame", nil, Gladdy.buttons[unit]) castBar:EnableMouse(false) castBar:SetMovable(true) castBar.unit = unit - castBar:SetBackdrop({ edgeFile = Gladdy:SMFetch("border", "castBarBorderStyle"), + castBar.backdrop = CreateFrame("Frame", nil, castBar, BackdropTemplateMixin and "BackdropTemplate") + castBar.backdrop:SetAllPoints(castBar) + castBar.backdrop:SetBackdrop({ edgeFile = Gladdy:SMFetch("border", "castBarBorderStyle"), edgeSize = Gladdy.db.castBarBorderSize }) - castBar:SetBackdropBorderColor(Gladdy.db.castBarBorderColor.r, Gladdy.db.castBarBorderColor.g, Gladdy.db.castBarBorderColor.b, Gladdy.db.castBarBorderColor.a) - castBar:SetFrameLevel(1) + castBar.backdrop:SetBackdropBorderColor(Gladdy.db.castBarBorderColor.r, Gladdy.db.castBarBorderColor.g, Gladdy.db.castBarBorderColor.b, Gladdy.db.castBarBorderColor.a) + castBar.backdrop:SetFrameLevel(1) castBar.bar = CreateFrame("StatusBar", nil, castBar) castBar.bar:SetStatusBarTexture(Gladdy:SMFetch("statusbar", "castBarTexture")) @@ -130,9 +131,9 @@ function Castbar:UpdateFrame(unit) castBar:SetWidth(Gladdy.db.castBarWidth) castBar:SetHeight(Gladdy.db.castBarHeight) - castBar:SetBackdrop({ edgeFile = Gladdy:SMFetch("border", "castBarBorderStyle"), + castBar.backdrop:SetBackdrop({ edgeFile = Gladdy:SMFetch("border", "castBarBorderStyle"), edgeSize = Gladdy.db.castBarBorderSize }) - castBar:SetBackdropBorderColor(Gladdy.db.castBarBorderColor.r, Gladdy.db.castBarBorderColor.g, Gladdy.db.castBarBorderColor.b, Gladdy.db.castBarBorderColor.a) + castBar.backdrop:SetBackdropBorderColor(Gladdy.db.castBarBorderColor.r, Gladdy.db.castBarBorderColor.g, Gladdy.db.castBarBorderColor.b, Gladdy.db.castBarBorderColor.a) castBar.bar:SetStatusBarTexture(Gladdy:SMFetch("statusbar", "castBarTexture")) castBar.bar:ClearAllPoints() @@ -165,24 +166,7 @@ function Castbar:UpdateFrame(unit) leftMargin = Gladdy.db.castBarIconSize + 1 end - castBar:ClearAllPoints() - local horizontalMargin = (Gladdy.db.highlightInset and 0 or Gladdy.db.highlightBorderSize) + Gladdy.db.padding - if (Gladdy.db.castBarPos == "LEFT") then - local anchor = Gladdy:GetAnchor(unit, "LEFT") - if anchor == Gladdy.buttons[unit].healthBar then - castBar:SetPoint("RIGHT", anchor, "LEFT", -horizontalMargin - leftMargin + Gladdy.db.castBarXOffset, Gladdy.db.castBarYOffset) - else - castBar:SetPoint("RIGHT", anchor, "LEFT", -Gladdy.db.padding - leftMargin + Gladdy.db.castBarXOffset, Gladdy.db.castBarYOffset) - end - end - if (Gladdy.db.castBarPos == "RIGHT") then - local anchor = Gladdy:GetAnchor(unit, "RIGHT") - if anchor == Gladdy.buttons[unit].healthBar then - castBar:SetPoint("LEFT", anchor, "RIGHT", horizontalMargin + rightMargin + Gladdy.db.castBarXOffset, Gladdy.db.castBarYOffset) - else - castBar:SetPoint("LEFT", anchor, "RIGHT", Gladdy.db.padding + rightMargin + Gladdy.db.castBarXOffset, Gladdy.db.castBarYOffset) - end - end + Gladdy:SetPosition(castBar, unit, "castBarXOffset", "castBarYOffset", Castbar:LegacySetPosition(castBar, unit, leftMargin, rightMargin), Castbar) castBar.spellText:SetFont(Gladdy:SMFetch("font", "castBarFont"), Gladdy.db.castBarFontSize) castBar.spellText:SetTextColor(Gladdy.db.castBarFontColor.r, Gladdy.db.castBarFontColor.g, Gladdy.db.castBarFontColor.b, Gladdy.db.castBarFontColor.a) @@ -410,7 +394,10 @@ function Castbar:CAST_START(unit, spell, icon, value, maxValue, test) castBar.spellText:SetText(spell) castBar.timeText:SetText(maxValue) castBar.bg:Show() - castBar:Show() + castBar.backdrop:Show() + if Gladdy.db.castBarSparkEnabled then + castBar.spark:Show() + end castBar:SetAlpha(1) castBar.icon:Show() end @@ -430,7 +417,8 @@ function Castbar:CAST_STOP(unit, ...) castBar.timeText:SetText("") castBar.bar:SetValue(0) castBar.bg:Hide() - castBar:Hide() + castBar.backdrop:Hide() + castBar.spark:Hide() castBar.icon:Hide() else castBar.bar:SetStatusBarColor(...) @@ -771,15 +759,6 @@ function Castbar:GetOptions() name = L["Position"], order = 1, }, - castBarPos = option({ - type = "select", - name = L["Castbar position"], - order = 2, - values = { - ["LEFT"] = L["Left"], - ["RIGHT"] = L["Right"], - }, - }), castBarIconPos = option( { type = "select", name = L["Icon position"], @@ -817,4 +796,35 @@ function Castbar:GetOptions() }, }, } +end + +--------------------------- + +-- LAGACY HANDLER + +--------------------------- + +function Castbar:LegacySetPosition(castBar, unit, leftMargin, rightMargin) + if Gladdy.db.newLayout then + return Gladdy.db.newLayout + end + castBar:ClearAllPoints() + local horizontalMargin = (Gladdy.db.highlightInset and 0 or Gladdy.db.highlightBorderSize) + Gladdy.db.padding + if (Gladdy.db.castBarPos == "LEFT") then + local anchor = Gladdy:GetAnchor(unit, "LEFT") + if anchor == Gladdy.buttons[unit].healthBar then + castBar:SetPoint("RIGHT", anchor, "LEFT", -horizontalMargin - leftMargin + Gladdy.db.castBarXOffset, Gladdy.db.castBarYOffset) + else + castBar:SetPoint("RIGHT", anchor, "LEFT", -Gladdy.db.padding - leftMargin + Gladdy.db.castBarXOffset, Gladdy.db.castBarYOffset) + end + end + if (Gladdy.db.castBarPos == "RIGHT") then + local anchor = Gladdy:GetAnchor(unit, "RIGHT") + if anchor == Gladdy.buttons[unit].healthBar then + castBar:SetPoint("LEFT", anchor, "RIGHT", horizontalMargin + rightMargin + Gladdy.db.castBarXOffset, Gladdy.db.castBarYOffset) + else + castBar:SetPoint("LEFT", anchor, "RIGHT", Gladdy.db.padding + rightMargin + Gladdy.db.castBarXOffset, Gladdy.db.castBarYOffset) + end + end + return Gladdy.db.newLayout end \ No newline at end of file diff --git a/Modules/Classicon.lua b/Modules/Classicon.lua index 839b52f..8890d5b 100644 --- a/Modules/Classicon.lua +++ b/Modules/Classicon.lua @@ -4,13 +4,14 @@ local Gladdy = LibStub("Gladdy") local CreateFrame = CreateFrame local GetSpellInfo = GetSpellInfo local L = Gladdy.L -local Classicon = Gladdy:NewModule("Class Icon", 80, { - classIconPos = "LEFT", +local Classicon = Gladdy:NewModule("Class Icon", 81, { classIconSize = 60 + 20 + 1, classIconWidthFactor = 0.9, classIconBorderStyle = "Interface\\AddOns\\Gladdy\\Images\\Border_rounded_blp", classIconBorderColor = { r = 0, g = 0, b = 0, a = 1 }, classIconSpecIcon = false, + classIconXOffset = 0, + classIconYOffset = 0, }) local classIconPath = "Interface\\Addons\\Gladdy\\Images\\Classes\\" @@ -99,13 +100,6 @@ function Classicon:CreateFrame(unit) classIcon:SetFrameStrata("MEDIUM") classIcon:SetFrameLevel(2) - classIcon:ClearAllPoints() - if (Gladdy.db.classIconPos == "RIGHT") then - classIcon:SetPoint("TOPLEFT", Gladdy.buttons[unit].healthBar, "TOPRIGHT", 2, 2) - else - classIcon:SetPoint("TOPRIGHT", Gladdy.buttons[unit].healthBar, "TOPLEFT", -2, 2) - end - Gladdy.buttons[unit].classIcon = classIcon self.frames[unit] = classIcon end @@ -119,12 +113,15 @@ function Classicon:UpdateFrame(unit) classIcon:SetWidth(Gladdy.db.classIconSize * Gladdy.db.classIconWidthFactor) classIcon:SetHeight(Gladdy.db.classIconSize) - classIcon:ClearAllPoints() - local margin = (Gladdy.db.highlightInset and 0 or Gladdy.db.highlightBorderSize) + Gladdy.db.padding - if (Gladdy.db.classIconPos == "LEFT") then - classIcon:SetPoint("TOPRIGHT", Gladdy.buttons[unit].healthBar, "TOPLEFT", -margin, 0) - else - classIcon:SetPoint("TOPLEFT", Gladdy.buttons[unit], "TOPRIGHT", margin, 0) + Gladdy:SetPosition(classIcon, unit, "classIconXOffset", "classIconYOffset", Classicon:LegacySetPosition(classIcon, unit), Classicon) + + if (unit == "arena1") then + Gladdy:CreateMover(classIcon, "classIconXOffset", "classIconYOffset", L["Class Icon"], + {"TOPLEFT", "TOPLEFT"}, + Gladdy.db.classIconSize * Gladdy.db.classIconWidthFactor, + Gladdy.db.classIconSize, + 0, + 0) end classIcon.texture:ClearAllPoints() @@ -278,4 +275,23 @@ function Classicon:GetOptions() }, }, } +end + +--------------------------- + +-- LAGACY HANDLER + +--------------------------- + +function Classicon:LegacySetPosition(classIcon, unit) + if Gladdy.db.newLayout then + return Gladdy.db.newLayout + end + classIcon:ClearAllPoints() + local margin = (Gladdy.db.highlightInset and 0 or Gladdy.db.highlightBorderSize) + Gladdy.db.padding + if (Gladdy.db.classIconPos == "LEFT") then + classIcon:SetPoint("TOPRIGHT", Gladdy.buttons[unit].healthBar, "TOPLEFT", -margin, 0) + else + classIcon:SetPoint("TOPLEFT", Gladdy.buttons[unit], "TOPRIGHT", margin, 0) + end end \ No newline at end of file diff --git a/Modules/CombatIndicator.lua b/Modules/CombatIndicator.lua index 91447ad..73a016d 100644 --- a/Modules/CombatIndicator.lua +++ b/Modules/CombatIndicator.lua @@ -1,7 +1,6 @@ local select = select local UnitExists, UnitAffectingCombat, GetSpellInfo = UnitExists, UnitAffectingCombat, GetSpellInfo local CreateFrame = CreateFrame -local ANCHORS = { ["LEFT"] = "RIGHT", ["RIGHT"] = "LEFT", ["BOTTOM"] = "TOP", ["TOP"] = "BOTTOM"} local Gladdy = LibStub("Gladdy") local L = Gladdy.L @@ -11,8 +10,6 @@ local CombatIndicator = Gladdy:NewModule("Combat Indicator", nil, { ciSize = 20, ciAlpha = 1, ciWidthFactor = 1, - ciAnchor = "healthBar", - ciPos = "TOP", ciXOffset = 0, ciYOffset = -31, ciBorderStyle = "Interface\\AddOns\\Gladdy\\Images\\Border_rounded_blp", @@ -68,8 +65,7 @@ function CombatIndicator:UpdateFrame(unit) ciFrame.border:SetTexture(Gladdy.db.ciBorderStyle) ciFrame.border:SetVertexColor(Gladdy.db.ciBorderColor.r, Gladdy.db.ciBorderColor.g, Gladdy.db.ciBorderColor.b, Gladdy.db.ciBorderColor.a) - ciFrame:ClearAllPoints() - ciFrame:SetPoint(ANCHORS[Gladdy.db.ciPos], Gladdy.buttons[unit][Gladdy.db.ciAnchor], Gladdy.db.ciPos, Gladdy.db.ciXOffset, Gladdy.db.ciYOffset) + Gladdy:SetPosition(ciFrame, unit, "ciXOffset", "ciYOffset", CombatIndicator:LegacySetPosition(ciFrame, unit), CombatIndicator) ciFrame:SetAlpha(Gladdy.db.ciAlpha) @@ -177,30 +173,6 @@ function CombatIndicator:GetOptions() name = L["Position"], order = 4, }, - ciAnchor = Gladdy:option({ - type = "select", - name = L["Anchor"], - desc = L["This changes the anchor of the ci icon"], - order = 20, - values = { - ["trinket"] = L["Trinket"], - ["classIcon"] = L["Class Icon"], - ["healthBar"] = L["Health Bar"], - ["powerBar"] = L["Power Bar"], - }, - }), - ciPos = Gladdy:option({ - type = "select", - name = L["Position"], - desc = L["This changes position relative to its anchor of the ci icon"], - order = 21, - values = { - ["LEFT"] = L["Left"], - ["RIGHT"] = L["Right"], - ["TOP"] = L["Top"], - ["BOTTOM"] = L["Bottom"], - }, - }), ciXOffset = Gladdy:option({ type = "range", name = L["Horizontal offset"], @@ -249,4 +221,24 @@ function CombatIndicator:GetOptions() }, }, } +end + +--------------------------- + +-- LAGACY HANDLER + +--------------------------- + +function CombatIndicator:LegacySetPosition(ciFrame, unit) + if Gladdy.db.newLayout then + return Gladdy.db.newLayout + end + -- LEGACY options + local ANCHORS = { ["LEFT"] = "RIGHT", ["RIGHT"] = "LEFT", ["BOTTOM"] = "TOP", ["TOP"] = "BOTTOM"} + local ciAnchor = Gladdy.db.ciAnchor or Gladdy.legacy.ciAnchor + local ciPos = Gladdy.db.ciPos + + ciFrame:ClearAllPoints() + ciFrame:SetPoint(ANCHORS[ciPos], Gladdy.buttons[unit][ciAnchor], ciPos, Gladdy.db.ciXOffset, Gladdy.db.ciYOffset) + return Gladdy.db.newLayout end \ No newline at end of file diff --git a/Modules/Cooldowns.lua b/Modules/Cooldowns.lua index 0ce1594..f5803da 100644 --- a/Modules/Cooldowns.lua +++ b/Modules/Cooldowns.lua @@ -1,4 +1,4 @@ -local type, pairs, ceil, tonumber, mod, tostring, upper, select = type, pairs, ceil, tonumber, mod, tostring, string.upper, select +local type, pairs, ipairs, ceil, tonumber, mod, tostring, upper, select = type, pairs, ipairs, ceil, tonumber, mod, tostring, string.upper, select local GetTime = GetTime local CreateFrame = CreateFrame local RACE_ICON_TCOORDS = { @@ -54,8 +54,8 @@ local Cooldowns = Gladdy:NewModule("Cooldowns", nil, { cooldownFontScale = 1, cooldownFontColor = { r = 1, g = 1, b = 0, a = 1 }, cooldown = true, - cooldownYPos = "TOP", - cooldownXPos = "LEFT", + cooldownYGrowDirection = "UP", + cooldownXGrowDirection = "RIGHT", cooldownYOffset = 0, cooldownXOffset = 0, cooldownSize = 30, @@ -66,7 +66,7 @@ local Cooldowns = Gladdy:NewModule("Cooldowns", nil, { cooldownBorderColor = { r = 1, g = 1, b = 1, a = 1 }, cooldownDisableCircle = false, cooldownCooldownAlpha = 1, - cooldownCooldowns = getDefaultCooldown() + cooldownCooldowns = getDefaultCooldown(), }) function Cooldowns:Initialize() @@ -134,42 +134,15 @@ function Cooldowns:UpdateFrame(unit) local button = Gladdy.buttons[unit] -- Cooldown frame if (Gladdy.db.cooldown) then - button.spellCooldownFrame:ClearAllPoints() - local powerBarHeight = Gladdy.db.powerBarEnabled and (Gladdy.db.powerBarHeight + 1) or 0 - local horizontalMargin = (Gladdy.db.highlightInset and 0 or Gladdy.db.highlightBorderSize) - if Gladdy.db.cooldownYPos == "TOP" then - if Gladdy.db.cooldownXPos == "RIGHT" then - button.spellCooldownFrame:SetPoint("BOTTOMRIGHT", button.healthBar, "TOPRIGHT", Gladdy.db.cooldownXOffset, horizontalMargin + Gladdy.db.cooldownYOffset) - else - button.spellCooldownFrame:SetPoint("BOTTOMLEFT", button.healthBar, "TOPLEFT", Gladdy.db.cooldownXOffset, horizontalMargin + Gladdy.db.cooldownYOffset) - end - elseif Gladdy.db.cooldownYPos == "BOTTOM" then - if Gladdy.db.cooldownXPos == "RIGHT" then - button.spellCooldownFrame:SetPoint("TOPRIGHT", button.healthBar, "BOTTOMRIGHT", Gladdy.db.cooldownXOffset, -horizontalMargin + Gladdy.db.cooldownYOffset - powerBarHeight) - else - button.spellCooldownFrame:SetPoint("TOPLEFT", button.healthBar, "BOTTOMLEFT", Gladdy.db.cooldownXOffset, -horizontalMargin + Gladdy.db.cooldownYOffset - powerBarHeight) - end - elseif Gladdy.db.cooldownYPos == "LEFT" then - local anchor = Gladdy:GetAnchor(unit, "LEFT") - if anchor == Gladdy.buttons[unit].healthBar then - button.spellCooldownFrame:SetPoint("RIGHT", anchor, "LEFT", -(horizontalMargin + Gladdy.db.padding) + Gladdy.db.cooldownXOffset, Gladdy.db.cooldownYOffset) - else - button.spellCooldownFrame:SetPoint("RIGHT", anchor, "LEFT", -Gladdy.db.padding + Gladdy.db.cooldownXOffset, Gladdy.db.cooldownYOffset) - end - elseif Gladdy.db.cooldownYPos == "RIGHT" then - local anchor = Gladdy:GetAnchor(unit, "RIGHT") - if anchor == Gladdy.buttons[unit].healthBar then - button.spellCooldownFrame:SetPoint("LEFT", anchor, "RIGHT", horizontalMargin + Gladdy.db.padding + Gladdy.db.cooldownXOffset, Gladdy.db.cooldownYOffset) - else - button.spellCooldownFrame:SetPoint("LEFT", anchor, "RIGHT", Gladdy.db.padding + Gladdy.db.cooldownXOffset, Gladdy.db.cooldownYOffset) - end - end button.spellCooldownFrame:SetHeight(Gladdy.db.cooldownSize) button.spellCooldownFrame:SetWidth(1) button.spellCooldownFrame:Show() + + Gladdy:SetPosition(button.spellCooldownFrame, unit, "cooldownXOffset", "cooldownYOffset", Cooldowns:LegacySetPosition(button, unit), Cooldowns) + if (unit == "arena1") then - Gladdy:CreateMover(button.spellCooldownFrame, "cooldownXOffset", "cooldownYOffset", L["Cooldown"], - Gladdy.db.cooldownXPos == "RIGHT" and {"TOPRIGHT", "TOPRIGHT"} or {"TOPLEFT", "TOPLEFT"}, + Gladdy:CreateMover(button.spellCooldownFrame,"cooldownXOffset", "cooldownYOffset", L["Cooldown"], + {"TOPLEFT", "TOPLEFT"}, Gladdy.db.cooldownSize * Gladdy.db.cooldownWidthFactor, Gladdy.db.cooldownSize) end -- Update each cooldown icon @@ -181,11 +154,11 @@ function Cooldowns:UpdateFrame(unit) icon.cooldownFont:SetFont(Gladdy:SMFetch("font", "cooldownFont"), Gladdy.db.cooldownSize / 2 * Gladdy.db.cooldownFontScale, "OUTLINE") icon.cooldownFont:SetTextColor(Gladdy.db.cooldownFontColor.r, Gladdy.db.cooldownFontColor.g, Gladdy.db.cooldownFontColor.b, Gladdy.db.cooldownFontColor.a) icon:ClearAllPoints() - if (Gladdy.db.cooldownXPos == "RIGHT") then + if (Gladdy.db.cooldownXGrowDirection == "LEFT") then if (j == 1) then - icon:SetPoint("RIGHT", button.spellCooldownFrame, "RIGHT", 0, 0) + icon:SetPoint("LEFT", button.spellCooldownFrame, "LEFT", 0, 0) elseif (mod(j-1,Gladdy.db.cooldownMaxIconsPerLine) == 0) then - if (Gladdy.db.cooldownYPos == "BOTTOM" or Gladdy.db.cooldownYPos == "LEFT" or Gladdy.db.cooldownYPos == "RIGHT") then + if (Gladdy.db.cooldownYGrowDirection == "DOWN") then icon:SetPoint("TOP", button.spellCooldownFrame["icon" .. o], "BOTTOM", 0, -Gladdy.db.cooldownIconPadding) else icon:SetPoint("BOTTOM", button.spellCooldownFrame["icon" .. o], "TOP", 0, Gladdy.db.cooldownIconPadding) @@ -195,11 +168,11 @@ function Cooldowns:UpdateFrame(unit) icon:SetPoint("RIGHT", button.spellCooldownFrame["icon" .. j - 1], "LEFT", -Gladdy.db.cooldownIconPadding, 0) end end - if (Gladdy.db.cooldownXPos == "LEFT") then + if (Gladdy.db.cooldownXGrowDirection == "RIGHT") then if (j == 1) then icon:SetPoint("LEFT", button.spellCooldownFrame, "LEFT", 0, 0) elseif (mod(j-1,Gladdy.db.cooldownMaxIconsPerLine) == 0) then - if (Gladdy.db.cooldownYPos == "BOTTOM" or Gladdy.db.cooldownYPos == "LEFT" or Gladdy.db.cooldownYPos == "RIGHT") then + if (Gladdy.db.cooldownYGrowDirection == "DOWN") then icon:SetPoint("TOP", button.spellCooldownFrame["icon" .. o], "BOTTOM", 0, -Gladdy.db.cooldownIconPadding) else icon:SetPoint("BOTTOM", button.spellCooldownFrame["icon" .. o], "TOP", 0, Gladdy.db.cooldownIconPadding) @@ -561,31 +534,6 @@ function Cooldowns:CooldownUsed(unit, unitClass, spellId, expirationTimeInSecond end ]] end -local function option(params) - local defaults = { - get = function(info) - local key = info.arg or info[#info] - return Gladdy.dbi.profile[key] - end, - set = function(info, value) - local key = info.arg or info[#info] - Gladdy.dbi.profile[key] = value - if Gladdy.db.cooldownYPos == "LEFT" then - Gladdy.db.cooldownXPos = "RIGHT" - elseif Gladdy.db.cooldownYPos == "RIGHT" then - Gladdy.db.cooldownXPos = "LEFT" - end - Gladdy:UpdateFrame() - end, - } - - for k, v in pairs(params) do - defaults[k] = v - end - - return defaults -end - function Cooldowns:GetOptions() return { headerCooldown = { @@ -644,15 +592,6 @@ function Cooldowns:GetOptions() step = 0.1, width = "full", }), - cooldownMaxIconsPerLine = Gladdy:option({ - type = "range", - name = L["Max Icons per row"], - order = 7, - min = 3, - max = 14, - step = 1, - width = "full", - }), }, }, cooldown = { @@ -745,37 +684,44 @@ function Cooldowns:GetOptions() name = L["Position"], order = 2, }, - cooldownYPos = option({ + cooldownYGrowDirection = Gladdy:option({ type = "select", - name = L["Anchor"], - desc = L["Anchor of the cooldown icons"], + name = L["Vertical Grow Direction"], + desc = L["Vertical Grow Direction of the cooldown icons"], order = 3, values = { - ["TOP"] = L["Top"], - ["BOTTOM"] = L["Bottom"], + ["UP"] = L["Up"], + ["DOWN"] = L["Down"], + }, + }), + cooldownXGrowDirection = Gladdy:option({ + type = "select", + name = L["Horizontal Grow Direction"], + desc = L["Horizontal Grow Direction of the cooldown icons"], + order = 4, + values = { ["LEFT"] = L["Left"], ["RIGHT"] = L["Right"], }, }), - cooldownXPos = Gladdy:option({ - type = "select", - name = L["Grow Direction"], - desc = L["Grow Direction of the cooldown icons"], - order = 4, - values = { - ["LEFT"] = L["Right"], - ["RIGHT"] = L["Left"], - }, + cooldownMaxIconsPerLine = Gladdy:option({ + type = "range", + name = L["Max Icons per row"], + order = 5, + min = 3, + max = 14, + step = 1, + width = "full", }), headerOffset = { type = "header", name = L["Offset"], - order = 5, + order = 10, }, cooldownXOffset = Gladdy:option({ type = "range", name = L["Horizontal offset"], - order = 6, + order = 11, min = -400, max = 400, step = 0.1, @@ -784,7 +730,7 @@ function Cooldowns:GetOptions() cooldownYOffset = Gladdy:option({ type = "range", name = L["Vertical offset"], - order = 7, + order = 12, min = -400, max = 400, step = 0.1, @@ -913,4 +859,67 @@ function Gladdy:UpdateTestCooldowns(i) Cooldowns:CooldownUsed(unit, button.race, spellID) end end +end + +--------------------------- + +-- LAGACY HANDLER + +--------------------------- + +function Cooldowns:LegacySetPosition(button, unit) + if Gladdy.db.newLayout then + return Gladdy.db.newLayout + end + button.spellCooldownFrame:ClearAllPoints() + local powerBarHeight = Gladdy.db.powerBarEnabled and (Gladdy.db.powerBarHeight + 1) or 0 + local horizontalMargin = (Gladdy.db.highlightInset and 0 or Gladdy.db.highlightBorderSize) + + local offset = 0 + if (Gladdy.db.cooldownXPos == "RIGHT") then + offset = -(Gladdy.db.cooldownSize * Gladdy.db.cooldownWidthFactor) + end + + if Gladdy.db.cooldownYPos == "TOP" then + Gladdy.db.cooldownYGrowDirection = "UP" + if Gladdy.db.cooldownXPos == "RIGHT" then + Gladdy.db.cooldownXGrowDirection = "LEFT" + button.spellCooldownFrame:SetPoint("BOTTOMRIGHT", button.healthBar, "TOPRIGHT", Gladdy.db.cooldownXOffset + offset, horizontalMargin + Gladdy.db.cooldownYOffset) + else + Gladdy.db.cooldownXGrowDirection = "RIGHT" + button.spellCooldownFrame:SetPoint("BOTTOMLEFT", button.healthBar, "TOPLEFT", Gladdy.db.cooldownXOffset + offset, horizontalMargin + Gladdy.db.cooldownYOffset) + end + elseif Gladdy.db.cooldownYPos == "BOTTOM" then + Gladdy.db.cooldownYGrowDirection = "DOWN" + if Gladdy.db.cooldownXPos == "RIGHT" then + Gladdy.db.cooldownXGrowDirection = "LEFT" + button.spellCooldownFrame:SetPoint("TOPRIGHT", button.healthBar, "BOTTOMRIGHT", Gladdy.db.cooldownXOffset + offset, -horizontalMargin + Gladdy.db.cooldownYOffset - powerBarHeight) + else + Gladdy.db.cooldownXGrowDirection = "RIGHT" + button.spellCooldownFrame:SetPoint("TOPLEFT", button.healthBar, "BOTTOMLEFT", Gladdy.db.cooldownXOffset + offset, -horizontalMargin + Gladdy.db.cooldownYOffset - powerBarHeight) + end + elseif Gladdy.db.cooldownYPos == "LEFT" then + Gladdy.db.cooldownYGrowDirection = "DOWN" + local anchor = Gladdy:GetAnchor(unit, "LEFT") + if anchor == Gladdy.buttons[unit].healthBar then + Gladdy.db.cooldownXGrowDirection = "LEFT" + button.spellCooldownFrame:SetPoint("RIGHT", anchor, "LEFT", -(horizontalMargin + Gladdy.db.padding) + Gladdy.db.cooldownXOffset + offset, Gladdy.db.cooldownYOffset) + else + Gladdy.db.cooldownXGrowDirection = "LEFT" + button.spellCooldownFrame:SetPoint("RIGHT", anchor, "LEFT", -Gladdy.db.padding + Gladdy.db.cooldownXOffset + offset, Gladdy.db.cooldownYOffset) + end + elseif Gladdy.db.cooldownYPos == "RIGHT" then + Gladdy.db.cooldownYGrowDirection = "DOWN" + local anchor = Gladdy:GetAnchor(unit, "RIGHT") + if anchor == Gladdy.buttons[unit].healthBar then + Gladdy.db.cooldownXGrowDirection = "RIGHT" + button.spellCooldownFrame:SetPoint("LEFT", anchor, "RIGHT", horizontalMargin + Gladdy.db.padding + Gladdy.db.cooldownXOffset + offset, Gladdy.db.cooldownYOffset) + else + Gladdy.db.cooldownXGrowDirection = "RIGHT" + button.spellCooldownFrame:SetPoint("LEFT", anchor, "RIGHT", Gladdy.db.padding + Gladdy.db.cooldownXOffset + offset, Gladdy.db.cooldownYOffset) + end + end + LibStub("AceConfigRegistry-3.0"):NotifyChange("Gladdy") + + return Gladdy.db.newLayout end \ No newline at end of file diff --git a/Modules/Diminishings.lua b/Modules/Diminishings.lua index 069efb0..5c3acd9 100644 --- a/Modules/Diminishings.lua +++ b/Modules/Diminishings.lua @@ -30,7 +30,7 @@ local Diminishings = Gladdy:NewModule("Diminishings", nil, { drFont = "DorisPP", drFontColor = { r = 1, g = 1, b = 0, a = 1 }, drFontScale = 1, - drCooldownPos = "RIGHT", + drGrowDirection = "RIGHT", drXOffset = 0, drYOffset = 0, drIconSize = 36, @@ -49,7 +49,7 @@ local Diminishings = Gladdy:NewModule("Diminishings", nil, { drLevelTextFontScale = 1, drWidthFactor = 1, drCategories = defaultCategories(), - drDuration = 18 + drDuration = 18, }) local function getDiminishColor(dr) @@ -179,34 +179,18 @@ function Diminishings:UpdateFrame(unit) drFrame:Show() end - drFrame:ClearAllPoints() - local horizontalMargin = (Gladdy.db.highlightInset and 0 or Gladdy.db.highlightBorderSize) + Gladdy.db.padding - if (Gladdy.db.drCooldownPos == "LEFT") then - local anchor = Gladdy:GetAnchor(unit, "LEFT") - if anchor == Gladdy.buttons[unit].healthBar then - drFrame:SetPoint("RIGHT", anchor, "LEFT", -horizontalMargin + Gladdy.db.drXOffset, Gladdy.db.drYOffset) - else - drFrame:SetPoint("RIGHT", anchor, "LEFT", -Gladdy.db.padding + Gladdy.db.drXOffset, Gladdy.db.drYOffset) - end - end - if (Gladdy.db.drCooldownPos == "RIGHT") then - local anchor = Gladdy:GetAnchor(unit, "RIGHT") - if anchor == Gladdy.buttons[unit].healthBar then - drFrame:SetPoint("LEFT", anchor, "RIGHT", horizontalMargin + Gladdy.db.drXOffset, Gladdy.db.drYOffset) - else - drFrame:SetPoint("LEFT", anchor, "RIGHT", Gladdy.db.padding + Gladdy.db.drXOffset, Gladdy.db.drYOffset) - end - end - - drFrame:SetWidth(Gladdy.db.drIconSize * 16) + drFrame:SetWidth(Gladdy.db.drIconSize) drFrame:SetHeight(Gladdy.db.drIconSize) + + Gladdy:SetPosition(drFrame, unit, "drXOffset", "drYOffset", Diminishings:LegacySetPosition(drFrame, unit), Diminishings) + if (unit == "arena1") then - Gladdy:CreateMover(drFrame, "drXOffset", "drYOffset", L["Diminishings"], - Gladdy.db.drCooldownPos == "RIGHT" and {"TOPLEFT", "TOPLEFT"} or {"TOPRIGHT", "TOPRIGHT"}, --point - Gladdy.db.drIconSize * Gladdy.db.drWidthFactor, -- width + Gladdy:CreateMover(drFrame,"drXOffset", "drYOffset", L["Diminishings"], + Gladdy.db.drGrowDirection == "RIGHT" and {"TOPLEFT", "TOPLEFT"} or {"TOPRIGHT", "TOPRIGHT"}, + Gladdy.db.drIconSize * Gladdy.db.drWidthFactor, Gladdy.db.drIconSize, - 0, --xoffset - 0) --yoffset + 0, + 0) end for i = 1, 16 do @@ -245,15 +229,15 @@ function Diminishings:UpdateFrame(unit) end icon:ClearAllPoints() - if (Gladdy.db.drCooldownPos == "LEFT") then + if (Gladdy.db.drGrowDirection == "LEFT") then if (i == 1) then - icon:SetPoint("TOPRIGHT") + icon:SetPoint("TOPRIGHT", drFrame, "TOPRIGHT") else icon:SetPoint("RIGHT", drFrame["icon" .. (i - 1)], "LEFT", -Gladdy.db.drIconPadding, 0) end else if (i == 1) then - icon:SetPoint("TOPLEFT") + icon:SetPoint("TOPLEFT", drFrame, "TOPLEFT") else icon:SetPoint("LEFT", drFrame["icon" .. (i - 1)], "RIGHT", Gladdy.db.drIconPadding, 0) end @@ -383,13 +367,15 @@ function Diminishings:Positionate(unit) if (icon.active) then icon:ClearAllPoints() - if (Gladdy.db.drCooldownPos == "LEFT") then + if (Gladdy.db.newLayout and Gladdy.db.drGrowDirection == "LEFT" + or not Gladdy.db.newLayout and Gladdy.db.drCooldownPos == "LEFT") then if (not lastIcon) then icon:SetPoint("TOPRIGHT") else icon:SetPoint("RIGHT", lastIcon, "LEFT", -Gladdy.db.drIconPadding, 0) end - else + elseif (Gladdy.db.newLayout and Gladdy.db.drGrowDirection == "RIGHT" + or not Gladdy.db.newLayout and Gladdy.db.drCooldownPos == "RIGHT") then if (not lastIcon) then icon:SetPoint("TOPLEFT") else @@ -562,21 +548,16 @@ function Diminishings:GetOptions() name = L["Position"], order = 20, }, - drCooldownPos = Gladdy:option({ + drGrowDirection = Gladdy:option({ type = "select", - name = L["DR Cooldown position"], - desc = L["Position of the cooldown icons"], + name = L["DR Grow Direction"], + desc = L["Grow Direction of the dr icons"], order = 21, values = { ["LEFT"] = L["Left"], ["RIGHT"] = L["Right"], }, }), - headerOffset = { - type = "header", - name = L["Offset"], - order = 22, - }, drXOffset = Gladdy:option({ type = "range", name = L["Horizontal offset"], @@ -791,3 +772,36 @@ function Diminishings:GetDRIcons(category) end return icons end + +--------------------------- + +-- LAGACY HANDLER + +--------------------------- + +function Diminishings:LegacySetPosition(drFrame, unit) + if Gladdy.db.newLayout then + return Gladdy.db.newLayout + end + drFrame:ClearAllPoints() + local horizontalMargin = (Gladdy.db.highlightInset and 0 or Gladdy.db.highlightBorderSize) + Gladdy.db.padding + if (Gladdy.db.drCooldownPos == "LEFT") then + Gladdy.db.drGrowDirection = "LEFT" + local anchor = Gladdy:GetAnchor(unit, "LEFT") + if anchor == Gladdy.buttons[unit].healthBar then + drFrame:SetPoint("RIGHT", anchor, "LEFT", -horizontalMargin + Gladdy.db.drXOffset, Gladdy.db.drYOffset) + else + drFrame:SetPoint("RIGHT", anchor, "LEFT", -Gladdy.db.padding + Gladdy.db.drXOffset, Gladdy.db.drYOffset) + end + end + if (Gladdy.db.drCooldownPos == "RIGHT") then + Gladdy.db.drGrowDirection = "RIGHT" + local anchor = Gladdy:GetAnchor(unit, "RIGHT") + if anchor == Gladdy.buttons[unit].healthBar then + drFrame:SetPoint("LEFT", anchor, "RIGHT", horizontalMargin + Gladdy.db.drXOffset, Gladdy.db.drYOffset) + else + drFrame:SetPoint("LEFT", anchor, "RIGHT", Gladdy.db.padding + Gladdy.db.drXOffset, Gladdy.db.drYOffset) + end + end + return Gladdy.db.newLayout +end \ No newline at end of file diff --git a/Modules/ExportImport.lua b/Modules/ExportImport.lua index 330499a..889189a 100644 --- a/Modules/ExportImport.lua +++ b/Modules/ExportImport.lua @@ -95,7 +95,21 @@ local deletedOptions = { -- backwards compatibility impconc = true, dragonsbreath = true, freezetrap = true, - repentance = true + --deleted db options + castBarPos = true, + buffsCooldownPos = true, + buffsBuffsCooldownPos = true, + classIconPos = true, + ciAnchor = true, + ciPos = true, + cooldownYPos = true, + cooldownXPos = true, + drCooldownPos = true, + racialAnchor = true, + racialPos = true, + trinketPos = true, + padding = true, + growUp = true, } local function checkIsDeletedOption(k, str, msg, errorFound, errorMsg) @@ -208,6 +222,9 @@ end function ExportImport:ApplyImport(t, table, str) if str == nil then str = "Gladdy.db" + if (not t.newLayout) then + table.newLayout = false + end end for k,v in pairs(t) do if type(v) == "table" then diff --git a/Modules/Pets.lua b/Modules/Pets.lua index 36a32d2..b9406e9 100644 --- a/Modules/Pets.lua +++ b/Modules/Pets.lua @@ -253,10 +253,13 @@ function Pets:UpdateFrame(unitId) self.frames[unit]:SetWidth(Gladdy.db.petWidth) self.frames[unit]:SetHeight(Gladdy.db.petHeight) - self.frames[unit]:SetPoint("LEFT", Gladdy.buttons[unitId].healthBar, "RIGHT", Gladdy.db.petXOffset, Gladdy.db.petYOffset) + + Gladdy:SetPosition(self.frames[unit], unitId, "petXOffset", "petYOffset", Pets:LegacySetPosition(unit, unitId), Pets) + if (Gladdy.db.petGroup) then if (unit == "arenapet1") then - self.frames[unit]:SetPoint("LEFT", Gladdy.buttons[unitId].healthBar, "RIGHT", Gladdy.db.petXOffset, Gladdy.db.petYOffset) + self.frames[unit]:ClearAllPoints() + self.frames[unit]:SetPoint("TOPLEFT", Gladdy.buttons[unitId].healthBar, "TOPLEFT", Gladdy.db.petXOffset, Gladdy.db.petYOffset) else local previousPet = "arenapet" .. string_gsub(unit, "arenapet", "") - 1 self.frames[unit]:ClearAllPoints() @@ -264,7 +267,7 @@ function Pets:UpdateFrame(unitId) end else self.frames[unit]:ClearAllPoints() - self.frames[unit]:SetPoint("LEFT", Gladdy.buttons[unitId].healthBar, "RIGHT", Gladdy.db.petXOffset, Gladdy.db.petYOffset) + self.frames[unit]:SetPoint("TOPLEFT", Gladdy.buttons[unitId].healthBar, "TOPLEFT", Gladdy.db.petXOffset, Gladdy.db.petYOffset) end healthBar.portrait:SetHeight(Gladdy.db.petHeight) @@ -587,4 +590,31 @@ function Pets:GetOptions() }, }, } +end + +--------------------------- + +-- LAGACY HANDLER + +--------------------------- + +function Pets:LegacySetPosition(unit, unitId) + if Gladdy.db.newLayout then + return Gladdy.db.newLayout + end + self.frames[unit]:ClearAllPoints() + self.frames[unit]:SetPoint("LEFT", Gladdy.buttons[unitId].healthBar, "RIGHT", Gladdy.db.petXOffset, Gladdy.db.petYOffset) + if (Gladdy.db.petGroup) then + if (unit == "arenapet1") then + self.frames[unit]:SetPoint("LEFT", Gladdy.buttons[unitId].healthBar, "RIGHT", Gladdy.db.petXOffset, Gladdy.db.petYOffset) + else + local previousPet = "arenapet" .. string_gsub(unit, "arenapet", "") - 1 + self.frames[unit]:ClearAllPoints() + self.frames[unit]:SetPoint("TOPLEFT", self.frames[previousPet], "BOTTOMLEFT", 0, - Gladdy.db.petMargin) + end + else + self.frames[unit]:ClearAllPoints() + self.frames[unit]:SetPoint("LEFT", Gladdy.buttons[unitId].healthBar, "RIGHT", Gladdy.db.petXOffset, Gladdy.db.petYOffset) + end + return Gladdy.db.newLayout end \ No newline at end of file diff --git a/Modules/Racial.lua b/Modules/Racial.lua index aaf3731..b03c6d2 100644 --- a/Modules/Racial.lua +++ b/Modules/Racial.lua @@ -5,14 +5,12 @@ local GetTime = GetTime local Gladdy = LibStub("Gladdy") local L = Gladdy.L -local Racial = Gladdy:NewModule("Racial", nil, { +local Racial = Gladdy:NewModule("Racial", 79, { racialFont = "DorisPP", racialFontScale = 1, racialEnabled = true, racialSize = 60 + 20 + 1, racialWidthFactor = 0.9, - racialAnchor = "trinket", - racialPos = "RIGHT", racialXOffset = 0, racialYOffset = 0, racialBorderStyle = "Interface\\AddOns\\Gladdy\\Images\\Border_rounded_blp", @@ -22,7 +20,6 @@ local Racial = Gladdy:NewModule("Racial", nil, { racialCooldownNumberAlpha = 1, }) -local ANCHORS = { ["LEFT"] = "RIGHT", ["RIGHT"] = "LEFT", ["BOTTOM"] = "TOP", ["TOP"] = "BOTTOM"} function Racial:Initialize() self.frames = {} @@ -121,16 +118,15 @@ function Racial:UpdateFrame(unit) racial.texture.overlay:SetTexture(Gladdy.db.racialBorderStyle) racial.texture.overlay:SetVertexColor(Gladdy.db.racialBorderColor.r, Gladdy.db.racialBorderColor.g, Gladdy.db.racialBorderColor.b, Gladdy.db.racialBorderColor.a) - racial:ClearAllPoints() - local parent = Gladdy.buttons[unit][Gladdy.db.racialAnchor] - if (Gladdy.db.racialPos == "RIGHT") then - racial:SetPoint(ANCHORS[Gladdy.db.racialPos], parent, Gladdy.db.racialPos, Gladdy.db.padding + Gladdy.db.racialXOffset, Gladdy.db.racialYOffset) - elseif (Gladdy.db.racialPos == "LEFT") then - racial:SetPoint(ANCHORS[Gladdy.db.racialPos], parent, Gladdy.db.racialPos, -Gladdy.db.padding + Gladdy.db.racialXOffset, Gladdy.db.racialYOffset) - elseif (Gladdy.db.racialPos == "TOP") then - racial:SetPoint(ANCHORS[Gladdy.db.racialPos], parent, Gladdy.db.racialPos, Gladdy.db.racialXOffset, Gladdy.db.padding + Gladdy.db.racialYOffset) - elseif (Gladdy.db.racialPos == "BOTTOM") then - racial:SetPoint(ANCHORS[Gladdy.db.racialPos], parent, Gladdy.db.racialPos, Gladdy.db.racialXOffset, -Gladdy.db.padding + Gladdy.db.racialYOffset) + Gladdy:SetPosition(racial, unit, "racialXOffset", "racialYOffset", Racial:LegacySetPosition(racial, unit), Racial) + + if (unit == "arena1") then + Gladdy:CreateMover(racial,"racialXOffset", "racialYOffset", L["Racial"], + {"TOPLEFT", "TOPLEFT"}, + Gladdy.db.racialSize * Gladdy.db.racialWidthFactor, + Gladdy.db.racialSize, + 0, + 0) end if (Gladdy.db.racialEnabled == false) then @@ -394,4 +390,30 @@ function Racial:GetOptions() }, }, } +end + +--------------------------- + +-- LAGACY HANDLER + +--------------------------- + +function Racial:LegacySetPosition(racial, unit) + if Gladdy.db.newLayout then + return Gladdy.db.newLayout + end + + local ANCHORS = { ["LEFT"] = "RIGHT", ["RIGHT"] = "LEFT", ["BOTTOM"] = "TOP", ["TOP"] = "BOTTOM"} + racial:ClearAllPoints() + local parent = Gladdy.buttons[unit][Gladdy.db.racialAnchor] + if (Gladdy.db.racialPos == "RIGHT") then + racial:SetPoint(ANCHORS[Gladdy.db.racialPos], parent, Gladdy.db.racialPos, Gladdy.db.padding + Gladdy.db.racialXOffset, Gladdy.db.racialYOffset) + elseif (Gladdy.db.racialPos == "LEFT") then + racial:SetPoint(ANCHORS[Gladdy.db.racialPos], parent, Gladdy.db.racialPos, -Gladdy.db.padding + Gladdy.db.racialXOffset, Gladdy.db.racialYOffset) + elseif (Gladdy.db.racialPos == "TOP") then + racial:SetPoint(ANCHORS[Gladdy.db.racialPos], parent, Gladdy.db.racialPos, Gladdy.db.racialXOffset, Gladdy.db.padding + Gladdy.db.racialYOffset) + elseif (Gladdy.db.racialPos == "BOTTOM") then + racial:SetPoint(ANCHORS[Gladdy.db.racialPos], parent, Gladdy.db.racialPos, Gladdy.db.racialXOffset, -Gladdy.db.padding + Gladdy.db.racialYOffset) + end + return Gladdy.db.newLayout end \ No newline at end of file diff --git a/Modules/Trinket.lua b/Modules/Trinket.lua index 53126e4..d3a9911 100644 --- a/Modules/Trinket.lua +++ b/Modules/Trinket.lua @@ -6,18 +6,19 @@ local GetTime = GetTime local Gladdy = LibStub("Gladdy") local L = Gladdy.L -local Trinket = Gladdy:NewModule("Trinket", nil, { +local Trinket = Gladdy:NewModule("Trinket", 80, { trinketFont = "DorisPP", trinketFontScale = 1, trinketEnabled = true, trinketSize = 60 + 20 + 1, trinketWidthFactor = 0.9, - trinketPos = "RIGHT", trinketBorderStyle = "Interface\\AddOns\\Gladdy\\Images\\Border_rounded_blp", trinketBorderColor = { r = 0, g = 0, b = 0, a = 1 }, trinketDisableCircle = false, trinketCooldownAlpha = 1, trinketCooldownNumberAlpha = 1, + trinketXOffset = 0, + trinketYOffset = 0, }) LibStub("AceComm-3.0"):Embed(Trinket) @@ -119,20 +120,15 @@ function Trinket:UpdateFrame(unit) trinket.texture.overlay:SetTexture(Gladdy.db.trinketBorderStyle) trinket.texture.overlay:SetVertexColor(Gladdy.db.trinketBorderColor.r, Gladdy.db.trinketBorderColor.g, Gladdy.db.trinketBorderColor.b, Gladdy.db.trinketBorderColor.a) - trinket:ClearAllPoints() - local margin = (Gladdy.db.highlightInset and 0 or Gladdy.db.highlightBorderSize) + Gladdy.db.padding - if (Gladdy.db.classIconPos == "LEFT") then - if (Gladdy.db.trinketPos == "RIGHT") then - trinket:SetPoint("TOPLEFT", Gladdy.buttons[unit].healthBar, "TOPRIGHT", margin, 0) - else - trinket:SetPoint("TOPRIGHT", Gladdy.buttons[unit].classIcon, "TOPLEFT", -Gladdy.db.padding, 0) - end - else - if (Gladdy.db.trinketPos == "RIGHT") then - trinket:SetPoint("TOPLEFT", Gladdy.buttons[unit].classIcon, "TOPRIGHT", Gladdy.db.padding, 0) - else - trinket:SetPoint("TOPRIGHT", Gladdy.buttons[unit].healthBar, "TOPLEFT", -margin, 0) - end + Gladdy:SetPosition(trinket, unit, "trinketXOffset", "trinketYOffset", Trinket:LegacySetPosition(trinket, unit), Trinket) + + if (unit == "arena1") then + Gladdy:CreateMover(trinket,"trinketXOffset", "trinketYOffset", L["Trinket"], + {"TOPLEFT", "TOPLEFT"}, + Gladdy.db.trinketSize * Gladdy.db.trinketWidthFactor, + Gladdy.db.trinketSize, + 0, + 0) end if (Gladdy.db.trinketEnabled == false) then @@ -368,4 +364,31 @@ function Trinket:GetOptions() }, }, } +end + +--------------------------- + +-- LAGACY HANDLER + +--------------------------- + +function Trinket:LegacySetPosition(trinket, unit) + if Gladdy.db.newLayout then + return Gladdy.db.newLayout + end + trinket:ClearAllPoints() + local margin = (Gladdy.db.highlightInset and 0 or Gladdy.db.highlightBorderSize) + Gladdy.db.padding + if (Gladdy.db.classIconPos == "LEFT") then + if (Gladdy.db.trinketPos == "RIGHT") then + trinket:SetPoint("TOPLEFT", Gladdy.buttons[unit].healthBar, "TOPRIGHT", margin, 0) + else + trinket:SetPoint("TOPRIGHT", Gladdy.buttons[unit].classIcon, "TOPLEFT", -Gladdy.db.padding, 0) + end + else + if (Gladdy.db.trinketPos == "RIGHT") then + trinket:SetPoint("TOPLEFT", Gladdy.buttons[unit].classIcon, "TOPRIGHT", Gladdy.db.padding, 0) + else + trinket:SetPoint("TOPRIGHT", Gladdy.buttons[unit].healthBar, "TOPLEFT", -margin, 0) + end + end end \ No newline at end of file diff --git a/Options.lua b/Options.lua index 4eec88a..0dd3bfe 100644 --- a/Options.lua +++ b/Options.lua @@ -47,16 +47,16 @@ Gladdy.defaults = { hideBlizzard = "arena", x = 0, y = 0, - growUp = false, growDirection = "BOTTOM", frameScale = 1, pixelPerfect = false, - padding = 1, barWidth = 180, bottomMargin = 2, statusbarBorderOffset = 6, timerFormat = Gladdy.TIMER_FORMAT.tenths, backgroundColor = {r = 0, g = 0, b = 0, a = 0}, + newLayout = false, + showMover = true, }, } @@ -215,19 +215,45 @@ function Gladdy:SetupOptions() get = getOpt, set = setOpt, args = { - test = { + lock = { order = 1, width = 0.7, + name = Gladdy.db.locked and L["Unlock frame"] or L["Lock frame"], + desc = L["Toggle if frame can be moved"], + type = "execute", + func = function() + Gladdy.db.locked = not Gladdy.db.locked + Gladdy:UpdateFrame() + self.options.args.lock.name = Gladdy.db.locked and L["Unlock frame"] or L["Lock frame"] + end, + }, + showMover = { + order = 2, + width = 0.7, + name = Gladdy.db.showMover and L["Hide Mover"] or L["Show Mover"], + desc = L["Toggle to show Mover Frames"], + type = "execute", + func = function() + Gladdy.db.showMover = not Gladdy.db.showMover + Gladdy:UpdateFrame() + self.options.args.showMover.name = Gladdy.db.showMover and L["Hide Mover"] or L["Show Mover"] + end, + }, + test = { + order = 2, + width = 0.7, name = L["Test"], + desc = L["Show Test frames"], type = "execute", func = function() Gladdy:ToggleFrame(3) end, }, hide = { - order = 2, + order = 3, width = 0.7, name = L["Hide"], + desc = L["Hide frames"], type = "execute", func = function() Gladdy:Reset() @@ -235,16 +261,17 @@ function Gladdy:SetupOptions() end, }, reload = { - order = 3, + order = 4, width = 0.7, name = L["ReloadUI"], + desc = L["Reloads the UI"], type = "execute", func = function() ReloadUI() end, }, version = { - order = 4, + order = 5, width = 1, type = "description", name = " Gladdy v" .. Gladdy.version_num .. "-" .. Gladdy.version_releaseType @@ -256,12 +283,6 @@ function Gladdy:SetupOptions() childGroups = "tab", order = 5, args = { - locked = { - type = "toggle", - name = L["Lock frame"], - desc = L["Toggle if frame can be moved"], - order = 1, - }, growDirection = { type = "select", name = L["Grow Direction"], @@ -315,15 +336,6 @@ function Gladdy:SetupOptions() max = 2, step = .01, }, - padding = { - type = "range", - name = L["Frame padding"], - desc = L["Padding of the frame"], - order = 6, - min = 0, - max = 20, - step = 1, - }, barWidth = { type = "range", name = L["Frame width"], From 114c0ac96d39eca8ef2e618c7c17e0e8fa0b2883 Mon Sep 17 00:00:00 2001 From: Sumsebrum Date: Tue, 11 Jan 2022 00:29:30 +0100 Subject: [PATCH 22/65] clean up --- EventListener.lua | 2 +- Modules/Cooldowns.lua | 5 +-- Modules/ExportImport.lua | 5 ++- Modules/Healthbar.lua | 16 +------- Modules/XiconProfiles.lua | 81 ++++++--------------------------------- 5 files changed, 19 insertions(+), 90 deletions(-) diff --git a/EventListener.lua b/EventListener.lua index e867791..aef0ae1 100644 --- a/EventListener.lua +++ b/EventListener.lua @@ -136,7 +136,7 @@ function EventListener:COMBAT_LOG_EVENT_UNFILTERED() else unitClass = Gladdy.buttons[srcUnit].race end - Cooldowns:CooldownUsed(srcUnit, unitClass, spellId, spellName) + Cooldowns:CooldownUsed(srcUnit, unitClass, spellId) Gladdy:DetectSpec(srcUnit, Gladdy.specSpells[spellName]) end end diff --git a/Modules/Cooldowns.lua b/Modules/Cooldowns.lua index f5803da..3ca104e 100644 --- a/Modules/Cooldowns.lua +++ b/Modules/Cooldowns.lua @@ -42,7 +42,7 @@ local function getDefaultCooldown() if spellName then cooldowns[tostring(spellId)] = true else - Gladdy:Print("spellid does not exist " .. spellId) + Gladdy:Debug("ERROR", "spellid does not exist " .. spellId) end end end @@ -79,7 +79,7 @@ function Cooldowns:Initialize() self.cooldownSpellIds[spellName] = spellId self.spellTextures[spellId] = texture else - Gladdy:Print("spellid does not exist " .. spellId) + Gladdy:Debug("ERROR", "spellid does not exist " .. spellId) end end end @@ -373,7 +373,6 @@ function Cooldowns:DetectSpec(unit, spec) end end end - --end end ---------------------- --- RACE FUNCTIONALITY diff --git a/Modules/ExportImport.lua b/Modules/ExportImport.lua index 889189a..2ac8895 100644 --- a/Modules/ExportImport.lua +++ b/Modules/ExportImport.lua @@ -72,6 +72,7 @@ importButton:SetCallback("OnClick", function(widget) Gladdy:Reset() Gladdy:HideFrame() Gladdy:ToggleFrame(3) + LibStub("AceConfigRegistry-3.0"):NotifyChange("Gladdy") end) import:AddChild(importButton) import.button = importButton @@ -117,7 +118,7 @@ local function checkIsDeletedOption(k, str, msg, errorFound, errorMsg) for key, _ in pairs(deletedOptions) do if str_match(k, key) then isDeleted = true - Gladdy:Warn("found deleted option =", str .. "." .. k) + Gladdy:Debug("WARN", "found deleted option =", str .. "." .. k) end end if errorFound then @@ -231,7 +232,7 @@ function ExportImport:ApplyImport(t, table, str) if (table[k] ~= nil) then ExportImport:ApplyImport(v, table[k], str .. "." .. k) else - Gladdy:Warn("ApplyImport failed for", str .. "." .. k) + Gladdy:Debug("ERROR", "ApplyImport failed for", str .. "." .. k) end else diff --git a/Modules/Healthbar.lua b/Modules/Healthbar.lua index 31e850a..bda54ef 100644 --- a/Modules/Healthbar.lua +++ b/Modules/Healthbar.lua @@ -251,7 +251,7 @@ function Healthbar:ENEMY_SPOTTED(unit) healthBar.hp:SetValue(health) Healthbar:SetHealthText(healthBar, health, healthMax) end - if Gladdy.db.healthName and not Gladdy.db.healthNameToArenaId then + if button.name and Gladdy.db.healthName and not Gladdy.db.healthNameToArenaId then healthBar.nameText:SetText(button.name) end @@ -504,20 +504,6 @@ function Healthbar:GetOptions() width = "full", disabled = function() return not Gladdy.db.healthName end }), - healthActual = option({ - type = "toggle", - name = L["Show the actual health"], - desc = L["Show the actual health on the health bar"], - order = 4, - width = "full", - }), - healthMax = option({ - type = "toggle", - name = L["Show max health"], - desc = L["Show max health on the health bar"], - order = 5, - width = "full", - }), healthPercentage = option({ type = "toggle", name = L["Show health percentage"], diff --git a/Modules/XiconProfiles.lua b/Modules/XiconProfiles.lua index ab871d9..bd12442 100644 --- a/Modules/XiconProfiles.lua +++ b/Modules/XiconProfiles.lua @@ -4,74 +4,17 @@ local L = Gladdy.L local XiconProfiles = Gladdy:NewModule("XiconProfiles", nil, { }) -function XiconProfiles:ApplyKlimp() - local deserialized = Gladdy.modules["Export Import"]:Decode(Gladdy:GetKlimpProfile()) - if deserialized then - Gladdy.modules["Export Import"]:ApplyImport(deserialized, Gladdy.db) - end - Gladdy:Reset() - Gladdy:HideFrame() - Gladdy:ToggleFrame(3) -end - -function XiconProfiles:ApplyKnall() - local deserialized = Gladdy.modules["Export Import"]:Decode(Gladdy:GetKnallProfile()) - if deserialized then - Gladdy.modules["Export Import"]:ApplyImport(deserialized, Gladdy.db) - end - Gladdy:Reset() - Gladdy:HideFrame() - Gladdy:ToggleFrame(3) -end - -function XiconProfiles:ApplyClassic() - local deserialized = Gladdy.modules["Export Import"]:Decode(Gladdy:GetClassicProfile()) - if deserialized then - Gladdy.modules["Export Import"]:ApplyImport(deserialized, Gladdy.db) - end - Gladdy:Reset() - Gladdy:HideFrame() - Gladdy:ToggleFrame(3) -end - -function XiconProfiles:ApplyClassicNoPet() - local deserialized = Gladdy.modules["Export Import"]:Decode(Gladdy:GetClassicProfileNoPet()) - if deserialized then - Gladdy.modules["Export Import"]:ApplyImport(deserialized, Gladdy.db) - end - Gladdy:Reset() - Gladdy:HideFrame() - Gladdy:ToggleFrame(3) -end - -function XiconProfiles:ApplyBlizz() - local deserialized = Gladdy.modules["Export Import"]:Decode(Gladdy:GetBlizzardProfile()) - if deserialized then - Gladdy.modules["Export Import"]:ApplyImport(deserialized, Gladdy.db) - end - Gladdy:Reset() - Gladdy:HideFrame() - Gladdy:ToggleFrame(3) -end - -function XiconProfiles:ApplyRukk() - local deserialized = Gladdy.modules["Export Import"]:Decode(Gladdy:GetRukkProfile()) - if deserialized then - Gladdy.modules["Export Import"]:ApplyImport(deserialized, Gladdy.db) - end - Gladdy:Reset() - Gladdy:HideFrame() - Gladdy:ToggleFrame(3) -end - -function XiconProfiles:ApplyMir() - local deserialized = Gladdy.modules["Export Import"]:Decode(Gladdy:GetMirProfile()) +local function applyProfile(profileString) + local deserialized = Gladdy.modules["Export Import"]:Decode(profileString) if deserialized then Gladdy.modules["Export Import"]:ApplyImport(deserialized, Gladdy.db) end Gladdy:Reset() Gladdy:HideFrame() Gladdy:ToggleFrame(3) + Gladdy.options.args.lock.name = Gladdy.db.locked and L["Unlock frame"] or L["Lock frame"] + Gladdy.options.args.showMover.name = Gladdy.db.showMover and L["Hide Mover"] or L["Show Mover"] + LibStub("AceConfigRegistry-3.0"):NotifyChange("Gladdy") end function XiconProfiles:GetOptions() @@ -85,7 +28,7 @@ function XiconProfiles:GetOptions() type = "execute", func = function() Gladdy.dbi:ResetProfile(Gladdy.dbi:GetCurrentProfile()) - XiconProfiles:ApplyBlizz() + applyProfile(Gladdy:GetBlizzardProfile()) end, name = " ", desc = "Blizzard " .. L["Profile"], @@ -104,7 +47,7 @@ function XiconProfiles:GetOptions() type = "execute", func = function() Gladdy.dbi:ResetProfile(Gladdy.dbi:GetCurrentProfile()) - XiconProfiles:ApplyClassic() + applyProfile(Gladdy:GetClassicProfile()) end, name = " ", desc = "Classic " .. L["Profile"], @@ -123,7 +66,7 @@ function XiconProfiles:GetOptions() type = "execute", func = function() Gladdy.dbi:ResetProfile(Gladdy.dbi:GetCurrentProfile()) - XiconProfiles:ApplyClassicNoPet() + applyProfile(Gladdy:GetClassicProfileNoPet()) end, name = " ", desc = "Classic " .. L["Profile"] .. L[" No Pet"], @@ -142,7 +85,7 @@ function XiconProfiles:GetOptions() type = "execute", func = function() Gladdy.dbi:ResetProfile(Gladdy.dbi:GetCurrentProfile()) - XiconProfiles:ApplyKnall() + applyProfile(Gladdy:GetKnallProfile()) end, name = " ", desc = "Knall's " .. L["Profile"], @@ -161,7 +104,7 @@ function XiconProfiles:GetOptions() type = "execute", func = function() Gladdy.dbi:ResetProfile(Gladdy.dbi:GetCurrentProfile()) - XiconProfiles:ApplyKlimp() + applyProfile(Gladdy:GetKlimpProfile()) end, image = "Interface\\AddOns\\Gladdy\\Images\\BasicProfiles\\Klimp1.blp", imageWidth = 350, @@ -180,7 +123,7 @@ function XiconProfiles:GetOptions() type = "execute", func = function() Gladdy.dbi:ResetProfile(Gladdy.dbi:GetCurrentProfile()) - XiconProfiles:ApplyRukk() + applyProfile(Gladdy:GetRukkProfile()) end, name = " ", desc = "Rukk1's " .. L["Profile"], @@ -199,7 +142,7 @@ function XiconProfiles:GetOptions() type = "execute", func = function() Gladdy.dbi:ResetProfile(Gladdy.dbi:GetCurrentProfile()) - XiconProfiles:ApplyMir() + applyProfile(Gladdy:GetMirProfile()) end, name = " ", desc = "Mir's " .. L["Profile"], From 1c42523a2ff8de061e790a0160872e7262092774 Mon Sep 17 00:00:00 2001 From: Sumsebrum Date: Tue, 11 Jan 2022 00:30:32 +0100 Subject: [PATCH 23/65] bump version + backwards compatible imports --- Gladdy.lua | 4 ++-- Modules/ExportImport.lua | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Gladdy.lua b/Gladdy.lua index d117a96..53160f2 100644 --- a/Gladdy.lua +++ b/Gladdy.lua @@ -30,8 +30,8 @@ local LibStub = LibStub local MAJOR, MINOR = "Gladdy", 4 local Gladdy = LibStub:NewLibrary(MAJOR, MINOR) local L -Gladdy.version_major_num = 1 -Gladdy.version_minor_num = 0.22 +Gladdy.version_major_num = 2 +Gladdy.version_minor_num = 0.00 Gladdy.version_num = Gladdy.version_major_num + Gladdy.version_minor_num Gladdy.version_releaseType = RELEASE_TYPES.release Gladdy.version = PREFIX .. Gladdy.version_num .. "-" .. Gladdy.version_releaseType diff --git a/Modules/ExportImport.lua b/Modules/ExportImport.lua index 2ac8895..3cc5676 100644 --- a/Modules/ExportImport.lua +++ b/Modules/ExportImport.lua @@ -133,8 +133,8 @@ function ExportImport:CheckDeserializedOptions(tbl, refTbl, str) if str == nil and not tbl.version_major_num then return false, "Version conflict: version_major_num not seen" end - if str == nil and tbl.version_major_num ~= Gladdy.version_major_num then - return false, "Version conflict: " .. tbl.version_major_num .. " ~= " .. Gladdy.version_major_num + if str == nil and tbl.version_major_num > Gladdy.version_major_num then + return false, "Version conflict: Major v" .. tbl.version_major_num .. " ~= v" .. Gladdy.version_major_num end if str == nil then str = "Gladdy.db" From 2571df30527e428cc970fef3b2c7ce60e52b2712 Mon Sep 17 00:00:00 2001 From: Sumsebrum Date: Tue, 11 Jan 2022 03:00:57 +0100 Subject: [PATCH 24/65] cleanup --- Modules/Healthbar.lua | 42 ++++-------------------------------------- Modules/Trinket.lua | 1 - 2 files changed, 4 insertions(+), 39 deletions(-) diff --git a/Modules/Healthbar.lua b/Modules/Healthbar.lua index bda54ef..8338a1a 100644 --- a/Modules/Healthbar.lua +++ b/Modules/Healthbar.lua @@ -129,7 +129,7 @@ function Healthbar.OnEvent(self, event, unit) end function Healthbar:SetHealthText(healthBar, health, healthMax) - local healthText + local healthText = "" local healthPercentage = floor(health * 100 / healthMax) if health == 0 and UnitExists(healthBar.unit) and UnitIsDeadOrGhost(healthBar.unit) then @@ -137,25 +137,8 @@ function Healthbar:SetHealthText(healthBar, health, healthMax) return end - if (Gladdy.db.healthActual) then - healthText = healthMax > 999 and ("%.1fk"):format(health / 1000) or health - end - - if (Gladdy.db.healthMax) then - local text = healthMax > 999 and ("%.1fk"):format(healthMax / 1000) or healthMax - if (healthText) then - healthText = ("%s/%s"):format(healthText, text) - else - healthText = text - end - end - if (Gladdy.db.healthPercentage) then - if (healthText) then - healthText = ("%s (%d%%)"):format(healthText, healthPercentage) - else - healthText = ("%d%%"):format(healthPercentage) - end + healthText = ("%d%%"):format(healthPercentage) end healthBar.healthText:SetText(healthText) @@ -271,27 +254,10 @@ function Healthbar:UNIT_HEALTH(unit, health, healthMax) Gladdy:SendMessage("UNIT_HEALTH", unit, health, healthMax) local healthPercentage = floor(health * 100 / healthMax) - local healthText - - if (Gladdy.db.healthActual) then - healthText = healthMax > 999 and ("%.1fk"):format(health / 1000) or health - end - - if (Gladdy.db.healthMax) then - local text = healthMax > 999 and ("%.1fk"):format(healthMax / 1000) or healthMax - if (healthText) then - healthText = ("%s/%s"):format(healthText, text) - else - healthText = text - end - end + local healthText = "" if (Gladdy.db.healthPercentage) then - if (healthText) then - healthText = ("%s (%d%%)"):format(healthText, healthPercentage) - else - healthText = ("%d%%"):format(healthPercentage) - end + healthText = ("%d%%"):format(healthPercentage) end healthBar.healthText:SetText(healthText) diff --git a/Modules/Trinket.lua b/Modules/Trinket.lua index d3a9911..928d30c 100644 --- a/Modules/Trinket.lua +++ b/Modules/Trinket.lua @@ -20,7 +20,6 @@ local Trinket = Gladdy:NewModule("Trinket", 80, { trinketXOffset = 0, trinketYOffset = 0, }) -LibStub("AceComm-3.0"):Embed(Trinket) function Trinket:Initialize() self.frames = {} From 6b94fdc32f245c8b798c88401211a73684f762bd Mon Sep 17 00:00:00 2001 From: Sumsebrum Date: Tue, 11 Jan 2022 03:01:16 +0100 Subject: [PATCH 25/65] fix minor castbar issue --- Modules/Castbar.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Modules/Castbar.lua b/Modules/Castbar.lua index 1eb5b70..7cb266d 100644 --- a/Modules/Castbar.lua +++ b/Modules/Castbar.lua @@ -220,7 +220,7 @@ function Castbar.OnUpdate(castBar, elapsed) castBar.spark:SetPoint("CENTER", castBar.bar, "LEFT", castBar.spark.position, 0) castBar.spark:Show() end - elseif ( GetTime() < castBar.holdTime ) then + elseif ( castBar.holdTime and GetTime() < castBar.holdTime ) then castBar.timeText:Hide() castBar.spark:Hide() return From 65daef4cd447491c0409324669d573318a831e68 Mon Sep 17 00:00:00 2001 From: Sumsebrum Date: Tue, 11 Jan 2022 03:01:32 +0100 Subject: [PATCH 26/65] fix announcement throttle --- Modules/Announcements.lua | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/Modules/Announcements.lua b/Modules/Announcements.lua index 4b63595..3c8b376 100644 --- a/Modules/Announcements.lua +++ b/Modules/Announcements.lua @@ -145,7 +145,7 @@ function Announcements:SPELL_INTERRUPT(destUnit,spellID,spellName,spellSchool,ex if (not button or not Gladdy.db.announcements.spellInterrupt) then return end - self:Send(L["INTERRUPTED: %s (%s)"]:format(extraSpellName, button.name or ""), 3, RAID_CLASS_COLORS[button.class]) + self:Send(L["INTERRUPTED: %s (%s)"]:format(extraSpellName, button.name or ""), nil, RAID_CLASS_COLORS[button.class]) end function Announcements:CheckDrink(unit, aura) @@ -167,9 +167,12 @@ function Announcements:Send(msg, throttle, color) if (throttle and throttle > 0) then if (not self.throttled[msg]) then self.throttled[msg] = GetTime() + throttle + Gladdy:Debug("INFO", msg, "- NOT THROTTLED -", self.throttled[msg]) elseif (self.throttled[msg] < GetTime()) then - self.throttled[msg] = nil + Gladdy:Debug("INFO", msg, "- THROTTLED OVER -", self.throttled[msg]) + self.throttled[msg] = GetTime() + throttle else + Gladdy:Debug("INFO", msg, "- THROTTLED -", self.throttled[msg]) return end end From c3a7c6cbc87884670ead83420f398c586b3a17ea Mon Sep 17 00:00:00 2001 From: Sumsebrum Date: Tue, 11 Jan 2022 04:26:59 +0100 Subject: [PATCH 27/65] shadowsight: - reset timer when shadowsight buff is active - add a second timer - show one or two timers option added --- Modules/ShadowsightTimer.lua | 304 ++++++++++++++++++++++++++--------- 1 file changed, 228 insertions(+), 76 deletions(-) diff --git a/Modules/ShadowsightTimer.lua b/Modules/ShadowsightTimer.lua index edd280e..d16c21d 100644 --- a/Modules/ShadowsightTimer.lua +++ b/Modules/ShadowsightTimer.lua @@ -1,6 +1,12 @@ local floor, str_find, pairs = math.floor, string.find, pairs local CreateFrame = CreateFrame +--------------------------- + +-- CORE + +--------------------------- + local Gladdy = LibStub("Gladdy") local L = Gladdy.L local ShadowsightTimer = Gladdy:NewModule("Shadowsight Timer", nil, { @@ -12,8 +18,14 @@ local ShadowsightTimer = Gladdy:NewModule("Shadowsight Timer", nil, { shadowsightTimerX = 0, shadowsightTimerY = 0, shadowsightAnnounce = true, + shadowsightTimerStartTime = 91, + shadowsightTimerResetTime = 120, + shadowsightTimerShowTwoTimer = false, }) +-- /run LibStub("Gladdy").modules["Shadowsight Timer"]:AURA_GAIN(nil, nil, 34709) +-- /run LibStub("Gladdy").modules["Shadowsight Timer"].timerFrame1:SetAlpha(0) + function ShadowsightTimer:OnEvent(event, ...) self[event](self, ...) end @@ -22,20 +34,120 @@ function ShadowsightTimer:Initialize() self.locale = Gladdy:GetArenaTimer() self:RegisterMessage("JOINED_ARENA") self:RegisterMessage("AURA_GAIN") - self:CreateTimerFrame() + self:CreateAnchor() end +function ShadowsightTimer:Reset() + self.anchor:Hide() + for i=1,2 do + self["timerFrame" .. i].active = false + self["timerFrame" .. i]:SetScript("OnUpdate", nil) + self["timerFrame" .. i].font:SetTextColor(1, 0.8, 0) + end + self:UnregisterEvent("CHAT_MSG_BG_SYSTEM_NEUTRAL") + self:SetScript("OnEvent", nil) +end + +--------------------------- + +-- FRAME SETUP + +--------------------------- + +function ShadowsightTimer:CreateTimerFrame(anchor, name, points) + local backdrop = { + bgFile = "Interface/Tooltips/UI-Tooltip-Background", + edgeFile = "", + tile = true, tileSize = 16, edgeSize = 10, + insets = {left = 0, right = 0, top = 0, bottom = 0} + } + self[name] = CreateFrame("Frame", nil, anchor, BackdropTemplateMixin and "BackdropTemplate") + self[name]:SetPoint(points[1], anchor, points[2]) + self[name]:SetBackdrop(backdrop) + self[name]:SetBackdropColor(0,0,0,0.8) + self[name]:SetHeight(17) + self[name]:SetWidth(35) + + self[name].texture = self[name]:CreateTexture(nil,"OVERLAY") + self[name].texture:SetWidth(16) + self[name].texture:SetHeight(16) + self[name].texture:SetTexture("Interface\\Icons\\Spell_Shadow_EvilEye") + self[name].texture:SetTexCoord(0.125,0.875,0.125,0.875) + self[name].texture:SetPoint("RIGHT", self[name], "LEFT") + + self[name].font = self[name]:CreateFontString(nil,"OVERLAY","GameFontNormal") + self[name].font:SetPoint("LEFT", 5, 0) + self[name].font:SetJustifyH("LEFT") + self[name].font:SetTextColor(1, 0.8, 0) +end + +function ShadowsightTimer:CreateAnchor() + self.anchor = CreateFrame("Frame") + self.anchor:SetMovable(true) + self.anchor:EnableMouse(true) + self.anchor:SetWidth(35) + self.anchor:SetHeight(17) + self.anchor:SetPoint(Gladdy.db.shadowsightTimerRelPoint1, nil, Gladdy.db.shadowsightTimerRelPoint, Gladdy.db.shadowsightTimerX, Gladdy.db.shadowsightTimerY) + self.anchor:SetScript("OnMouseDown",function(self) self:StartMoving() end) + self.anchor:SetScript("OnMouseUp",function(self) + self:StopMovingOrSizing() + Gladdy.db.shadowsightTimerRelPoint1,_,Gladdy.db.shadowsightTimerRelPoint2,Gladdy.db.shadowsightTimerX,Gladdy.db.shadowsightTimerY = self:GetPoint() + end) + self.anchor:SetScale(Gladdy.db.shadowsightTimerScale) + self.anchor:Hide() + + self:CreateTimerFrame(self.anchor, "timerFrame1", {"TOP", "TOP"}) + local show = Gladdy.db.shadowsightTimerShowTwoTimer + self:CreateTimerFrame(show and self.timerFrame1 or self.anchor, "timerFrame2", show and {"TOP", "BOTTOM"} or {"TOP", "TOP"}) +end + +function ShadowsightTimer:UpdateFrameOnce() + self.anchor:EnableMouse(not Gladdy.db.shadowsightTimerLocked) + if Gladdy.db.shadowsightTimerEnabled then + self.anchor:SetScale(Gladdy.db.shadowsightTimerScale) + self.anchor:ClearAllPoints() + self.anchor:SetPoint(Gladdy.db.shadowsightTimerRelPoint1, nil, Gladdy.db.shadowsightTimerRelPoint2, Gladdy.db.shadowsightTimerX, Gladdy.db.shadowsightTimerY) + if Gladdy.frame.testing or Gladdy.curBracket then + self.anchor:Show() + end + if Gladdy.db.shadowsightTimerShowTwoTimer then + self.anchor:SetHeight(34) + self.timerFrame2:ClearAllPoints() + self.timerFrame2:SetPoint("TOP", self.timerFrame1, "BOTTOM") + ShadowsightTimer:NotifyStart() + else + self.anchor:SetHeight(17) + self.timerFrame2:ClearAllPoints() + self.timerFrame2:SetPoint("TOP", self.anchor, "TOP") + ShadowsightTimer:NotifyStart() + end + else + self.anchor:SetScale(Gladdy.db.shadowsightTimerScale) + self.anchor:ClearAllPoints() + self.anchor:SetPoint(Gladdy.db.shadowsightTimerRelPoint1, nil, Gladdy.db.shadowsightTimerRelPoint2, Gladdy.db.shadowsightTimerX, Gladdy.db.shadowsightTimerY) + self.anchor:Hide() + end +end + +--------------------------- + +-- EVENT HANDLING + +--------------------------- + function ShadowsightTimer:JOINED_ARENA() self:RegisterEvent("CHAT_MSG_BG_SYSTEM_NEUTRAL") self:SetScript("OnEvent", ShadowsightTimer.OnEvent) - self.timerFrame.font:SetText("1:30") - self.timerFrame.font:SetTextColor(1, 0.8, 0) - self.timerFrame:Show() + for i=1,2 do + self["timerFrame" .. i].font:SetText("1:30") + self["timerFrame" .. i].font:SetTextColor(1, 0.8, 0) + end + self.anchor:Show() end function ShadowsightTimer:AURA_GAIN(unit, auraType, spellID) if (spellID == 34709) then - --TODO reset timer after 15s + self:Start(Gladdy.db.shadowsightTimerResetTime, self:GetHiddenTimer()) end end @@ -43,96 +155,53 @@ function ShadowsightTimer:CHAT_MSG_BG_SYSTEM_NEUTRAL(msg) for k,v in pairs(self.locale) do if str_find(msg, v) then if k == 0 then - self:Start() + self:Start(nil, self.timerFrame1) + self:Start(nil, self.timerFrame2) end end end end +--------------------------- + +-- TEST + +--------------------------- + function ShadowsightTimer:Test() if Gladdy.db.shadowsightTimerEnabled then - self.timerFrame:Show() - self:Start() + self.anchor:Show() + ShadowsightTimer:JOINED_ARENA() + self:Start(20, self.timerFrame1) + self:Start(25, self.timerFrame2) end end -function ShadowsightTimer:Reset() - self.timerFrame:Hide() - self.timerFrame:SetScript("OnUpdate", nil) - self.timerFrame.font:SetTextColor(1, 0.8, 0) -end +--------------------------- -function ShadowsightTimer:CreateTimerFrame() - self.timerFrame = CreateFrame("Frame", nil, UIParent, BackdropTemplateMixin and "BackdropTemplate") - self.timerFrame:SetPoint(Gladdy.db.shadowsightTimerRelPoint1, nil, Gladdy.db.shadowsightTimerRelPoint, Gladdy.db.shadowsightTimerX, Gladdy.db.shadowsightTimerY) +-- TIMER - local backdrop = { - bgFile = "Interface/Tooltips/UI-Tooltip-Background", - edgeFile = "", - tile = true, tileSize = 16, edgeSize = 10, - insets = {left = 0, right = 0, top = 0, bottom = 0} - } +--------------------------- - self.timerFrame:SetBackdrop(backdrop) - self.timerFrame:SetBackdropColor(0,0,0,0.8) - self.timerFrame:SetHeight(17) - self.timerFrame:SetWidth(35) - - self.timerFrame:SetMovable(true) - self.timerFrame:EnableMouse(true) - - self.timerFrame.texture = self.timerFrame:CreateTexture(nil,"OVERLAY") - self.timerFrame.texture:SetWidth(16) - self.timerFrame.texture:SetHeight(16) - self.timerFrame.texture:SetTexture("Interface\\Icons\\Spell_Shadow_EvilEye") - self.timerFrame.texture:SetTexCoord(0.125,0.875,0.125,0.875) - self.timerFrame.texture:SetPoint("RIGHT", self.timerFrame, "LEFT") - - self.timerFrame.font = self.timerFrame:CreateFontString(nil,"OVERLAY","GameFontNormal") - self.timerFrame.font:SetPoint("LEFT", 5, 0) - self.timerFrame.font:SetJustifyH("LEFT") - self.timerFrame.font:SetTextColor(1, 0.8, 0) - - self.timerFrame:SetScript("OnMouseDown",function(self) self:StartMoving() end) - self.timerFrame:SetScript("OnMouseUp",function(self) - self:StopMovingOrSizing() - Gladdy.db.shadowsightTimerRelPoint1,_,Gladdy.db.shadowsightTimerRelPoint2,Gladdy.db.shadowsightTimerX,Gladdy.db.shadowsightTimerY = self:GetPoint() - end) - self.timerFrame:SetScale(Gladdy.db.shadowsightTimerScale) - self.timerFrame:Hide() -end - -function ShadowsightTimer:UpdateFrameOnce() - self.timerFrame:EnableMouse(not Gladdy.db.shadowsightTimerLocked) - if Gladdy.db.shadowsightTimerEnabled then - self.timerFrame:SetScale(Gladdy.db.shadowsightTimerScale) - self.timerFrame:ClearAllPoints() - self.timerFrame:SetPoint(Gladdy.db.shadowsightTimerRelPoint1, nil, Gladdy.db.shadowsightTimerRelPoint2, Gladdy.db.shadowsightTimerX, Gladdy.db.shadowsightTimerY) - if Gladdy.frame.testing or Gladdy.curBracket then - self.timerFrame:Show() - end - else - self.timerFrame:SetScale(Gladdy.db.shadowsightTimerScale) - self.timerFrame:ClearAllPoints() - self.timerFrame:SetPoint(Gladdy.db.shadowsightTimerRelPoint1, nil, Gladdy.db.shadowsightTimerRelPoint2, Gladdy.db.shadowsightTimerX, Gladdy.db.shadowsightTimerY) - self.timerFrame:Hide() - end -end - -function ShadowsightTimer:Start() - self.timerFrame.endTime = 91 - self.timerFrame.timeSinceLastUpdate = 0 - self.timerFrame:SetScript("OnUpdate", ShadowsightTimer.OnUpdate) +function ShadowsightTimer:Start(time, frame) + frame.endTime = time or Gladdy.db.shadowsightTimerStartTime + frame.active = true + ShadowsightTimer:NotifyStart() + frame.announced = nil + frame.timeSinceLastUpdate = 0 + frame.font:SetTextColor(1, 0.8, 0) + frame:SetScript("OnUpdate", ShadowsightTimer.OnUpdate) end function ShadowsightTimer.OnUpdate(self, elapsed) self.timeSinceLastUpdate = self.timeSinceLastUpdate + elapsed; self.endTime = self.endTime - elapsed - if (self.timeSinceLastUpdate > 0.1) then + if (self.timeSinceLastUpdate > 0.01) then self.font:SetFormattedText(floor(self.endTime / 60) .. ":" .. "%02d", self.endTime - floor(self.endTime / 60) * 60) self.timeSinceLastUpdate = 0; - if floor(self.endTime) == 15 and Gladdy.db.shadowsightAnnounce then + if floor(self.endTime) == 15 and Gladdy.db.shadowsightAnnounce and not self.announced then + self.announced = true Gladdy:SendMessage("SHADOWSIGHT", L["Shadowsight up in %ds"]:format(15)) end end @@ -143,9 +212,61 @@ function ShadowsightTimer.OnUpdate(self, elapsed) self:SetScript("OnUpdate", nil) self.font:SetText("0:00") self.font:SetTextColor(0, 1, 0) + self.active = false + ShadowsightTimer:NotifyEnd() end end +function ShadowsightTimer:NotifyStart() + local show = Gladdy.db.shadowsightTimerShowTwoTimer + if self.timerFrame1.active and self.timerFrame2.active then + if self.timerFrame1.endTime < self.timerFrame2.endTime then + self.timerFrame1:SetAlpha(1) + self.timerFrame2:SetAlpha(show and 1 or 0) + else + self.timerFrame1:SetAlpha(show and 1 or 0) + self.timerFrame2:SetAlpha(1) + end + else + if self.timerFrame1.active then + self.timerFrame1:SetAlpha(1) + self.timerFrame2:SetAlpha(show and 1 or 0) + elseif self.timerFrame2.active then + self.timerFrame1:SetAlpha(show and 1 or 0) + self.timerFrame2:SetAlpha(1) + else + self.timerFrame1:SetAlpha(1) + self.timerFrame2:SetAlpha(show and 1 or 0) + end + end +end +function ShadowsightTimer:NotifyEnd() + local show = Gladdy.db.shadowsightTimerShowTwoTimer + if self.timerFrame1.active then + self.timerFrame1:SetAlpha(1) + self.timerFrame2:SetAlpha(show and 1 or 0) + elseif self.timerFrame2.active then + self.timerFrame1:SetAlpha(show and 1 or 0) + self.timerFrame2:SetAlpha(1) + else + self.timerFrame1:SetAlpha(1) + self.timerFrame2:SetAlpha(show and 1 or 0) + end +end +function ShadowsightTimer:GetHiddenTimer() + if self.timerFrame1.active and self.timerFrame2.active then + return self.timerFrame1.endTime < self.timerFrame2.endTime and self.timerFrame1 or self.timerFrame2 + else + return self.timerFrame1.active and self.timerFrame2 or self.timerFrame1 + end +end + +--------------------------- + +-- OPTIONS + +--------------------------- + function ShadowsightTimer:GetOptions() return { headerArenaCountdown = { @@ -167,21 +288,52 @@ function ShadowsightTimer:GetOptions() order = 4, width = "full", }), + shadowsightTimerShowTwoTimer = Gladdy:option({ + type = "toggle", + name = L["Show two timers"], + order = 5, + width = "full", + }), shadowsightAnnounce = Gladdy:option({ type = "toggle", name = L["Announce"], --desc = L["Turns countdown before the start of an arena match on/off."], - order = 5, + order = 6, width = "full", }), shadowsightTimerScale = Gladdy:option({ type = "range", name = L["Scale"], - order = 6, + order = 7, min = 0.1, max = 5, step = 0.1, width = "full", }), + headerTimer = { + type = "header", + name = L["Shadowsight CDs"], + order = 10, + }, + shadowsightTimerStartTime = Gladdy:option({ + type = "range", + name = L["Start Time"], + desc = L["Start time in seconds"], + min = 80, + max = 100, + order = 11, + step = 0.1, + width = "full", + }), + shadowsightTimerResetTime = Gladdy:option({ + type = "range", + name = L["Reset Time"], + desc = L["Reset time in seconds"], + min = 110, + max = 130, + order = 12, + step = 0.1, + width = "full", + }), } end \ No newline at end of file From b5f67d066fe42acf7cefc53ab68b6c42b2a2083b Mon Sep 17 00:00:00 2001 From: Sumsebrum Date: Tue, 11 Jan 2022 04:27:16 +0100 Subject: [PATCH 28/65] fix castbar hiding --- Modules/Castbar.lua | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/Modules/Castbar.lua b/Modules/Castbar.lua index 7cb266d..f4c6086 100644 --- a/Modules/Castbar.lua +++ b/Modules/Castbar.lua @@ -232,7 +232,7 @@ function Castbar.OnUpdate(castBar, elapsed) castBar.fadeOut = nil; castBar.timeText:Show() castBar.spark:Show() - castBar:Hide(); + castBar:SetAlpha(0) end end end @@ -241,7 +241,7 @@ Castbar.CastEventsFunc = {} Castbar.CastEventsFunc["UNIT_SPELLCAST_START"] = function(castBar, event, ...) local name, text, texture, startTime, endTime, isTradeSkill, castID = UnitCastingInfo(castBar.unit) if ( not name or (not castBar.showTradeSkills and isTradeSkill)) then - castBar:Hide() + castBar:SetAlpha(0) return end @@ -272,7 +272,7 @@ Castbar.CastEventsFunc["UNIT_SPELLCAST_SUCCEEDED"] = function(castBar, event, .. end Castbar.CastEventsFunc["UNIT_SPELLCAST_STOP"] = function(castBar, event, ...) if ( not castBar:IsVisible() ) then - castBar:Hide() + castBar:SetAlpha(0) end if ( (castBar.casting and event == "UNIT_SPELLCAST_STOP" and select(2, ...) == castBar.castID) or (castBar.channeling and event == "UNIT_SPELLCAST_CHANNEL_STOP") ) then @@ -320,7 +320,7 @@ Castbar.CastEventsFunc["UNIT_SPELLCAST_DELAYED"] = function(castBar, event, ...) if ( not name or (not castBar.showTradeSkills and isTradeSkill)) then -- if there is no name, there is no bar - castBar:Hide() + castBar:SetAlpha(0) return end castBar.value = (GetTime() - (startTime / 1000)) @@ -338,7 +338,7 @@ Castbar.CastEventsFunc["UNIT_SPELLCAST_CHANNEL_START"] = function(castBar, event local name, text, texture, startTime, endTime, isTradeSkill, spellID = UnitChannelInfo(castBar.unit) if ( not name or (not castBar.showTradeSkills and isTradeSkill)) then - castBar:Hide() + castBar:SetAlpha(0) return end if ( castBar.spark ) then @@ -356,7 +356,7 @@ Castbar.CastEventsFunc["UNIT_SPELLCAST_CHANNEL_UPDATE"] = function(castBar, even if ( castBar:IsShown() ) then local name, text, texture, startTime, endTime, isTradeSkill = UnitChannelInfo(castBar.unit) if ( not name or (not castBar.showTradeSkills and isTradeSkill)) then - castBar:Hide() + castBar:SetAlpha(0) return end castBar.value = ((endTime / 1000) - GetTime()) From 2e3fb06269fc11b5275656e67304196f2c878133 Mon Sep 17 00:00:00 2001 From: Sumsebrum Date: Tue, 11 Jan 2022 04:27:45 +0100 Subject: [PATCH 29/65] DR Level text default on --- Modules/Diminishings.lua | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Modules/Diminishings.lua b/Modules/Diminishings.lua index 5c3acd9..a2b89f1 100644 --- a/Modules/Diminishings.lua +++ b/Modules/Diminishings.lua @@ -44,9 +44,9 @@ local Diminishings = Gladdy:NewModule("Diminishings", nil, { drHalfColor = {r = 1, g = 1, b = 0, a = 1 }, drQuarterColor = {r = 1, g = 0.7, b = 0, a = 1 }, drNullColor = {r = 1, g = 0, b = 0, a = 1 }, - drLevelTextEnabled = false, + drLevelTextEnabled = true, drLevelTextFont = "DorisPP", - drLevelTextFontScale = 1, + drLevelTextFontScale = 0.8, drWidthFactor = 1, drCategories = defaultCategories(), drDuration = 18, From 035942abbe570568241458e03b34c1433b1188b5 Mon Sep 17 00:00:00 2001 From: Sumsebrum Date: Tue, 11 Jan 2022 04:33:41 +0100 Subject: [PATCH 30/65] bump version --- Gladdy.toc | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Gladdy.toc b/Gladdy.toc index cfb91f4..5113781 100644 --- a/Gladdy.toc +++ b/Gladdy.toc @@ -1,7 +1,7 @@ -## Interface: 20502 +## Interface: 20503 ## Title: Gladdy - TBC -## Version: 1.22-Release -## Notes: The most powerful arena AddOn for WoW 2.5.1 +## Version: 2.00-Release +## Notes: The most powerful arena AddOn for WoW 2.5.3 ## Author: XiconQoo, DnB_Junkee, Knall ## X-Email: contact me on discord Knall#1751 ## SavedVariables: GladdyXZ From 5766484f92810d75aeefe839d7980d4a16f3e170 Mon Sep 17 00:00:00 2001 From: Sumsebrum Date: Wed, 12 Jan 2022 02:24:46 +0100 Subject: [PATCH 31/65] detach auras and interrupts --- Modules/Auras.lua | 320 ++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 284 insertions(+), 36 deletions(-) diff --git a/Modules/Auras.lua b/Modules/Auras.lua index 63c2b4f..2e694cd 100644 --- a/Modules/Auras.lua +++ b/Modules/Auras.lua @@ -41,7 +41,17 @@ local Auras = Gladdy:NewModule("Auras", nil, { auraListDefault = defaultSpells(), auraListInterrupts = defaultInterrupts(), auraInterruptColorsEnabled = true, - auraInterruptColors = Gladdy:GetSpellSchoolColors() + auraInterruptColors = Gladdy:GetSpellSchoolColors(), + auraDetached = false, + auraXOffset = 0, + auraYOffset = 0, + auraSize = 60 + 20 + 1, + auraWidthFactor = 0.9, + auraInterruptDetached = false, + auraInterruptXOffset = 0, + auraInterruptYOffset = 0, + auraInterruptSize = 60 + 20 + 1, + auraInterruptWidthFactor = 0.9, }) function Auras:Initialize() @@ -57,25 +67,30 @@ function Auras:Initialize() end function Auras:CreateFrame(unit) - local auraFrame = CreateFrame("Frame", nil, Gladdy.modules["Class Icon"].frames[unit]) + local auraFrame = CreateFrame("Frame", nil, Gladdy.buttons[unit]) auraFrame:EnableMouse(false) auraFrame:SetFrameStrata("MEDIUM") auraFrame:SetFrameLevel(3) + auraFrame.frame = CreateFrame("Frame", nil, auraFrame) + auraFrame.frame:SetPoint("TOPLEFT", auraFrame, "TOPLEFT") + auraFrame.frame:EnableMouse(false) + auraFrame.frame:SetFrameStrata("MEDIUM") + auraFrame.frame:SetFrameLevel(3) - auraFrame.cooldown = CreateFrame("Cooldown", nil, auraFrame, "CooldownFrameTemplate") + auraFrame.cooldown = CreateFrame("Cooldown", nil, auraFrame.frame, "CooldownFrameTemplate") auraFrame.cooldown.noCooldownCount = true auraFrame.cooldown:SetFrameStrata("MEDIUM") auraFrame.cooldown:SetFrameLevel(4) auraFrame.cooldown:SetReverse(true) auraFrame.cooldown:SetHideCountdownNumbers(true) - auraFrame.cooldownFrame = CreateFrame("Frame", nil, auraFrame) + auraFrame.cooldownFrame = CreateFrame("Frame", nil, auraFrame.frame) auraFrame.cooldownFrame:ClearAllPoints() - auraFrame.cooldownFrame:SetAllPoints(auraFrame) + auraFrame.cooldownFrame:SetAllPoints(auraFrame.frame) auraFrame.cooldownFrame:SetFrameStrata("MEDIUM") auraFrame.cooldownFrame:SetFrameLevel(5) - auraFrame.icon = auraFrame:CreateTexture(nil, "BACKGROUND") + auraFrame.icon = auraFrame.frame:CreateTexture(nil, "BACKGROUND") auraFrame.icon:SetMask("Interface\\AddOns\\Gladdy\\Images\\mask") auraFrame.icon:SetAllPoints(auraFrame) @@ -98,10 +113,10 @@ function Auras:CreateFrame(unit) auraFrame:SetScript("OnUpdate", function(self, elapsed) if (self.active) then - if (self.interruptFrame.priority and self.priority < self.interruptFrame.priority) then - self:SetAlpha(0.01) + if (not Gladdy.db.auraInterruptDetached and not Gladdy.db.auraDetached and self.interruptFrame.priority and self.priority < self.interruptFrame.priority) then + self.frame:SetAlpha(0.001) else - self:SetAlpha(1) + self.frame:SetAlpha(1) end if (self.timeLeft <= 0) then Auras:AURA_FADE(self.unit, self.track) @@ -114,7 +129,7 @@ function Auras:CreateFrame(unit) self.timeLeft = self.timeLeft - elapsed end else - self:SetAlpha(0.01) + self.frame:SetAlpha(0.001) end end) @@ -125,30 +140,35 @@ function Auras:CreateFrame(unit) end function Auras:CreateInterrupt(unit) - local interruptFrame = CreateFrame("Frame", nil, Gladdy.modules["Class Icon"].frames[unit]) + local interruptFrame = CreateFrame("Frame", nil, Gladdy.buttons[unit]) interruptFrame:EnableMouse(false) interruptFrame:SetFrameStrata("MEDIUM") interruptFrame:SetFrameLevel(3) + interruptFrame.frame = CreateFrame("Frame", nil, interruptFrame) + interruptFrame.frame:SetPoint("TOPLEFT", interruptFrame, "TOPLEFT") + interruptFrame.frame:EnableMouse(false) + interruptFrame.frame:SetFrameStrata("MEDIUM") + interruptFrame.frame:SetFrameLevel(3) - interruptFrame.cooldown = CreateFrame("Cooldown", nil, interruptFrame, "CooldownFrameTemplate") + interruptFrame.cooldown = CreateFrame("Cooldown", nil, interruptFrame.frame, "CooldownFrameTemplate") interruptFrame.cooldown.noCooldownCount = true interruptFrame.cooldown:SetFrameStrata("MEDIUM") interruptFrame.cooldown:SetFrameLevel(4) interruptFrame.cooldown:SetReverse(true) interruptFrame.cooldown:SetHideCountdownNumbers(true) - interruptFrame.cooldownFrame = CreateFrame("Frame", nil, interruptFrame) + interruptFrame.cooldownFrame = CreateFrame("Frame", nil, interruptFrame.frame) interruptFrame.cooldownFrame:ClearAllPoints() - interruptFrame.cooldownFrame:SetAllPoints(interruptFrame) + interruptFrame.cooldownFrame:SetAllPoints(interruptFrame.frame) interruptFrame.cooldownFrame:SetFrameStrata("MEDIUM") interruptFrame.cooldownFrame:SetFrameLevel(5) - interruptFrame.icon = interruptFrame:CreateTexture(nil, "BACKGROUND") + interruptFrame.icon = interruptFrame.frame:CreateTexture(nil, "BACKGROUND") interruptFrame.icon:SetMask("Interface\\AddOns\\Gladdy\\Images\\mask") - interruptFrame.icon:SetAllPoints(interruptFrame) + interruptFrame.icon:SetAllPoints(interruptFrame.frame) interruptFrame.icon.overlay = interruptFrame.cooldownFrame:CreateTexture(nil, "OVERLAY") - interruptFrame.icon.overlay:SetAllPoints(interruptFrame) + interruptFrame.icon.overlay:SetAllPoints(interruptFrame.frame) interruptFrame.icon.overlay:SetTexture(Gladdy.db.buttonBorderStyle) local classIcon = Gladdy.modules["Class Icon"].frames[unit] @@ -166,23 +186,25 @@ function Auras:CreateInterrupt(unit) interruptFrame:SetScript("OnUpdate", function(self, elapsed) if (self.active) then - if (Auras.frames[self.unit].priority and self.priority <= Auras.frames[self.unit].priority) then - self:SetAlpha(0.01) + if (not Gladdy.db.auraInterruptDetached and Auras.frames[self.unit].priority and self.priority <= Auras.frames[self.unit].priority) then + self.frame:SetAlpha(0.001) else - self:SetAlpha(1) + self.frame:SetAlpha(1) end if (self.timeLeft <= 0) then self.active = false self.priority = nil self.spellSchool = nil self.cooldown:Clear() - self:SetAlpha(0.01) + self.frame:SetAlpha(0.001) else self.timeLeft = self.timeLeft - elapsed Gladdy:FormatTimer(self.text, self.timeLeft, self.timeLeft < 10) end else - self:SetAlpha(0.01) + self.priority = nil + self.spellSchool = nil + self.frame:SetAlpha(0.001) end end) @@ -197,16 +219,40 @@ function Auras:UpdateFrame(unit) return end - local width, height = Gladdy.db.classIconSize * Gladdy.db.classIconWidthFactor, Gladdy.db.classIconSize + local width, height + + if Gladdy.db.auraDetached then + width, height = Gladdy.db.auraSize * Gladdy.db.auraWidthFactor, Gladdy.db.auraSize + auraFrame:ClearAllPoints() + Gladdy:SetPosition(auraFrame, unit, "auraXOffset", "auraYOffset", true, Auras) + if (unit == "arena1") then + Gladdy:CreateMover(auraFrame, "auraXOffset", "auraYOffset", L["Auras"], + {"TOPLEFT", "TOPLEFT"}, + width, + height, + 0, + 0) + end + else + width, height = Gladdy.db.classIconSize * Gladdy.db.classIconWidthFactor, Gladdy.db.classIconSize + auraFrame:ClearAllPoints() + auraFrame:SetPoint("TOPLEFT", Gladdy.modules["Class Icon"].frames[unit], "TOPLEFT") + if auraFrame.mover then + auraFrame.mover:Hide() + end + end auraFrame:SetWidth(width) auraFrame:SetHeight(height) - auraFrame:SetAllPoints(Gladdy.modules["Class Icon"].frames[unit]) + auraFrame.frame:SetWidth(height) + auraFrame.frame:SetHeight(height) + auraFrame.cooldownFrame:ClearAllPoints() + auraFrame.cooldownFrame:SetAllPoints(auraFrame) - auraFrame.cooldown:SetWidth(width - width/16) - auraFrame.cooldown:SetHeight(height - height/16) auraFrame.cooldown:ClearAllPoints() auraFrame.cooldown:SetPoint("CENTER", auraFrame, "CENTER") + auraFrame.cooldown:SetWidth(width - width/16) + auraFrame.cooldown:SetHeight(height - height/16) auraFrame.cooldown:SetAlpha(Gladdy.db.auraCooldownAlpha) auraFrame.text:SetFont(Gladdy:SMFetch("font", "auraFont"), (width/2 - 1) * Gladdy.db.auraFontSizeScale, "OUTLINE") @@ -235,16 +281,49 @@ function Auras:UpdateInterruptFrame(unit) return end - local width, height = Gladdy.db.classIconSize * Gladdy.db.classIconWidthFactor, Gladdy.db.classIconSize + local width, height + + if Gladdy.db.auraInterruptDetached then + width, height = Gladdy.db.auraInterruptSize * Gladdy.db.auraInterruptWidthFactor, Gladdy.db.auraInterruptSize + interruptFrame:ClearAllPoints() + Gladdy:SetPosition(interruptFrame, unit, "auraInterruptXOffset", "auraInterruptYOffset", true, Auras) + if (unit == "arena1") then + Gladdy:CreateMover(interruptFrame, "auraInterruptXOffset", "auraInterruptYOffset", L["Interrupts"], + {"TOPLEFT", "TOPLEFT"}, + width, + height, + 0, + 0) + end + else + if Gladdy.db.auraDetached then + width, height = Gladdy.db.auraSize * Gladdy.db.auraWidthFactor, Gladdy.db.auraSize + interruptFrame:ClearAllPoints() + interruptFrame:SetAllPoints(self.frames[unit]) + if interruptFrame.mover then + interruptFrame.mover:Hide() + end + else + width, height = Gladdy.db.classIconSize * Gladdy.db.classIconWidthFactor, Gladdy.db.classIconSize + interruptFrame:ClearAllPoints() + interruptFrame:SetPoint("TOPLEFT", Gladdy.modules["Class Icon"].frames[unit], "TOPLEFT") + if interruptFrame.mover then + interruptFrame.mover:Hide() + end + end + end interruptFrame:SetWidth(width) interruptFrame:SetHeight(height) - interruptFrame:SetAllPoints(Gladdy.modules["Class Icon"].frames[unit]) + interruptFrame.frame:SetWidth(width) + interruptFrame.frame:SetHeight(height) + interruptFrame.cooldownFrame:ClearAllPoints() + interruptFrame.cooldownFrame:SetAllPoints(interruptFrame.frame) - interruptFrame.cooldown:SetWidth(width - width/16) - interruptFrame.cooldown:SetHeight(height - height/16) interruptFrame.cooldown:ClearAllPoints() interruptFrame.cooldown:SetPoint("CENTER", interruptFrame, "CENTER") + interruptFrame.cooldown:SetWidth(width - width/16) + interruptFrame.cooldown:SetHeight(height - height/16) interruptFrame.cooldown:SetAlpha(Gladdy.db.auraCooldownAlpha) interruptFrame.text:SetFont(Gladdy:SMFetch("font", "auraFont"), (width/2 - 1) * Gladdy.db.auraFontSizeScale, "OUTLINE") @@ -265,9 +344,15 @@ function Auras:UpdateInterruptFrame(unit) end function Auras:ResetUnit(unit) - self.frames[unit]:UnregisterAllEvents() + self.frames[unit].interruptFrame.active = false + self.frames[unit].active = false self:AURA_FADE(unit, AURA_TYPE_DEBUFF) self:AURA_FADE(unit, AURA_TYPE_BUFF) + self.frames[unit]:UnregisterAllEvents() + self.frames[unit]:Hide() + self.frames[unit].interruptFrame:Hide() + self.frames[unit].interruptFrame.priority = nil + self.frames[unit].interruptFrame.spellSchool = nil end function Auras:Test(unit) @@ -275,6 +360,10 @@ function Auras:Test(unit) self:AURA_FADE(unit, AURA_TYPE_BUFF) self:AURA_FADE(unit, AURA_TYPE_DEBUFF) + if not self.frames[unit]:IsShown() then + self.frames[unit]:Show() + self.frames[unit].interruptFrame:Show() + end --Auras local enabledDebuffs, enabledBuffs, testauras = {}, {} @@ -310,6 +399,8 @@ function Auras:Test(unit) self:AURA_GAIN(unit,v.value.track, spellid, spellName, icon, self.auras[spellName].duration, GetTime() + self.auras[spellName].duration) end end + -- /run LibStub("Gladdy").modules["Auras"]:Test("arena1") + -- /run LibStub("Gladdy"):JoinedArena() --Interrupts if (unit == "arena1" or unit == "arena3") then @@ -333,10 +424,15 @@ function Auras:Test(unit) end function Auras:JOINED_ARENA() - --[[for i=1, Gladdy.curBracket do - self.frames["arena" .. i]:RegisterUnitEvent("UNIT_AURA", "arena" .. i) - self.frames["arena" .. i]:SetScript("OnEvent", Auras.OnEvent) - end--]] + for i=1, Gladdy.curBracket do + local unit = "arena" .. i + self.frames[unit].interruptFrame.active = false + self.frames[unit].active = false + self:AURA_FADE(unit, AURA_TYPE_DEBUFF) + self:AURA_FADE(unit, AURA_TYPE_BUFF) + self.frames[unit].frame:Show() + self.frames[unit].interruptFrame.frame:Show() + end end function Auras:AURA_GAIN(unit, auraType, spellID, spellName, icon, duration, expirationTime, count, debuffType) @@ -418,7 +514,7 @@ end function Auras:SPELL_INTERRUPT(unit,spellID,spellName,spellSchool,extraSpellId,extraSpellName,extraSpellSchool) local auraFrame = self.frames[unit] - local interruptFrame = auraFrame and auraFrame.interruptFrame + local interruptFrame = auraFrame ~= nil and auraFrame.interruptFrame local button = Gladdy.buttons[unit] if (not interruptFrame) then return @@ -532,6 +628,158 @@ function Auras:GetOptions() name = L["Frame"], order = 3, args = { + detachedAuraMode = { + type = "group", + name = L["Detached Aura"], + order = 4, + args = { + headerDetachedMode = { + type = "header", + name = L["Detached Mode"], + order = 1, + }, + auraDetached = Gladdy:option({ + type = "toggle", + name = L["Aura Detached"], + order = 2, + width = "full" + }), + headerAuraSize = { + type = "header", + name = L["Size"], + order = 10, + }, + auraSize = Gladdy:option({ + type = "range", + name = L["Aura size"], + disabled = function() + return not Gladdy.db.auraDetached + end, + min = 3, + max = 100, + step = 0.1, + order = 11, + width = "full", + }), + auraWidthFactor = Gladdy:option({ + type = "range", + name = L["Aura width factor"], + disabled = function() + return not Gladdy.db.auraDetached + end, + min = 0.5, + max = 2, + step = 0.05, + order = 12, + width = "full", + }), + headerAuraPosition = { + type = "header", + name = L["Position"], + order = 20, + }, + auraXOffset = Gladdy:option({ + type = "range", + name = L["Aura X Offset"], + disabled = function() + return not Gladdy.db.auraDetached + end, + min = -1000, + max = 1000, + step = 0.01, + order = 21, + width = "full", + }), + auraYOffset = Gladdy:option({ + type = "range", + name = L["Aura Y Offset"], + disabled = function() + return not Gladdy.db.auraDetached + end, + min = -1000, + max = 1000, + step = 0.01, + order = 22, + width = "full", + }), + } + }, + detachedInterruptMode = { + type = "group", + name = L["Detached Interrupt"], + order = 5, + args = { + headerDetachedMode = { + type = "header", + name = L["Detached Mode"], + order = 1, + }, + auraInterruptDetached = Gladdy:option({ + type = "toggle", + name = L["Interrupt Detached"], + order = 2, + width = "full" + }), + headerAuraSize = { + type = "header", + name = L["Size"], + order = 10, + }, + auraInterruptSize = Gladdy:option({ + type = "range", + name = L["Interrupt size"], + disabled = function() + return not Gladdy.db.auraInterruptDetached + end, + min = 3, + max = 100, + step = 0.1, + order = 11, + width = "full", + }), + auraInterruptWidthFactor = Gladdy:option({ + type = "range", + name = L["Interrupt width factor"], + disabled = function() + return not Gladdy.db.auraInterruptDetached + end, + min = 0.5, + max = 2, + step = 0.05, + order = 12, + width = "full", + }), + headerAuraPosition = { + type = "header", + name = L["Position"], + order = 20, + }, + auraInterruptXOffset = Gladdy:option({ + type = "range", + name = L["Interrupt X Offset"], + disabled = function() + return not Gladdy.db.auraInterruptDetached + end, + min = -1000, + max = 1000, + step = 0.01, + order = 21, + width = "full", + }), + auraInterruptYOffset = Gladdy:option({ + type = "range", + name = L["Interrupt Y Offset"], + disabled = function() + return not Gladdy.db.auraInterruptDetached + end, + min = -1000, + max = 1000, + step = 0.01, + order = 22, + width = "full", + }), + } + }, cooldown = { type = "group", name = L["Cooldown"], From 91f7fcb998e5d7df5eee11bd5f2dc9413786f5ff Mon Sep 17 00:00:00 2001 From: Sumsebrum Date: Wed, 12 Jan 2022 02:25:11 +0100 Subject: [PATCH 32/65] classIcon add enable option --- Modules/Classicon.lua | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/Modules/Classicon.lua b/Modules/Classicon.lua index 8890d5b..6599650 100644 --- a/Modules/Classicon.lua +++ b/Modules/Classicon.lua @@ -5,6 +5,7 @@ local CreateFrame = CreateFrame local GetSpellInfo = GetSpellInfo local L = Gladdy.L local Classicon = Gladdy:NewModule("Class Icon", 81, { + classIconEnabled = true, classIconSize = 60 + 20 + 1, classIconWidthFactor = 0.9, classIconBorderStyle = "Interface\\AddOns\\Gladdy\\Images\\Border_rounded_blp", @@ -129,6 +130,11 @@ function Classicon:UpdateFrame(unit) classIcon.texture.overlay:SetTexture(Gladdy.db.classIconBorderStyle) classIcon.texture.overlay:SetVertexColor(Gladdy.db.classIconBorderColor.r, Gladdy.db.classIconBorderColor.g, Gladdy.db.classIconBorderColor.b, Gladdy.db.classIconBorderColor.a) + if Gladdy.db.classIconEnabled then + classIcon:Show() + else + classIcon:Hide() + end end function Classicon:ENEMY_SPOTTED(unit) @@ -170,11 +176,16 @@ function Classicon:GetOptions() name = L["Class Icon"], order = 2, }, + classIconEnabled = Gladdy:option({ + type = "toggle", + name = L["Class Icon Enabled"], + order = 3, + }), classIconSpecIcon = { type = "toggle", name = L["Show Spec Icon"], desc = L["Shows Spec Icon once spec is detected"], - order = 3, + order = 4, get = function() return Gladdy.db.classIconSpecIcon end, set = function(_, value) Gladdy.db.classIconSpecIcon = value @@ -208,9 +219,9 @@ function Classicon:GetOptions() classIconSize = Gladdy:option({ type = "range", name = L["Icon size"], - min = 1, + min = 3, max = 100, - step = 1, + step = .1, order = 3, width = "full", }), From 2c4308712d987f09c537d4b8010799f3cd84b246 Mon Sep 17 00:00:00 2001 From: Sumsebrum Date: Wed, 12 Jan 2022 02:25:40 +0100 Subject: [PATCH 33/65] hide AnnouncementFrame when not in arena --- Modules/ArenaCountDown.lua | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Modules/ArenaCountDown.lua b/Modules/ArenaCountDown.lua index 38b6076..c02c72d 100644 --- a/Modules/ArenaCountDown.lua +++ b/Modules/ArenaCountDown.lua @@ -92,6 +92,7 @@ end function ACDFrame:JOINED_ARENA() if Gladdy.db.countdown then + self.ACDNumFrame:Show() self:RegisterEvent("CHAT_MSG_BG_SYSTEM_NEUTRAL") self:SetScript("OnEvent", ACDFrame.OnEvent) self.endTime = GetTime() + 70 @@ -152,6 +153,7 @@ function ACDFrame:Reset() self:UnregisterEvent("CHAT_MSG_BG_SYSTEM_NEUTRAL") self:SetScript("OnUpdate", nil) self.hidden = true; + self.ACDNumFrame:Hide() self.ACDNumTens:Hide(); self.ACDNumOnes:Hide(); self.ACDNumOne:Hide(); From b351bd9c2317021e49bd2082fafeb50f31de027b Mon Sep 17 00:00:00 2001 From: Sumsebrum Date: Wed, 12 Jan 2022 07:33:20 +0100 Subject: [PATCH 34/65] update Readme v2.00 --- README.md | 56 ++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 55 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index b427e3d..801c4c2 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ # Gladdy - TBC ### The most powerful arena addon for WoW TBC 2.5.1 -## [v1.22-Release Download Here](https://github.com/XiconQoo/Gladdy-TBC/releases/download/v1.22-Release/Gladdy_TBC-Classic_v1.22-Release.zip) +## [v2.00-Release Download Here](https://github.com/XiconQoo/Gladdy-TBC/releases/download/v2.00-Release/Gladdy_TBC-Classic_v2.00-Release.zip) ###### Please consider donating if you like my work @@ -68,9 +68,63 @@ Thank you! - **Klimp** (thanks for all the suggestions and active feedback) - **the whole TBC addons 2.4.3 discord** (thanks for the support and great community, especially the MVPs) - **Hydra** (thanks for constructive feedback and suggestions) +- **Xyz** (thanks for suggestions) ### Changes +### v2.00-Release +- major release version set to v2 + - this will mean, that export strings will still be backwards compatible, but not forward (v2 String cant be imported into v1 Strings but vice versa) +- big overhaul of positioning elements added! All elements besides HP and PowerBar can be moved separately + - added Mover Frames for Auras, Interrupts, (De)Buffs, CastBar, ClassIcon, CombatIndicator, Cooldowns, DRs, Pets, Racial, Trinket + - this will hopefully make configuration a lot easier +- SpecDetection: + - fixed spec detection for Paladins + - added following spells for better spec detection: + - Expose Weakness (Survival Hunter) + - Slow (Arcane Mage) + - Improved Blink (Fire Mage) + - Vindication (Retribution Paladin) + - Holy Shield (Protection Paladin) + - Vampiric Embrace (Shadow Priest) + - Blade Flurry (Combat Rogue) + - Unleashed Rage (Enhancement Shaman) + - Flurry (Enhancement Shaman) + - Shamanistic Rage (Enhancement Shaman) + - Healing Way (Restoration Shaman) + - Totem of Wrath (Elemental Shaman) + - Dark Pact (Affliction Warlock) + - Conflagate (Destruction Warlock) + - Shield Slam (Protection Warrior) +- Cooldowns: + - added Fear Ward and Fear Ward Cooldown Detection in case it was used before arena + - added following cooldowns: + - Scare Beast (Hunter) + - Feign Death (Hunter) + - Viper Sting (Hunter) + - Flare (Hunter) + - Fear Ward (Priest) + - Shadow Word: Death (Priest) + - Evocation (Mage) + - Grounding Totem (Shaman) + - Spell Lock (Warlock) + - Devour Magic (Warlock) + - Intercept (Warrior) +- Auras/Interrupts: + - can now be detached from ClassIcon and positioned/scaled anywhere separately + - added Auras: + - Scare Beast (Hunter) + - Fear Ward (Priest) +- Pixel Perfect option added (makes your Gladdy Frames pixel perfect - no more wierd scaling interferences) +- Pets can be grouped (not perfect yet, but a first step) +- added DR-Level Text (thanks https://github.com/ManneN1) +- added zhCN Locale (thanks https://github.com/veiz) +- Shadowsight: + - reset timer when buff was taken + - add a configurable 2nd timer or show one timer with closest CD +- fixed some DR-categories (Hibernate/Chastice/Dragonsbreath/ImpConcussiveShot/Counterattack) +- ClassIcon can be disabled + ### v1.22-Release - fixed import for some localizations not working - added cooldown number alpha configurations for Auras, BuffsDebuffs, Cooldowns, Diminishings, Racial & Trinket From 61e49ffb8c0fc738b8abf98c8ad35245937c2d4d Mon Sep 17 00:00:00 2001 From: Sumsebrum Date: Wed, 12 Jan 2022 16:09:47 +0100 Subject: [PATCH 35/65] fix auras not showing --- Modules/Auras.lua | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Modules/Auras.lua b/Modules/Auras.lua index 2e694cd..cb75260 100644 --- a/Modules/Auras.lua +++ b/Modules/Auras.lua @@ -430,8 +430,8 @@ function Auras:JOINED_ARENA() self.frames[unit].active = false self:AURA_FADE(unit, AURA_TYPE_DEBUFF) self:AURA_FADE(unit, AURA_TYPE_BUFF) - self.frames[unit].frame:Show() - self.frames[unit].interruptFrame.frame:Show() + self.frames[unit]:Show() + self.frames[unit].interruptFrame:Show() end end From 978ba56f85a6fbf800d4b38117b6d9999678ed9a Mon Sep 17 00:00:00 2001 From: Sumsebrum Date: Wed, 12 Jan 2022 16:11:10 +0100 Subject: [PATCH 36/65] fix cooldowns not showing on reloadui during arena --- Gladdy.lua | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Gladdy.lua b/Gladdy.lua index 53160f2..e378938 100644 --- a/Gladdy.lua +++ b/Gladdy.lua @@ -422,6 +422,7 @@ function Gladdy:PLAYER_REGEN_ENABLED() self.startTest = nil end self.frame:Show() + self:SendMessage("JOINED_ARENA") self.showFrame = nil end if self.hideFrame then @@ -508,13 +509,13 @@ function Gladdy:JoinedArena() end end - self:SendMessage("JOINED_ARENA") if InCombatLockdown() then Gladdy:Print("Gladdy frames show as soon as you leave combat") self.showFrame = true else self:UpdateFrame() self.frame:Show() + self:SendMessage("JOINED_ARENA") end for i=1, self.curBracket do self.buttons["arena" .. i]:SetAlpha(1) From 114a7b14e48b824883647f86d768e0c39b6295e0 Mon Sep 17 00:00:00 2001 From: Sumsebrum Date: Wed, 12 Jan 2022 16:15:53 +0100 Subject: [PATCH 37/65] fix CLEU destUnit events --- EventListener.lua | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/EventListener.lua b/EventListener.lua index aef0ae1..257bf5d 100644 --- a/EventListener.lua +++ b/EventListener.lua @@ -103,19 +103,19 @@ function EventListener:COMBAT_LOG_EVENT_UNFILTERED() if destUnit then -- diminish tracker - if (Gladdy.db.drEnabled and (eventType == "SPELL_AURA_REMOVED" or eventType == "SPELL_AURA_REFRESH")) then + if Gladdy.buttons[destUnit] and (Gladdy.db.drEnabled and (eventType == "SPELL_AURA_REMOVED" or eventType == "SPELL_AURA_REFRESH")) then Diminishings:AuraFade(destUnit, spellID) end -- death detection - if (eventType == "UNIT_DIED" or eventType == "PARTY_KILL" or eventType == "SPELL_INSTAKILL") then + if (Gladdy.buttons[destUnit] and eventType == "UNIT_DIED" or eventType == "PARTY_KILL" or eventType == "SPELL_INSTAKILL") then Gladdy:SendMessage("UNIT_DEATH", destUnit) end -- spec detection - if not Gladdy.buttons[destUnit].class or not Gladdy.buttons[destUnit].race then + if Gladdy.buttons[destUnit] and (not Gladdy.buttons[destUnit].class or not Gladdy.buttons[destUnit].race) then Gladdy:SpotEnemy(destUnit, true) end --interrupt detection - if eventType == "SPELL_INTERRUPT" then + if Gladdy.buttons[destUnit] and eventType == "SPELL_INTERRUPT" then Gladdy:SendMessage("SPELL_INTERRUPT", destUnit,spellID,spellName,spellSchool,extraSpellId,extraSpellName,extraSpellSchool) end end From 6954fb05d02d74db659a841b103b451d82b75db4 Mon Sep 17 00:00:00 2001 From: Sumsebrum Date: Wed, 12 Jan 2022 16:18:11 +0100 Subject: [PATCH 38/65] shadowsight timer fix timer tracking when friendly units take buff --- EventListener.lua | 7 +++++-- Modules/ShadowsightTimer.lua | 3 +-- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/EventListener.lua b/EventListener.lua index 257bf5d..8f985a5 100644 --- a/EventListener.lua +++ b/EventListener.lua @@ -98,8 +98,11 @@ end function EventListener:COMBAT_LOG_EVENT_UNFILTERED() -- timestamp,eventType,hideCaster,sourceGUID,sourceName,sourceFlags,sourceRaidFlags,destGUID,destName,destFlags,destRaidFlags,spellId,spellName,spellSchool local _,eventType,_,sourceGUID,_,_,_,destGUID,_,_,_,spellID,spellName,spellSchool,extraSpellId,extraSpellName,extraSpellSchool = CombatLogGetCurrentEventInfo() - local srcUnit = Gladdy.guids[sourceGUID] - local destUnit = Gladdy.guids[destGUID] + local srcUnit = Gladdy.guids[sourceGUID] -- can be a PET + local destUnit = Gladdy.guids[destGUID] -- can be a PET + if (Gladdy.db.shadowsightTimerEnabled and eventType == "SPELL_AURA_APPLIED" and spellID == 34709) then + Gladdy.modules["Shadowsight Timer"]:AURA_GAIN(nil, nil, 34709) + end if destUnit then -- diminish tracker diff --git a/Modules/ShadowsightTimer.lua b/Modules/ShadowsightTimer.lua index d16c21d..d25dfc3 100644 --- a/Modules/ShadowsightTimer.lua +++ b/Modules/ShadowsightTimer.lua @@ -33,7 +33,6 @@ end function ShadowsightTimer:Initialize() self.locale = Gladdy:GetArenaTimer() self:RegisterMessage("JOINED_ARENA") - self:RegisterMessage("AURA_GAIN") self:CreateAnchor() end @@ -146,7 +145,7 @@ function ShadowsightTimer:JOINED_ARENA() end function ShadowsightTimer:AURA_GAIN(unit, auraType, spellID) - if (spellID == 34709) then + if (spellID == 34709 and Gladdy.db.shadowsightTimerEnabled) then self:Start(Gladdy.db.shadowsightTimerResetTime, self:GetHiddenTimer()) end end From 55860fc1570b7c00241ea2f33000f20222f0d040 Mon Sep 17 00:00:00 2001 From: Sumsebrum Date: Wed, 12 Jan 2022 16:18:34 +0100 Subject: [PATCH 39/65] fix fear ward cooldown tracking --- EventListener.lua | 1 + Modules/Cooldowns.lua | 8 ++++---- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/EventListener.lua b/EventListener.lua index 8f985a5..23cd832 100644 --- a/EventListener.lua +++ b/EventListener.lua @@ -82,6 +82,7 @@ function Gladdy:SpotEnemy(unit, auraScan) for arenaUnit,v in pairs(self.buttons) do if (UnitIsUnit(arenaUnit, unitCaster)) then Cooldowns:CooldownUsed(arenaUnit, v.class, Gladdy.cooldownBuffs[spellName].spellId, expirationTime - GetTime()) + -- /run LibStub("Gladdy").modules["Cooldowns"]:CooldownUsed("arena5", "PRIEST", 6346, 10) end end end diff --git a/Modules/Cooldowns.lua b/Modules/Cooldowns.lua index 3ca104e..76f2648 100644 --- a/Modules/Cooldowns.lua +++ b/Modules/Cooldowns.lua @@ -258,7 +258,7 @@ function Cooldowns:SPEC_DETECTED(unit, spec) self:DetectSpec(unit, spec) end -function Cooldowns:CooldownStart(button, spellId, duration) +function Cooldowns:CooldownStart(button, spellId, duration, start) -- starts timer frame if not duration or duration == nil or type(duration) ~= "number" then return @@ -267,8 +267,8 @@ function Cooldowns:CooldownStart(button, spellId, duration) if (button.spellCooldownFrame["icon" .. i].spellId == spellId) then local frame = button.spellCooldownFrame["icon" .. i] frame.active = true - frame.timeLeft = duration - if (not Gladdy.db.cooldownDisableCircle) then frame.cooldown:SetCooldown(GetTime(), duration) end + frame.timeLeft = start and start - GetTime() + duration or duration + if (not Gladdy.db.cooldownDisableCircle) then frame.cooldown:SetCooldown(start or GetTime(), duration) end frame:SetScript("OnUpdate", function(self, elapsed) self.timeLeft = self.timeLeft - elapsed local timeLeft = ceil(self.timeLeft) @@ -519,7 +519,7 @@ function Cooldowns:CooldownUsed(unit, unitClass, spellId, expirationTimeInSecond if (Gladdy.db.cooldown) then -- start cooldown - self:CooldownStart(button, spellId, expirationTimeInSeconds or cd) + self:CooldownStart(button, spellId, cd, expirationTimeInSeconds and (GetTime() + expirationTimeInSeconds - cd) or nil) end --[[ announcement From 2edca9b11e15a6ce5d718539c20a118c033fd776 Mon Sep 17 00:00:00 2001 From: Sumsebrum Date: Wed, 12 Jan 2022 16:33:49 +0100 Subject: [PATCH 40/65] readme --- README.md | 36 +++++++++++++++++++++++------------- 1 file changed, 23 insertions(+), 13 deletions(-) diff --git a/README.md b/README.md index 801c4c2..112f909 100644 --- a/README.md +++ b/README.md @@ -55,6 +55,7 @@ The goal is to make Gladdy highly configurable in it's appearance. Everything ca - [AlexFolland](https://github.com/AlexFolland) - [dfherr](https://github.com/dfherr) - [miraage](https://github.com/miraage) +- [veiz](https://github.com/veiz) Thank you! @@ -73,12 +74,16 @@ Thank you! ### Changes ### v2.00-Release -- major release version set to v2 +This is a packed release with new features and bugfixes. Most importantly, positioning of all elements has been redone with movable frames. +Thank you for the great feedback and active contribution. + +**Here is a list of all changes:** +- **major release version set to v2** - this will mean, that export strings will still be backwards compatible, but not forward (v2 String cant be imported into v1 Strings but vice versa) -- big overhaul of positioning elements added! All elements besides HP and PowerBar can be moved separately +- **big overhaul of positioning elements added! All elements besides HP and PowerBar can be moved separately** - added Mover Frames for Auras, Interrupts, (De)Buffs, CastBar, ClassIcon, CombatIndicator, Cooldowns, DRs, Pets, Racial, Trinket - this will hopefully make configuration a lot easier -- SpecDetection: +- **SpecDetection:** - fixed spec detection for Paladins - added following spells for better spec detection: - Expose Weakness (Survival Hunter) @@ -96,7 +101,7 @@ Thank you! - Dark Pact (Affliction Warlock) - Conflagate (Destruction Warlock) - Shield Slam (Protection Warrior) -- Cooldowns: +- **Cooldowns:** - added Fear Ward and Fear Ward Cooldown Detection in case it was used before arena - added following cooldowns: - Scare Beast (Hunter) @@ -110,20 +115,25 @@ Thank you! - Spell Lock (Warlock) - Devour Magic (Warlock) - Intercept (Warrior) -- Auras/Interrupts: +- **Auras/Interrupts:** - can now be detached from ClassIcon and positioned/scaled anywhere separately - added Auras: - Scare Beast (Hunter) - Fear Ward (Priest) -- Pixel Perfect option added (makes your Gladdy Frames pixel perfect - no more wierd scaling interferences) -- Pets can be grouped (not perfect yet, but a first step) -- added DR-Level Text (thanks https://github.com/ManneN1) -- added zhCN Locale (thanks https://github.com/veiz) -- Shadowsight: +- **Shadowsight:** - reset timer when buff was taken - - add a configurable 2nd timer or show one timer with closest CD -- fixed some DR-categories (Hibernate/Chastice/Dragonsbreath/ImpConcussiveShot/Counterattack) -- ClassIcon can be disabled + - add a configurable 2nd timer or show one timer with the closest CD +- **fixed some DR-categories** (Hibernate / Chastice / Dragonsbreath / ImpConcussiveShot / Counterattack) +- **Pixel Perfect option added** (makes your Gladdy Frames pixel perfect - no more wierd scaling interferences) +- **Pets can be grouped** (not perfect yet, but a first step) +- **added DR-Level Text** (thanks https://github.com/ManneN1) +- **added zhCN Locale** (thanks https://github.com/veiz) +- **ClassIcon can be disabled** +- **add interrupt announcement** +- **detect SpellLock and Devour Magic cooldowns properly** +- **minor fixes:** + - fixed reloading during arena to properly show all frames + - fix grow up positioning ### v1.22-Release - fixed import for some localizations not working From 242c45b8c49f7a3131b8f1b7ddf01994f292f60f Mon Sep 17 00:00:00 2001 From: Sumsebrum Date: Wed, 12 Jan 2022 20:21:53 +0100 Subject: [PATCH 41/65] frame strata option added for all visual elements --- Constants.lua | 22 ++++ Frame.lua | 3 +- Modules/ArenaCountDown.lua | 30 +++++- Modules/Auras.lua | 110 +++++++++++++++++++ Modules/BuffsDebuffs.lua | 47 +++++++- Modules/Castbar.lua | 49 ++++++++- Modules/Classicon.lua | 64 +++++++++-- Modules/CombatIndicator.lua | 42 +++++++- Modules/Cooldowns.lua | 56 +++++++++- Modules/Diminishings.lua | 55 +++++++++- Modules/Healthbar.lua | 44 +++++++- Modules/Highlight.lua | 203 ++++++++++++++++++++++++----------- Modules/Pets.lua | 44 +++++++- Modules/Powerbar.lua | 46 +++++++- Modules/Racial.lua | 72 ++++++++----- Modules/ShadowsightTimer.lua | 169 ++++++++++++++++++++++------- Modules/Trinket.lua | 78 ++++++++++++-- 17 files changed, 957 insertions(+), 177 deletions(-) diff --git a/Constants.lua b/Constants.lua index 7efeeee..d04dcda 100644 --- a/Constants.lua +++ b/Constants.lua @@ -1234,4 +1234,26 @@ Gladdy.newDefaults = { ["castBarXOffset"] = -235.900146484375, ["castBarYOffset"] = -30.5, }, +} + +Gladdy.frameStrata = { + BACKGROUND = L["Background"] .. "(0)", + LOW = L["Low"] .. "(1)", + MEDIUM = L["Medium"] .. "(2)", + HIGH = L["High"] .. "(3)", + DIALOG = L["Dialog"] .. "(4)", + FULLSCREEN = L["Fullscreen"] .. "(5)", + FULLSCREEN_DIALOG = L["Fullscreen Dialog"] .. "(6)", + TOOLTIP = L["Tooltip"] .. "(7)", +} + +Gladdy.frameStrataSorting = { + [1] = "BACKGROUND", + [2] = "LOW", + [3] = "MEDIUM", + [4] = "HIGH", + [5] = "DIALOG", + [6] = "FULLSCREEN", + [7] = "FULLSCREEN_DIALOG", + [8] = "TOOLTIP", } \ No newline at end of file diff --git a/Frame.lua b/Frame.lua index e6d58e0..7f86b67 100644 --- a/Frame.lua +++ b/Frame.lua @@ -395,7 +395,7 @@ function Gladdy:CreateMover(frame, xConfig, yConfig, name, points, width, height frame:EnableMouse(false) frame:SetMovable(true) frame.mover = CreateFrame("Frame", nil, frame, BackdropTemplateMixin and "BackdropTemplate") - frame.mover:SetFrameStrata("DIALOG") + frame.mover:SetFrameStrata("TOOLTIP") frame.mover:SetPoint(points[1], frame, points[2], xOffset or 0, yOffset or 0) frame.mover:SetHeight(height or frame:GetHeight()) frame.mover:SetWidth(width or frame:GetWidth()) @@ -412,6 +412,7 @@ function Gladdy:CreateMover(frame, xConfig, yConfig, name, points, width, height frame.mover.border:SetBackdrop({ edgeFile = Gladdy:SMFetch("border", "highlightBorderStyle"), edgeSize = 2 }) frame.mover.border:SetAllPoints(frame.mover) frame.mover.border:SetBackdropBorderColor(0,1,0,1) + frame.mover.border:SetFrameStrata("TOOLTIP") frame.mover.text = frame.mover.border:CreateFontString(nil, "ARTWORK", "GameFontHighlightSmall") frame.mover.text:SetText(name) diff --git a/Modules/ArenaCountDown.lua b/Modules/ArenaCountDown.lua index c02c72d..dda004f 100644 --- a/Modules/ArenaCountDown.lua +++ b/Modules/ArenaCountDown.lua @@ -6,7 +6,9 @@ local Gladdy = LibStub("Gladdy") local L = Gladdy.L local ACDFrame = Gladdy:NewModule("Arena Countdown", nil, { countdown = true, - arenaCountdownSize = 256 + arenaCountdownSize = 256, + arenaCountdownFrameStrata = "HIGH", + arenaCountdownFrameLevel = 50, }) function ACDFrame:OnEvent(event, ...) @@ -51,6 +53,11 @@ function ACDFrame:Initialize() self.faction = UnitFactionGroup("player") end +function ACDFrame:UpdateFrameOnce() + self.ACDNumFrame:SetFrameStrata(Gladdy.db.arenaCountdownFrameStrata) + self.ACDNumFrame:SetFrameLevel(Gladdy.db.arenaCountdownFrameLevel) +end + function ACDFrame.OnUpdate(self, elapse) if (self.countdown > 0 and Gladdy.db.countdown) then self.hidden = false; @@ -182,5 +189,26 @@ function ACDFrame:GetOptions() step = 16, width = "full", }), + headerAuraLevel = { + type = "header", + name = L["Frame Strata and Level"], + order = 5, + }, + arenaCountdownFrameStrata = Gladdy:option({ + type = "select", + name = L["Frame Strata"], + order = 6, + values = Gladdy.frameStrata, + sorting = Gladdy.frameStrataSorting, + }), + arenaCountdownFrameLevel = Gladdy:option({ + type = "range", + name = L["Frame Level"], + min = 0, + max = 500, + step = 1, + order = 7, + width = "full", + }), } end diff --git a/Modules/Auras.lua b/Modules/Auras.lua index cb75260..367bbf4 100644 --- a/Modules/Auras.lua +++ b/Modules/Auras.lua @@ -52,6 +52,10 @@ local Auras = Gladdy:NewModule("Auras", nil, { auraInterruptYOffset = 0, auraInterruptSize = 60 + 20 + 1, auraInterruptWidthFactor = 0.9, + auraFrameStrata = "MEDIUM", + auraFrameLevel = 5, + auraInterruptFrameStrata = "MEDIUM", + auraInterruptFrameLevel = 5, }) function Auras:Initialize() @@ -223,6 +227,16 @@ function Auras:UpdateFrame(unit) if Gladdy.db.auraDetached then width, height = Gladdy.db.auraSize * Gladdy.db.auraWidthFactor, Gladdy.db.auraSize + + auraFrame:SetFrameStrata(Gladdy.db.auraFrameStrata) + auraFrame:SetFrameLevel(Gladdy.db.auraFrameLevel) + auraFrame.frame:SetFrameStrata(Gladdy.db.auraFrameStrata) + auraFrame.frame:SetFrameLevel(Gladdy.db.auraFrameLevel) + auraFrame.cooldown:SetFrameStrata(Gladdy.db.auraFrameStrata) + auraFrame.cooldown:SetFrameLevel(Gladdy.db.auraFrameLevel + 1) + auraFrame.cooldownFrame:SetFrameStrata(Gladdy.db.auraFrameStrata) + auraFrame.cooldownFrame:SetFrameLevel(Gladdy.db.auraFrameLevel + 2) + auraFrame:ClearAllPoints() Gladdy:SetPosition(auraFrame, unit, "auraXOffset", "auraYOffset", true, Auras) if (unit == "arena1") then @@ -235,6 +249,16 @@ function Auras:UpdateFrame(unit) end else width, height = Gladdy.db.classIconSize * Gladdy.db.classIconWidthFactor, Gladdy.db.classIconSize + + auraFrame:SetFrameStrata(Gladdy.db.classIconFrameStrata) + auraFrame:SetFrameLevel(Gladdy.db.classIconFrameLevel + 1) + auraFrame.frame:SetFrameStrata(Gladdy.db.classIconFrameStrata) + auraFrame.frame:SetFrameLevel(Gladdy.db.classIconFrameLevel + 1) + auraFrame.cooldown:SetFrameStrata(Gladdy.db.classIconFrameStrata) + auraFrame.cooldown:SetFrameLevel(Gladdy.db.classIconFrameLevel + 2) + auraFrame.cooldownFrame:SetFrameStrata(Gladdy.db.classIconFrameStrata) + auraFrame.cooldownFrame:SetFrameLevel(Gladdy.db.classIconFrameLevel + 3) + auraFrame:ClearAllPoints() auraFrame:SetPoint("TOPLEFT", Gladdy.modules["Class Icon"].frames[unit], "TOPLEFT") if auraFrame.mover then @@ -285,6 +309,16 @@ function Auras:UpdateInterruptFrame(unit) if Gladdy.db.auraInterruptDetached then width, height = Gladdy.db.auraInterruptSize * Gladdy.db.auraInterruptWidthFactor, Gladdy.db.auraInterruptSize + + interruptFrame:SetFrameStrata(Gladdy.db.auraInterruptFrameStrata) + interruptFrame:SetFrameLevel(Gladdy.db.auraInterruptFrameLevel) + interruptFrame.frame:SetFrameStrata(Gladdy.db.auraInterruptFrameStrata) + interruptFrame.frame:SetFrameLevel(Gladdy.db.auraInterruptFrameLevel) + interruptFrame.cooldown:SetFrameStrata(Gladdy.db.auraInterruptFrameStrata) + interruptFrame.cooldown:SetFrameLevel(Gladdy.db.auraInterruptFrameLevel + 1) + interruptFrame.cooldownFrame:SetFrameStrata(Gladdy.db.auraInterruptFrameStrata) + interruptFrame.cooldownFrame:SetFrameLevel(Gladdy.db.auraInterruptFrameLevel + 2) + interruptFrame:ClearAllPoints() Gladdy:SetPosition(interruptFrame, unit, "auraInterruptXOffset", "auraInterruptYOffset", true, Auras) if (unit == "arena1") then @@ -298,6 +332,16 @@ function Auras:UpdateInterruptFrame(unit) else if Gladdy.db.auraDetached then width, height = Gladdy.db.auraSize * Gladdy.db.auraWidthFactor, Gladdy.db.auraSize + + interruptFrame:SetFrameStrata(Gladdy.db.auraFrameStrata) + interruptFrame:SetFrameLevel(Gladdy.db.auraFrameLevel) + interruptFrame.frame:SetFrameStrata(Gladdy.db.auraFrameStrata) + interruptFrame.frame:SetFrameLevel(Gladdy.db.auraFrameLevel) + interruptFrame.cooldown:SetFrameStrata(Gladdy.db.auraFrameStrata) + interruptFrame.cooldown:SetFrameLevel(Gladdy.db.auraFrameLevel + 1) + interruptFrame.cooldownFrame:SetFrameStrata(Gladdy.db.auraFrameStrata) + interruptFrame.cooldownFrame:SetFrameLevel(Gladdy.db.auraFrameLevel + 2) + interruptFrame:ClearAllPoints() interruptFrame:SetAllPoints(self.frames[unit]) if interruptFrame.mover then @@ -305,6 +349,16 @@ function Auras:UpdateInterruptFrame(unit) end else width, height = Gladdy.db.classIconSize * Gladdy.db.classIconWidthFactor, Gladdy.db.classIconSize + + interruptFrame:SetFrameStrata(Gladdy.db.classIconFrameStrata) + interruptFrame:SetFrameLevel(Gladdy.db.classIconFrameLevel + 1) + interruptFrame.frame:SetFrameStrata(Gladdy.db.classIconFrameStrata) + interruptFrame.frame:SetFrameLevel(Gladdy.db.classIconFrameLevel + 1) + interruptFrame.cooldown:SetFrameStrata(Gladdy.db.classIconFrameStrata) + interruptFrame.cooldown:SetFrameLevel(Gladdy.db.classIconFrameLevel + 2) + interruptFrame.cooldownFrame:SetFrameStrata(Gladdy.db.classIconFrameStrata) + interruptFrame.cooldownFrame:SetFrameLevel(Gladdy.db.classIconFrameLevel + 3) + interruptFrame:ClearAllPoints() interruptFrame:SetPoint("TOPLEFT", Gladdy.modules["Class Icon"].frames[unit], "TOPLEFT") if interruptFrame.mover then @@ -702,6 +756,34 @@ function Auras:GetOptions() order = 22, width = "full", }), + headerAuraLevel = { + type = "header", + name = L["Frame Strata and Level"], + order = 30, + }, + auraFrameStrata = Gladdy:option({ + type = "select", + name = L["Frame Strata"], + disabled = function() + return not Gladdy.db.auraDetached + end, + order = 32, + values = Gladdy.frameStrata, + sorting = Gladdy.frameStrataSorting, + width = "full", + }), + auraFrameLevel = Gladdy:option({ + type = "range", + name = L["Frame Level"], + disabled = function() + return not Gladdy.db.auraDetached + end, + min = 0, + max = 500, + step = 1, + order = 33, + width = "full", + }), } }, detachedInterruptMode = { @@ -778,6 +860,34 @@ function Auras:GetOptions() order = 22, width = "full", }), + headerAuraLevel = { + type = "header", + name = L["Frame Strata and Level"], + order = 30, + }, + auraInterruptFrameStrata = Gladdy:option({ + type = "select", + name = L["Frame Strata"], + disabled = function() + return not Gladdy.db.auraDetached + end, + order = 32, + values = Gladdy.frameStrata, + sorting = Gladdy.frameStrataSorting, + width = "full", + }), + auraInterruptFrameLevel = Gladdy:option({ + type = "range", + name = L["Frame Level"], + disabled = function() + return not Gladdy.db.auraDetached + end, + min = 0, + max = 500, + step = 1, + order = 33, + width = "full", + }), } }, cooldown = { diff --git a/Modules/BuffsDebuffs.lua b/Modules/BuffsDebuffs.lua index 81ff806..8c75649 100644 --- a/Modules/BuffsDebuffs.lua +++ b/Modules/BuffsDebuffs.lua @@ -50,6 +50,8 @@ local BuffsDebuffs = Gladdy:NewModule("Buffs and Debuffs", nil, { buffsBorderColorDisease = Gladdy:GetAuraTypeColor()["disease"], buffsBorderColorForm = Gladdy:GetAuraTypeColor()["form"], buffsBorderColorAura = Gladdy:GetAuraTypeColor()["aura"], + buffFrameStrata = "MEDIUM", + buffsFrameLevel = 9, }) local spellSchoolToOptionValueTable @@ -232,11 +234,15 @@ end function BuffsDebuffs:CreateFrame(unit) local debuffFrame = CreateFrame("Frame", "GladdyDebuffs" .. unit, Gladdy.buttons[unit]) + debuffFrame:SetFrameStrata(Gladdy.db.buffFrameStrata) + debuffFrame:SetFrameLevel(Gladdy.db.buffsFrameLevel) debuffFrame:SetMovable(true) debuffFrame:SetHeight(Gladdy.db.buffsIconSize) debuffFrame:SetWidth(1) debuffFrame.unit = unit local buffFrame = CreateFrame("Frame", "GladdyBuffs" .. unit, Gladdy.buttons[unit]) + buffFrame:SetFrameStrata(Gladdy.db.buffFrameStrata) + buffFrame:SetFrameLevel(Gladdy.db.buffsFrameLevel) buffFrame:SetMovable(true) buffFrame:SetHeight(Gladdy.db.buffsIconSize) buffFrame:SetWidth(1) @@ -271,6 +277,11 @@ local function styleIcon(aura, auraType) aura.cooldowncircle:SetAlpha(Gladdy.db.buffsCooldownAlpha) end + aura:SetFrameStrata(Gladdy.db.buffFrameStrata) + aura:SetFrameLevel(Gladdy.db.buffsFrameLevel) + aura.cooldowncircle:SetFrameLevel(Gladdy.db.buffsFrameLevel + 1) + aura.overlay:SetFrameLevel(Gladdy.db.buffsFrameLevel + 2) + aura.border:SetTexture(Gladdy.db.buffsBorderStyle) aura.border:SetVertexColor(spellSchoolToOptionValue(aura.spellSchool)) aura.cooldown:SetFont(Gladdy:SMFetch("font", "buffsFont"), (Gladdy.db.buffsIconSize/2 - 1) * Gladdy.db.buffsFontScale, "OUTLINE") @@ -388,18 +399,19 @@ function BuffsDebuffs:AddAura(unit, spellID, auraType, duration, timeLeft, stack else aura = CreateFrame("Frame") aura:EnableMouse(false) - aura:SetFrameLevel(3) + aura:SetFrameStrata(Gladdy.db.buffFrameStrata) + aura:SetFrameLevel(Gladdy.db.buffsFrameLevel) aura.texture = aura:CreateTexture(nil, "BACKGROUND") aura.texture:SetMask("Interface\\AddOns\\Gladdy\\Images\\mask") aura.texture:SetAllPoints(aura) aura.cooldowncircle = CreateFrame("Cooldown", nil, aura, "CooldownFrameTemplate") - aura.cooldowncircle:SetFrameLevel(4) + aura.cooldowncircle:SetFrameLevel(Gladdy.db.buffsFrameLevel + 1) aura.cooldowncircle.noCooldownCount = true -- disable OmniCC aura.cooldowncircle:SetAllPoints(aura) aura.cooldowncircle:SetReverse(true) aura.cooldowncircle:SetHideCountdownNumbers(true) aura.overlay = CreateFrame("Frame", nil, aura) - aura.overlay:SetFrameLevel(5) + aura.overlay:SetFrameLevel(Gladdy.db.buffsFrameLevel + 2) aura.overlay:SetAllPoints(aura) aura.border = aura.overlay:CreateTexture(nil, "OVERLAY") aura.border:SetAllPoints(aura) @@ -878,6 +890,35 @@ function BuffsDebuffs:GetOptions() }), }, }, + frameStrata = { + type = "group", + name = L["Frame Strata and Level"], + order = 6, + args = { + headerAuraLevel = { + type = "header", + name = L["Frame Strata and Level"], + order = 1, + }, + buffFrameStrata = Gladdy:option({ + type = "select", + name = L["Frame Strata"], + order = 2, + values = Gladdy.frameStrata, + sorting = Gladdy.frameStrataSorting, + width = "full", + }), + buffsFrameLevel = Gladdy:option({ + type = "range", + name = L["Frame Level"], + min = 0, + max = 500, + step = 1, + order = 3, + width = "full", + }), + }, + }, }, }, debuffList = { diff --git a/Modules/Castbar.lua b/Modules/Castbar.lua index f4c6086..9a16ff2 100644 --- a/Modules/Castbar.lua +++ b/Modules/Castbar.lua @@ -41,6 +41,8 @@ local Castbar = Gladdy:NewModule("Cast Bar", 70, { castBarTimerFormat = "LEFT", castBarSparkEnabled = true, castBarSparkColor = { r = 1, g = 1, b = 1, a = 1 }, + castBarFrameStrata = "MEDIUM", + castBarFrameLevel = 5, }) function Castbar:Initialize() @@ -60,19 +62,24 @@ function Castbar:CreateFrame(unit) castBar:EnableMouse(false) castBar:SetMovable(true) castBar.unit = unit + castBar:SetFrameStrata(Gladdy.db.castBarFrameStrata) + castBar:SetFrameLevel(Gladdy.db.castBarFrameLevel) castBar.backdrop = CreateFrame("Frame", nil, castBar, BackdropTemplateMixin and "BackdropTemplate") castBar.backdrop:SetAllPoints(castBar) castBar.backdrop:SetBackdrop({ edgeFile = Gladdy:SMFetch("border", "castBarBorderStyle"), edgeSize = Gladdy.db.castBarBorderSize }) castBar.backdrop:SetBackdropBorderColor(Gladdy.db.castBarBorderColor.r, Gladdy.db.castBarBorderColor.g, Gladdy.db.castBarBorderColor.b, Gladdy.db.castBarBorderColor.a) - castBar.backdrop:SetFrameLevel(1) + castBar.backdrop:SetFrameStrata(Gladdy.db.castBarFrameStrata) + castBar.backdrop:SetFrameLevel(Gladdy.db.castBarFrameLevel - 1) castBar.bar = CreateFrame("StatusBar", nil, castBar) castBar.bar:SetStatusBarTexture(Gladdy:SMFetch("statusbar", "castBarTexture")) castBar.bar:SetStatusBarColor(Gladdy.db.castBarColor.r, Gladdy.db.castBarColor.g, Gladdy.db.castBarColor.b, Gladdy.db.castBarColor.a) castBar.bar:SetMinMaxValues(0, 100) castBar.bar:SetFrameLevel(0) + castBar.bar:SetFrameStrata(Gladdy.db.castBarFrameStrata) + castBar.bar:SetFrameLevel(Gladdy.db.castBarFrameLevel) castBar.spark = castBar:CreateTexture(nil, "OVERLAY") castBar.spark:SetTexture("Interface\\CastingBar\\UI-CastingBar-Spark") @@ -88,6 +95,8 @@ function Castbar:CreateFrame(unit) castBar.bg:SetAllPoints(castBar.bar) castBar.icon = CreateFrame("Frame", nil, castBar) + castBar.icon:SetFrameStrata(Gladdy.db.castBarFrameStrata) + castBar.icon:SetFrameLevel(Gladdy.db.castBarFrameLevel) castBar.icon.texture = castBar.icon:CreateTexture(nil, "BACKGROUND") castBar.icon.texture:SetMask("Interface\\AddOns\\Gladdy\\Images\\mask") castBar.icon.texture:SetAllPoints(castBar.icon) @@ -129,6 +138,15 @@ function Castbar:UpdateFrame(unit) return end + castBar:SetFrameStrata(Gladdy.db.castBarFrameStrata) + castBar:SetFrameLevel(Gladdy.db.castBarFrameLevel) + castBar.backdrop:SetFrameStrata(Gladdy.db.castBarFrameStrata) + castBar.backdrop:SetFrameLevel(Gladdy.db.castBarFrameLevel - 1) + castBar.bar:SetFrameStrata(Gladdy.db.castBarFrameStrata) + castBar.bar:SetFrameLevel(Gladdy.db.castBarFrameLevel) + castBar.icon:SetFrameStrata(Gladdy.db.castBarFrameStrata) + castBar.icon:SetFrameLevel(Gladdy.db.castBarFrameLevel) + castBar:SetWidth(Gladdy.db.castBarWidth) castBar:SetHeight(Gladdy.db.castBarHeight) castBar.backdrop:SetBackdrop({ edgeFile = Gladdy:SMFetch("border", "castBarBorderStyle"), @@ -793,6 +811,35 @@ function Castbar:GetOptions() }), } }, + frameStrata = { + type = "group", + name = L["Frame Strata and Level"], + order = 6, + args = { + headerAuraLevel = { + type = "header", + name = L["Frame Strata and Level"], + order = 1, + }, + castBarFrameStrata = Gladdy:option({ + type = "select", + name = L["Frame Strata"], + order = 2, + values = Gladdy.frameStrata, + sorting = Gladdy.frameStrataSorting, + width = "full", + }), + castBarFrameLevel = Gladdy:option({ + type = "range", + name = L["Frame Level"], + min = 1, + max = 500, + step = 1, + order = 3, + width = "full", + }), + }, + }, }, }, } diff --git a/Modules/Classicon.lua b/Modules/Classicon.lua index 6599650..01099a6 100644 --- a/Modules/Classicon.lua +++ b/Modules/Classicon.lua @@ -13,6 +13,8 @@ local Classicon = Gladdy:NewModule("Class Icon", 81, { classIconSpecIcon = false, classIconXOffset = 0, classIconYOffset = 0, + classIconFrameStrata = "MEDIUM", + classIconFrameLevel = 5, }) local classIconPath = "Interface\\Addons\\Gladdy\\Images\\Classes\\" @@ -111,6 +113,9 @@ function Classicon:UpdateFrame(unit) return end + classIcon:SetFrameStrata(Gladdy.db.classIconFrameStrata) + classIcon:SetFrameLevel(Gladdy.db.classIconFrameLevel) + classIcon:SetWidth(Gladdy.db.classIconSize * Gladdy.db.classIconWidthFactor) classIcon:SetHeight(Gladdy.db.classIconSize) @@ -239,29 +244,37 @@ function Classicon:GetOptions() position = { type = "group", name = L["Position"], - order = 1, + order = 3, args = { headerPosition = { type = "header", name = L["Position"], order = 5, }, - classIconPos = Gladdy:option({ - type = "select", - name = L["Icon position"], - desc = L["This changes positions with trinket"], - order = 6, - values = { - ["LEFT"] = L["Left"], - ["RIGHT"] = L["Right"], - }, + classIconXOffset = Gladdy:option({ + type = "range", + name = L["Horizontal offset"], + order = 11, + min = -800, + max = 800, + step = 0.1, + width = "full", + }), + classIconYOffset = Gladdy:option({ + type = "range", + name = L["Vertical offset"], + order = 12, + min = -800, + max = 800, + step = 0.1, + width = "full", }), }, }, border = { type = "group", name = L["Border"], - order = 1, + order = 2, args = { headerBorder = { type = "header", @@ -283,6 +296,35 @@ function Classicon:GetOptions() }), }, }, + frameStrata = { + type = "group", + name = L["Frame Strata and Level"], + order = 4, + args = { + headerAuraLevel = { + type = "header", + name = L["Frame Strata and Level"], + order = 1, + }, + classIconFrameStrata = Gladdy:option({ + type = "select", + name = L["Frame Strata"], + order = 2, + values = Gladdy.frameStrata, + sorting = Gladdy.frameStrataSorting, + width = "full", + }), + classIconFrameLevel = Gladdy:option({ + type = "range", + name = L["Frame Level"], + min = 0, + max = 500, + step = 1, + order = 3, + width = "full", + }), + }, + }, }, }, } diff --git a/Modules/CombatIndicator.lua b/Modules/CombatIndicator.lua index 73a016d..5647178 100644 --- a/Modules/CombatIndicator.lua +++ b/Modules/CombatIndicator.lua @@ -14,6 +14,8 @@ local CombatIndicator = Gladdy:NewModule("Combat Indicator", nil, { ciYOffset = -31, ciBorderStyle = "Interface\\AddOns\\Gladdy\\Images\\Border_rounded_blp", ciBorderColor = { r = 0, g = 0, b = 0, a = 1 }, + ciFrameStrata = "HIGH", + ciFrameLevel = 5, }) function CombatIndicator:Initialize() @@ -36,7 +38,8 @@ function CombatIndicator:CreateFrame(unit) local ciFrame = CreateFrame("Frame", "GladdyCombatindicator" .. unit, button) ciFrame:EnableMouse(false) ciFrame:SetMovable(true) - ciFrame:SetFrameStrata("HIGH") + ciFrame:SetFrameStrata(Gladdy.db.ciFrameStrata) + ciFrame:SetFrameLevel(Gladdy.db.ciFrameLevel) ciFrame:SetHeight(Gladdy.db.ciSize) ciFrame:SetWidth(Gladdy.db.ciSize * Gladdy.db.ciWidthFactor) @@ -60,6 +63,10 @@ function CombatIndicator:UpdateFrame(unit) if (not button or not ciFrame) then return end + + ciFrame:SetFrameStrata(Gladdy.db.ciFrameStrata) + ciFrame:SetFrameLevel(Gladdy.db.ciFrameLevel) + ciFrame:SetHeight(Gladdy.db.ciSize) ciFrame:SetWidth(Gladdy.db.ciSize * Gladdy.db.ciWidthFactor) ciFrame.border:SetTexture(Gladdy.db.ciBorderStyle) @@ -166,7 +173,7 @@ function CombatIndicator:GetOptions() position = { type = "group", name = L["Position"], - order = 4, + order = 3, args = { header = { type = "header", @@ -196,7 +203,7 @@ function CombatIndicator:GetOptions() border = { type = "group", name = L["Border"], - order = 4, + order = 2, args = { header = { type = "header", @@ -218,6 +225,35 @@ function CombatIndicator:GetOptions() }), }, }, + frameStrata = { + type = "group", + name = L["Frame Strata and Level"], + order = 5, + args = { + headerAuraLevel = { + type = "header", + name = L["Frame Strata and Level"], + order = 1, + }, + ciFrameStrata = Gladdy:option({ + type = "select", + name = L["Frame Strata"], + order = 2, + values = Gladdy.frameStrata, + sorting = Gladdy.frameStrataSorting, + width = "full", + }), + ciFrameLevel = Gladdy:option({ + type = "range", + name = L["Frame Level"], + min = 0, + max = 500, + step = 1, + order = 3, + width = "full", + }), + }, + }, }, }, } diff --git a/Modules/Cooldowns.lua b/Modules/Cooldowns.lua index 76f2648..268762d 100644 --- a/Modules/Cooldowns.lua +++ b/Modules/Cooldowns.lua @@ -67,6 +67,8 @@ local Cooldowns = Gladdy:NewModule("Cooldowns", nil, { cooldownDisableCircle = false, cooldownCooldownAlpha = 1, cooldownCooldowns = getDefaultCooldown(), + cooldownFrameStrata = "MEDIUM", + cooldownFrameLevel = 3, }) function Cooldowns:Initialize() @@ -95,10 +97,13 @@ function Cooldowns:CreateFrame(unit) local spellCooldownFrame = CreateFrame("Frame", nil, button) spellCooldownFrame:EnableMouse(false) spellCooldownFrame:SetMovable(true) + spellCooldownFrame:SetFrameStrata(Gladdy.db.cooldownFrameStrata) + spellCooldownFrame:SetFrameLevel(Gladdy.db.cooldownFrameLevel) for x = 1, 14 do local icon = CreateFrame("Frame", nil, spellCooldownFrame) icon:EnableMouse(false) - icon:SetFrameLevel(3) + icon:SetFrameStrata(Gladdy.db.cooldownFrameStrata) + icon:SetFrameLevel(Gladdy.db.cooldownFrameLevel) icon.texture = icon:CreateTexture(nil, "BACKGROUND") icon.texture:SetMask("Interface\\AddOns\\Gladdy\\Images\\mask") icon.texture:SetAllPoints(icon) @@ -106,14 +111,16 @@ function Cooldowns:CreateFrame(unit) icon.cooldown = CreateFrame("Cooldown", nil, icon, "CooldownFrameTemplate") icon.cooldown.noCooldownCount = true - icon.cooldown:SetFrameLevel(4) + icon.cooldown:SetFrameStrata(Gladdy.db.cooldownFrameStrata) + icon.cooldown:SetFrameLevel(Gladdy.db.cooldownFrameLevel + 1) icon.cooldown:SetReverse(false) icon.cooldown:SetHideCountdownNumbers(true) icon.cooldownFrame = CreateFrame("Frame", nil, icon) icon.cooldownFrame:ClearAllPoints() icon.cooldownFrame:SetAllPoints(icon) - icon.cooldownFrame:SetFrameLevel(5) + icon.cooldownFrame:SetFrameStrata(Gladdy.db.cooldownFrameStrata) + icon.cooldownFrame:SetFrameLevel(Gladdy.db.cooldownFrameLevel + 2) icon.border = icon.cooldownFrame:CreateTexture(nil, "OVERLAY") icon.border:SetAllPoints(icon) @@ -136,6 +143,8 @@ function Cooldowns:UpdateFrame(unit) if (Gladdy.db.cooldown) then button.spellCooldownFrame:SetHeight(Gladdy.db.cooldownSize) button.spellCooldownFrame:SetWidth(1) + button.spellCooldownFrame:SetFrameStrata(Gladdy.db.cooldownFrameStrata) + button.spellCooldownFrame:SetFrameLevel(Gladdy.db.cooldownFrameLevel) button.spellCooldownFrame:Show() Gladdy:SetPosition(button.spellCooldownFrame, unit, "cooldownXOffset", "cooldownYOffset", Cooldowns:LegacySetPosition(button, unit), Cooldowns) @@ -149,6 +158,14 @@ function Cooldowns:UpdateFrame(unit) local o = 1 for j = 1, 14 do local icon = button.spellCooldownFrame["icon" .. j] + + icon:SetFrameStrata(Gladdy.db.cooldownFrameStrata) + icon:SetFrameLevel(Gladdy.db.cooldownFrameLevel) + icon.cooldown:SetFrameStrata(Gladdy.db.cooldownFrameStrata) + icon.cooldown:SetFrameLevel(Gladdy.db.cooldownFrameLevel + 1) + icon.cooldownFrame:SetFrameStrata(Gladdy.db.cooldownFrameStrata) + icon.cooldownFrame:SetFrameLevel(Gladdy.db.cooldownFrameLevel + 2) + icon:SetHeight(Gladdy.db.cooldownSize) icon:SetWidth(Gladdy.db.cooldownSize * Gladdy.db.cooldownWidthFactor) icon.cooldownFont:SetFont(Gladdy:SMFetch("font", "cooldownFont"), Gladdy.db.cooldownSize / 2 * Gladdy.db.cooldownFontScale, "OUTLINE") @@ -676,7 +693,7 @@ function Cooldowns:GetOptions() position = { type = "group", name = L["Position"], - order = 4, + order = 5, args = { header = { type = "header", @@ -740,7 +757,7 @@ function Cooldowns:GetOptions() border = { type = "group", name = L["Border"], - order = 5, + order = 4, args = { header = { type = "header", @@ -762,6 +779,35 @@ function Cooldowns:GetOptions() }), }, }, + frameStrata = { + type = "group", + name = L["Frame Strata and Level"], + order = 6, + args = { + headerAuraLevel = { + type = "header", + name = L["Frame Strata and Level"], + order = 1, + }, + cooldownFrameStrata = Gladdy:option({ + type = "select", + name = L["Frame Strata"], + order = 2, + values = Gladdy.frameStrata, + sorting = Gladdy.frameStrataSorting, + width = "full", + }), + cooldownFrameLevel = Gladdy:option({ + type = "range", + name = L["Frame Level"], + min = 0, + max = 500, + step = 1, + order = 3, + width = "full", + }), + }, + }, }, }, cooldowns = { diff --git a/Modules/Diminishings.lua b/Modules/Diminishings.lua index a2b89f1..98af424 100644 --- a/Modules/Diminishings.lua +++ b/Modules/Diminishings.lua @@ -50,6 +50,8 @@ local Diminishings = Gladdy:NewModule("Diminishings", nil, { drWidthFactor = 1, drCategories = defaultCategories(), drDuration = 18, + drFrameStrata = "MEDIUM", + drFrameLevel = 3, }) local function getDiminishColor(dr) @@ -81,12 +83,15 @@ function Diminishings:CreateFrame(unit) local drFrame = CreateFrame("Frame", nil, Gladdy.buttons[unit]) drFrame:EnableMouse(false) drFrame:SetMovable(true) + drFrame:SetFrameStrata(Gladdy.db.drFrameStrata) + drFrame:SetFrameLevel(Gladdy.db.drFrameLevel) for i = 1, 16 do local icon = CreateFrame("Frame", "GladdyDr" .. unit .. "Icon" .. i, drFrame) icon:Hide() icon:EnableMouse(false) - icon:SetFrameLevel(3) + icon:SetFrameStrata(Gladdy.db.drFrameStrata) + icon:SetFrameLevel(Gladdy.db.drFrameLevel) icon.texture = icon:CreateTexture(nil, "BACKGROUND") icon.texture:SetMask("Interface\\AddOns\\Gladdy\\Images\\mask") icon.texture:SetAllPoints(icon) @@ -114,13 +119,15 @@ function Diminishings:CreateFrame(unit) icon.cooldown = CreateFrame("Cooldown", nil, icon, "CooldownFrameTemplate") icon.cooldown.noCooldownCount = true --Gladdy.db.trinketDisableOmniCC icon.cooldown:SetHideCountdownNumbers(true) - icon.cooldown:SetFrameLevel(4) + icon.cooldown:SetFrameStrata(Gladdy.db.drFrameStrata) + icon.cooldown:SetFrameLevel(Gladdy.db.drFrameLevel + 1) icon.cooldownFrame = CreateFrame("Frame", nil, icon) icon.cooldownFrame:ClearAllPoints() icon.cooldownFrame:SetPoint("TOPLEFT", icon, "TOPLEFT") icon.cooldownFrame:SetPoint("BOTTOMRIGHT", icon, "BOTTOMRIGHT") - icon.cooldownFrame:SetFrameLevel(5) + icon.cooldownFrame:SetFrameStrata(Gladdy.db.drFrameStrata) + icon.cooldownFrame:SetFrameLevel(Gladdy.db.drFrameLevel + 2) --icon.overlay = CreateFrame("Frame", nil, icon) --icon.overlay:SetAllPoints(icon) @@ -181,6 +188,8 @@ function Diminishings:UpdateFrame(unit) drFrame:SetWidth(Gladdy.db.drIconSize) drFrame:SetHeight(Gladdy.db.drIconSize) + drFrame:SetFrameStrata(Gladdy.db.drFrameStrata) + drFrame:SetFrameLevel(Gladdy.db.drFrameLevel) Gladdy:SetPosition(drFrame, unit, "drXOffset", "drYOffset", Diminishings:LegacySetPosition(drFrame, unit), Diminishings) @@ -199,6 +208,13 @@ function Diminishings:UpdateFrame(unit) icon:SetWidth(Gladdy.db.drIconSize * Gladdy.db.drWidthFactor) icon:SetHeight(Gladdy.db.drIconSize) + icon:SetFrameStrata(Gladdy.db.drFrameStrata) + icon:SetFrameLevel(Gladdy.db.drFrameLevel) + icon.cooldown:SetFrameStrata(Gladdy.db.drFrameStrata) + icon.cooldown:SetFrameLevel(Gladdy.db.drFrameLevel + 1) + icon.cooldownFrame:SetFrameStrata(Gladdy.db.drFrameStrata) + icon.cooldownFrame:SetFrameLevel(Gladdy.db.drFrameLevel + 2) + icon.text:SetFont(Gladdy:SMFetch("font", "drFont"), (Gladdy.db.drIconSize/2 - 1) * Gladdy.db.drFontScale, "OUTLINE") icon.text:SetTextColor(Gladdy.db.drFontColor.r, Gladdy.db.drFontColor.g, Gladdy.db.drFontColor.b, Gladdy.db.drFontColor.a) icon.timeText:SetFont(Gladdy:SMFetch("font", "drFont"), (Gladdy.db.drIconSize/2 - 1) * Gladdy.db.drFontScale, "OUTLINE") @@ -541,7 +557,7 @@ function Diminishings:GetOptions() position = { type = "group", name = L["Position"], - order = 4, + order = 6, args = { headerPosition = { type = "header", @@ -618,7 +634,7 @@ function Diminishings:GetOptions() border = { type = "group", name = L["Border"], - order = 6, + order = 4, args = { headerBorder = { type = "header", @@ -673,6 +689,35 @@ function Diminishings:GetOptions() }), } }, + frameStrata = { + type = "group", + name = L["Frame Strata and Level"], + order = 7, + args = { + headerAuraLevel = { + type = "header", + name = L["Frame Strata and Level"], + order = 1, + }, + drFrameStrata = Gladdy:option({ + type = "select", + name = L["Frame Strata"], + order = 2, + values = Gladdy.frameStrata, + sorting = Gladdy.frameStrataSorting, + width = "full", + }), + drFrameLevel = Gladdy:option({ + type = "range", + name = L["Frame Level"], + min = 0, + max = 500, + step = 1, + order = 3, + width = "full", + }), + }, + }, }, }, categories = { diff --git a/Modules/Healthbar.lua b/Modules/Healthbar.lua index 8338a1a..78132cf 100644 --- a/Modules/Healthbar.lua +++ b/Modules/Healthbar.lua @@ -24,6 +24,8 @@ local Healthbar = Gladdy:NewModule("Health Bar", 100, { healthActual = false, healthMax = true, healthPercentage = true, + healthFrameStrata = "MEDIUM", + healthFrameLevel = 1, }) function Healthbar:Initialize() @@ -42,12 +44,14 @@ function Healthbar:CreateFrame(unit) healthBar:SetBackdrop({ edgeFile = Gladdy:SMFetch("border", "healthBarBorderStyle"), edgeSize = Gladdy.db.healthBarBorderSize }) healthBar:SetBackdropBorderColor(Gladdy.db.healthBarBorderColor.r, Gladdy.db.healthBarBorderColor.g, Gladdy.db.healthBarBorderColor.b, Gladdy.db.healthBarBorderColor.a) - healthBar:SetFrameLevel(1) + healthBar:SetFrameStrata(Gladdy.db.healthFrameStrata) + healthBar:SetFrameLevel(Gladdy.db.healthFrameLevel) healthBar.hp = CreateFrame("StatusBar", nil, healthBar) healthBar.hp:SetStatusBarTexture(Gladdy:SMFetch("statusbar", "healthBarTexture")) healthBar.hp:SetMinMaxValues(0, 100) - healthBar.hp:SetFrameLevel(0) + healthBar.hp:SetFrameStrata(Gladdy.db.healthFrameStrata) + healthBar.hp:SetFrameLevel(Gladdy.db.healthFrameLevel - 1) healthBar.bg = healthBar.hp:CreateTexture(nil, "BACKGROUND") healthBar.bg:SetTexture(Gladdy:SMFetch("statusbar", "healthBarTexture")) @@ -150,6 +154,11 @@ function Healthbar:UpdateFrame(unit) return end + healthBar:SetFrameStrata(Gladdy.db.healthFrameStrata) + healthBar:SetFrameLevel(Gladdy.db.healthFrameLevel) + healthBar.hp:SetFrameStrata(Gladdy.db.healthFrameStrata) + healthBar.hp:SetFrameLevel(Gladdy.db.healthFrameLevel - 1) + healthBar.bg:SetTexture(Gladdy:SMFetch("statusbar", "healthBarTexture")) healthBar.bg:SetVertexColor(Gladdy.db.healthBarBgColor.r, Gladdy.db.healthBarBgColor.g, Gladdy.db.healthBarBgColor.b, Gladdy.db.healthBarBgColor.a) @@ -445,10 +454,39 @@ function Healthbar:GetOptions() }), }, }, + frameStrata = { + type = "group", + name = L["Frame Strata and Level"], + order = 4, + args = { + headerAuraLevel = { + type = "header", + name = L["Frame Strata and Level"], + order = 1, + }, + healthFrameStrata = Gladdy:option({ + type = "select", + name = L["Frame Strata"], + order = 2, + values = Gladdy.frameStrata, + sorting = Gladdy.frameStrataSorting, + width = "full", + }), + healthFrameLevel = Gladdy:option({ + type = "range", + name = L["Frame Level"], + min = 1, + max = 500, + step = 1, + order = 3, + width = "full", + }), + }, + }, healthValues = { type = "group", name = L["Health Bar Text"], - order = 4, + order = 5, args = { header = { type = "header", diff --git a/Modules/Highlight.lua b/Modules/Highlight.lua index 5cebb1a..0240caa 100644 --- a/Modules/Highlight.lua +++ b/Modules/Highlight.lua @@ -13,6 +13,8 @@ local Highlight = Gladdy:NewModule("Highlight", nil, { targetBorder = true, focusBorder = true, leaderBorder = true, + highlightFrameStrata = "MEDIUM", + highlightFrameLevel = 20, }) function Highlight:Initialize() @@ -56,17 +58,20 @@ function Highlight:CreateFrame(unit) local targetBorder = CreateFrame("Frame", nil, button, BackdropTemplateMixin and "BackdropTemplate") targetBorder:SetBackdrop({ edgeFile = Gladdy:SMFetch("border", "highlightBorderStyle"), edgeSize = Gladdy.db.highlightBorderSize }) - --targetBorder:SetFrameStrata("MEDIUM") + targetBorder:SetFrameStrata(Gladdy.db.highlightFrameStrata) + targetBorder:SetFrameLevel(Gladdy.db.highlightFrameLevel) targetBorder:Hide() local focusBorder = CreateFrame("Frame", nil, button, BackdropTemplateMixin and "BackdropTemplate") focusBorder:SetBackdrop({ edgeFile = Gladdy:SMFetch("border", "highlightBorderStyle"), edgeSize = Gladdy.db.highlightBorderSize }) - --focusBorder:SetFrameStrata("MEDIUM") + focusBorder:SetFrameStrata(Gladdy.db.highlightFrameStrata) + focusBorder:SetFrameLevel(Gladdy.db.highlightFrameLevel) focusBorder:Hide() local leaderBorder = CreateFrame("Frame", nil, button, BackdropTemplateMixin and "BackdropTemplate") leaderBorder:SetBackdrop({ edgeFile = Gladdy:SMFetch("border", "highlightBorderStyle"), edgeSize = Gladdy.db.highlightBorderSize }) - --leaderBorder:SetFrameStrata("MEDIUM") + leaderBorder:SetFrameStrata(Gladdy.db.highlightFrameStrata) + leaderBorder:SetFrameLevel(Gladdy.db.highlightFrameLevel) leaderBorder:Hide() local highlight = healthBar:CreateTexture(nil, "OVERLAY") @@ -96,6 +101,13 @@ function Highlight:UpdateFrame(unit) local width = Gladdy.db.barWidth + (Gladdy.db.highlightInset and 0 or borderSize * 2) local height = hpAndPowerHeight + (Gladdy.db.highlightInset and 0 or borderSize * 2) + button.targetBorder:SetFrameStrata(Gladdy.db.highlightFrameStrata) + button.targetBorder:SetFrameLevel(Gladdy.db.highlightFrameLevel) + button.focusBorder:SetFrameStrata(Gladdy.db.highlightFrameStrata) + button.focusBorder:SetFrameLevel(Gladdy.db.highlightFrameLevel) + button.leaderBorder:SetFrameStrata(Gladdy.db.highlightFrameStrata) + button.leaderBorder:SetFrameLevel(Gladdy.db.highlightFrameLevel) + button.targetBorder:SetWidth(width) button.targetBorder:SetHeight(height) button.targetBorder:ClearAllPoints() @@ -207,67 +219,130 @@ function Highlight:GetOptions() desc = L["Show Highlight border inside of frame"], order = 3, }), - highlightBorderSize = Gladdy:option({ - type = "range", - name = L["Border size"], - desc = L["Border size"], - order = 4, - min = 1, - max = 20, - step = 1, - width = "full", - }), - highlightBorderStyle = Gladdy:option({ - type = "select", - name = L["Border style"], - order = 5, - dialogControl = "LSM30_Border", - values = AceGUIWidgetLSMlists.border, - }), - headerColor = { - type = "header", - name = L["Colors"], - order = 6, + group = { + type = "group", + childGroups = "tree", + name = L["Frame"], + order = 3, + args = { + enabled = { + type = "group", + name = L["Enabled"], + order = 1, + args = { + headerEnable = { + type = "header", + name = L["Enabled"], + order = 10, + }, + highlight = Gladdy:option({ + type = "toggle", + name = L["Highlight target"], + desc = L["Toggle if the selected target should be highlighted"], + order = 11, + width = "full", + }), + targetBorder = Gladdy:option({ + type = "toggle", + name = L["Show border around target"], + desc = L["Toggle if a border should be shown around the selected target"], + order = 12, + width = "full", + }), + focusBorder = Gladdy:option({ + type = "toggle", + name = L["Show border around focus"], + desc = L["Toggle of a border should be shown around the current focus"], + order = 13, + width = "full", + }), + }, + }, + border = { + type = "group", + name = L["Border"], + order = 2, + args = { + headerHighlight = { + type = "header", + name = L["Border"], + order = 2, + }, + highlightBorderSize = Gladdy:option({ + type = "range", + name = L["Border size"], + desc = L["Border size"], + order = 4, + min = 1, + max = 20, + step = 1, + width = "full", + }), + highlightBorderStyle = Gladdy:option({ + type = "select", + name = L["Border style"], + order = 5, + dialogControl = "LSM30_Border", + values = AceGUIWidgetLSMlists.border, + }), + }, + }, + color = { + type = "group", + name = L["Color"], + order = 3, + args = { + headerColor = { + type = "header", + name = L["Colors"], + order = 6, + }, + targetBorderColor = Gladdy:colorOption({ + type = "color", + name = L["Target border color"], + desc = L["Color of the selected targets border"], + order = 7, + hasAlpha = true, + }), + focusBorderColor = Gladdy:colorOption({ + type = "color", + name = L["Focus border color"], + desc = L["Color of the focus border"], + order = 8, + hasAlpha = true, + }), + }, + }, + frameStrata = { + type = "group", + name = L["Frame Strata and Level"], + order = 4, + args = { + headerAuraLevel = { + type = "header", + name = L["Frame Strata and Level"], + order = 1, + }, + highlightFrameStrata = Gladdy:option({ + type = "select", + name = L["Frame Strata"], + order = 2, + values = Gladdy.frameStrata, + sorting = Gladdy.frameStrataSorting, + width = "full", + }), + highlightFrameLevel = Gladdy:option({ + type = "range", + name = L["Frame Level"], + min = 1, + max = 500, + step = 1, + order = 3, + width = "full", + }), + }, + }, + }, }, - targetBorderColor = Gladdy:colorOption({ - type = "color", - name = L["Target border color"], - desc = L["Color of the selected targets border"], - order = 7, - hasAlpha = true, - }), - focusBorderColor = Gladdy:colorOption({ - type = "color", - name = L["Focus border color"], - desc = L["Color of the focus border"], - order = 8, - hasAlpha = true, - }), - headerEnable = { - type = "header", - name = L["Enabled"], - order = 10, - }, - highlight = Gladdy:option({ - type = "toggle", - name = L["Highlight target"], - desc = L["Toggle if the selected target should be highlighted"], - order = 11, - width = "full", - }), - targetBorder = Gladdy:option({ - type = "toggle", - name = L["Show border around target"], - desc = L["Toggle if a border should be shown around the selected target"], - order = 12, - width = "full", - }), - focusBorder = Gladdy:option({ - type = "toggle", - name = L["Show border around focus"], - desc = L["Toggle of a border should be shown around the current focus"], - order = 13, - width = "full", - }), } end \ No newline at end of file diff --git a/Modules/Pets.lua b/Modules/Pets.lua index b9406e9..fdd33b0 100644 --- a/Modules/Pets.lua +++ b/Modules/Pets.lua @@ -25,6 +25,8 @@ local Pets = Gladdy:NewModule("Pets", nil, { petYOffset = -62, petGroup = false, petMargin = 1, + petFrameStrata = "MEDIUM", + petFrameLevel = 5, }) function Pets:Initialize() @@ -156,7 +158,8 @@ function Pets:CreateFrame(unitId) healthBar:SetBackdrop({ edgeFile = Gladdy:SMFetch("border", "petHealthBarBorderStyle"), edgeSize = Gladdy.db.petHealthBarBorderSize }) healthBar:SetBackdropBorderColor(Gladdy.db.petHealthBarBorderColor.r, Gladdy.db.petHealthBarBorderColor.g, Gladdy.db.petHealthBarBorderColor.b, Gladdy.db.petHealthBarBorderColor.a) - healthBar:SetFrameLevel(1) + healthBar:SetFrameStrata(Gladdy.db.petFrameStrata) + healthBar:SetFrameLevel(Gladdy.db.petFrameLevel) healthBar:SetAllPoints(button) healthBar:SetAlpha(0) @@ -174,7 +177,8 @@ function Pets:CreateFrame(unitId) healthBar.hp:SetStatusBarTexture(Gladdy:SMFetch("statusbar", "petHealthBarTexture")) healthBar.hp:SetStatusBarColor(Gladdy.db.petHealthBarColor.r, Gladdy.db.petHealthBarColor.g, Gladdy.db.petHealthBarColor.b, Gladdy.db.petHealthBarColor.a) healthBar.hp:SetMinMaxValues(0, 100) - healthBar.hp:SetFrameLevel(0) + healthBar.hp:SetFrameStrata(Gladdy.db.petFrameStrata) + healthBar.hp:SetFrameLevel(Gladdy.db.petFrameLevel - 1) healthBar.hp:SetAllPoints(healthBar) healthBar.bg = healthBar.hp:CreateTexture(nil, "BACKGROUND") @@ -245,6 +249,11 @@ function Pets:UpdateFrame(unitId) return end + healthBar:SetFrameStrata(Gladdy.db.petFrameStrata) + healthBar:SetFrameLevel(Gladdy.db.petFrameLevel) + healthBar.hp:SetFrameStrata(Gladdy.db.petFrameStrata) + healthBar.hp:SetFrameLevel(Gladdy.db.petFrameLevel - 1) + if not Gladdy.db.petEnabled then self.frames[unit]:Hide() else @@ -569,10 +578,39 @@ function Pets:GetOptions() }), } }, + frameStrata = { + type = "group", + name = L["Frame Strata and Level"], + order = 6, + args = { + headerAuraLevel = { + type = "header", + name = L["Frame Strata and Level"], + order = 1, + }, + petFrameStrata = Gladdy:option({ + type = "select", + name = L["Frame Strata"], + order = 2, + values = Gladdy.frameStrata, + sorting = Gladdy.frameStrataSorting, + width = "full", + }), + petFrameLevel = Gladdy:option({ + type = "range", + name = L["Frame Level"], + min = 1, + max = 500, + step = 1, + order = 3, + width = "full", + }), + }, + }, healthValues = { type = "group", name = L["Health Values"], - order = 6, + order = 7, args = { header = { type = "header", diff --git a/Modules/Powerbar.lua b/Modules/Powerbar.lua index eaa961a..af76f5c 100644 --- a/Modules/Powerbar.lua +++ b/Modules/Powerbar.lua @@ -22,6 +22,8 @@ local Powerbar = Gladdy:NewModule("Power Bar", 90, { powerActual = true, powerMax = true, powerPercentage = false, + powerFrameStrata = "MEDIUM", + powerFrameLevel = 1, }) function Powerbar:Initialize() @@ -41,12 +43,14 @@ function Powerbar:CreateFrame(unit) powerBar:SetBackdrop({ edgeFile = Gladdy:SMFetch("border", "powerBarBorderStyle"), edgeSize = Gladdy.db.powerBarBorderSize }) powerBar:SetBackdropBorderColor(Gladdy.db.powerBarBorderColor.r, Gladdy.db.powerBarBorderColor.g, Gladdy.db.powerBarBorderColor.b, Gladdy.db.powerBarBorderColor.a) - powerBar:SetFrameLevel(1) + powerBar:SetFrameStrata(Gladdy.db.powerFrameStrata) + powerBar:SetFrameLevel(Gladdy.db.powerFrameLevel) powerBar.energy = CreateFrame("StatusBar", nil, powerBar) powerBar.energy:SetStatusBarTexture(Gladdy:SMFetch("statusbar", "powerBarTexture")) powerBar.energy:SetMinMaxValues(0, 100) - powerBar.energy:SetFrameLevel(0) + powerBar.energy:SetFrameStrata(Gladdy.db.powerFrameStrata) + powerBar.energy:SetFrameLevel(Gladdy.db.powerFrameLevel - 1) powerBar.bg = powerBar.energy:CreateTexture(nil, "BACKGROUND") powerBar.bg:SetTexture(Gladdy:SMFetch("statusbar", "powerBarTexture")) @@ -139,10 +143,8 @@ function Powerbar:UpdateFrame(unit) if (not powerBar) then return end - local healthBar = Gladdy.modules["Health Bar"].frames[unit] - if not Gladdy.db.powerBarEnabled then powerBar:Hide() return @@ -171,6 +173,11 @@ function Powerbar:UpdateFrame(unit) powerBar.raceText:SetTextColor(Gladdy.db.powerBarFontColor.r, Gladdy.db.powerBarFontColor.g, Gladdy.db.powerBarFontColor.b, Gladdy.db.powerBarFontColor.a) powerBar.powerText:SetFont(Gladdy:SMFetch("font", "powerBarFont"), Gladdy.db.powerBarFontSize) powerBar.powerText:SetTextColor(Gladdy.db.powerBarFontColor.r, Gladdy.db.powerBarFontColor.g, Gladdy.db.powerBarFontColor.b, Gladdy.db.powerBarFontColor.a) + + powerBar:SetFrameStrata(Gladdy.db.powerFrameStrata) + powerBar:SetFrameLevel(Gladdy.db.powerFrameLevel) + powerBar.energy:SetFrameStrata(Gladdy.db.powerFrameStrata) + powerBar.energy:SetFrameLevel(Gladdy.db.powerFrameLevel - 1) end function Powerbar:ResetUnit(unit) @@ -455,10 +462,39 @@ function Powerbar:GetOptions() }), }, }, + frameStrata = { + type = "group", + name = L["Frame Strata and Level"], + order = 4, + args = { + headerAuraLevel = { + type = "header", + name = L["Frame Strata and Level"], + order = 1, + }, + powerFrameStrata = Gladdy:option({ + type = "select", + name = L["Frame Strata"], + order = 2, + values = Gladdy.frameStrata, + sorting = Gladdy.frameStrataSorting, + width = "full", + }), + powerFrameLevel = Gladdy:option({ + type = "range", + name = L["Frame Level"], + min = 1, + max = 500, + step = 1, + order = 3, + width = "full", + }), + }, + }, powerValues = { type = "group", name = L["Power Bar Text"], - order = 4, + order = 5, args = { header = { type = "header", diff --git a/Modules/Racial.lua b/Modules/Racial.lua index b03c6d2..153c71f 100644 --- a/Modules/Racial.lua +++ b/Modules/Racial.lua @@ -18,6 +18,8 @@ local Racial = Gladdy:NewModule("Racial", 79, { racialDisableCircle = false, racialCooldownAlpha = 1, racialCooldownNumberAlpha = 1, + racialFrameStrata = "MEDIUM", + racialFrameLevel = 5, }) @@ -63,6 +65,9 @@ end function Racial:CreateFrame(unit) local racial = CreateFrame("Button", "GladdyTrinketButton" .. unit, Gladdy.buttons[unit]) racial:EnableMouse(false) + racial:SetFrameStrata(Gladdy.db.racialFrameStrata) + racial:SetFrameLevel(Gladdy.db.racialFrameLevel) + racial.texture = racial:CreateTexture(nil, "BACKGROUND") racial.texture:SetAllPoints(racial) racial.texture:SetMask("Interface\\AddOns\\Gladdy\\Images\\mask") @@ -76,6 +81,8 @@ function Racial:CreateFrame(unit) racial.cooldownFrame:ClearAllPoints() racial.cooldownFrame:SetPoint("TOPLEFT", racial, "TOPLEFT") racial.cooldownFrame:SetPoint("BOTTOMRIGHT", racial, "BOTTOMRIGHT") + racial.cooldownFrame:SetFrameStrata(Gladdy.db.racialFrameStrata) + racial.cooldownFrame:SetFrameLevel(Gladdy.db.racialFrameLevel + 1) racial.cooldownFont = racial.cooldownFrame:CreateFontString(nil, "OVERLAY") racial.cooldownFont:SetFont(Gladdy:SMFetch("font", "racialFont"), 20, "OUTLINE") @@ -85,6 +92,9 @@ function Racial:CreateFrame(unit) racial.borderFrame = CreateFrame("Frame", nil, racial) racial.borderFrame:SetAllPoints(racial) + racial.borderFrame:SetFrameStrata(Gladdy.db.racialFrameStrata) + racial.borderFrame:SetFrameLevel(Gladdy.db.racialFrameLevel + 2) + racial.texture.overlay = racial.borderFrame:CreateTexture(nil, "OVERLAY") racial.texture.overlay:SetAllPoints(racial) racial.texture.overlay:SetTexture(Gladdy.db.racialBorderStyle) @@ -103,6 +113,13 @@ function Racial:UpdateFrame(unit) local width, height = Gladdy.db.racialSize * Gladdy.db.racialWidthFactor, Gladdy.db.racialSize + racial:SetFrameStrata(Gladdy.db.racialFrameStrata) + racial:SetFrameLevel(Gladdy.db.racialFrameLevel) + racial.cooldownFrame:SetFrameStrata(Gladdy.db.racialFrameStrata) + racial.cooldownFrame:SetFrameLevel(Gladdy.db.racialFrameLevel + 1) + racial.borderFrame:SetFrameStrata(Gladdy.db.racialFrameStrata) + racial.borderFrame:SetFrameLevel(Gladdy.db.racialFrameLevel + 2) + racial:SetWidth(width) racial:SetHeight(height) racial.cooldown:SetWidth(width - width/16) @@ -311,37 +328,13 @@ function Racial:GetOptions() position = { type = "group", name = L["Position"], - order = 4, + order = 5, args = { header = { type = "header", name = L["Icon position"], order = 4, }, - racialAnchor = Gladdy:option({ - type = "select", - name = L["Anchor"], - desc = L["This changes the anchor of the racial icon"], - order = 20, - values = { - ["trinket"] = L["Trinket"], - ["classIcon"] = L["Class Icon"], - ["healthBar"] = L["Health Bar"], - ["powerBar"] = L["Power Bar"], - }, - }), - racialPos = Gladdy:option({ - type = "select", - name = L["Icon position"], - desc = L["This changes position relative to its anchor of the racial icon"], - order = 21, - values = { - ["LEFT"] = L["Left"], - ["RIGHT"] = L["Right"], - ["TOP"] = L["Top"], - ["BOTTOM"] = L["Bottom"], - }, - }), racialXOffset = Gladdy:option({ type = "range", name = L["Horizontal offset"], @@ -387,6 +380,35 @@ function Racial:GetOptions() }), }, }, + frameStrata = { + type = "group", + name = L["Frame Strata and Level"], + order = 6, + args = { + headerAuraLevel = { + type = "header", + name = L["Frame Strata and Level"], + order = 1, + }, + racialFrameStrata = Gladdy:option({ + type = "select", + name = L["Frame Strata"], + order = 2, + values = Gladdy.frameStrata, + sorting = Gladdy.frameStrataSorting, + width = "full", + }), + racialFrameLevel = Gladdy:option({ + type = "range", + name = L["Frame Level"], + min = 0, + max = 500, + step = 1, + order = 3, + width = "full", + }), + }, + }, }, }, } diff --git a/Modules/ShadowsightTimer.lua b/Modules/ShadowsightTimer.lua index d25dfc3..09d9631 100644 --- a/Modules/ShadowsightTimer.lua +++ b/Modules/ShadowsightTimer.lua @@ -21,6 +21,8 @@ local ShadowsightTimer = Gladdy:NewModule("Shadowsight Timer", nil, { shadowsightTimerStartTime = 91, shadowsightTimerResetTime = 120, shadowsightTimerShowTwoTimer = false, + shadowsightTimerFrameStrata = "HIGH", + shadowsightTimerFrameLevel = 20, }) -- /run LibStub("Gladdy").modules["Shadowsight Timer"]:AURA_GAIN(nil, nil, 34709) @@ -78,6 +80,9 @@ function ShadowsightTimer:CreateTimerFrame(anchor, name, points) self[name].font:SetPoint("LEFT", 5, 0) self[name].font:SetJustifyH("LEFT") self[name].font:SetTextColor(1, 0.8, 0) + + self[name]:SetFrameStrata(Gladdy.db.shadowsightTimerFrameStrata) + self[name]:SetFrameLevel(Gladdy.db.shadowsightTimerFrameLevel) end function ShadowsightTimer:CreateAnchor() @@ -102,6 +107,14 @@ end function ShadowsightTimer:UpdateFrameOnce() self.anchor:EnableMouse(not Gladdy.db.shadowsightTimerLocked) + + self.anchor:SetFrameStrata(Gladdy.db.shadowsightTimerFrameStrata) + self.anchor:SetFrameLevel(Gladdy.db.shadowsightTimerFrameLevel) + self.timerFrame1:SetFrameStrata(Gladdy.db.shadowsightTimerFrameStrata) + self.timerFrame1:SetFrameLevel(Gladdy.db.shadowsightTimerFrameLevel) + self.timerFrame2:SetFrameStrata(Gladdy.db.shadowsightTimerFrameStrata) + self.timerFrame2:SetFrameLevel(Gladdy.db.shadowsightTimerFrameLevel) + if Gladdy.db.shadowsightTimerEnabled then self.anchor:SetScale(Gladdy.db.shadowsightTimerScale) self.anchor:ClearAllPoints() @@ -268,7 +281,7 @@ end function ShadowsightTimer:GetOptions() return { - headerArenaCountdown = { + headerShadowsight = { type = "header", name = L["Shadowsight Timer"], order = 2, @@ -278,61 +291,143 @@ function ShadowsightTimer:GetOptions() name = L["Enabled"], --desc = L["Turns countdown before the start of an arena match on/off."], order = 3, - width = "full", }), shadowsightTimerLocked = Gladdy:option({ type = "toggle", name = L["Locked"], --desc = L["Turns countdown before the start of an arena match on/off."], order = 4, - width = "full", }), shadowsightTimerShowTwoTimer = Gladdy:option({ type = "toggle", name = L["Show two timers"], order = 5, - width = "full", }), shadowsightAnnounce = Gladdy:option({ type = "toggle", name = L["Announce"], --desc = L["Turns countdown before the start of an arena match on/off."], order = 6, - width = "full", }), - shadowsightTimerScale = Gladdy:option({ - type = "range", - name = L["Scale"], + group = { + type = "group", + childGroups = "tree", + name = L["Frame"], order = 7, - min = 0.1, - max = 5, - step = 0.1, - width = "full", - }), - headerTimer = { - type = "header", - name = L["Shadowsight CDs"], - order = 10, + args = { + general = { + type = "group", + name = L["Scale"], + order = 1, + args = { + header = { + type = "header", + name = L["Scale"], + order = 1, + }, + shadowsightTimerScale = Gladdy:option({ + type = "range", + name = L["Scale"], + order = 2, + min = 0.1, + max = 5, + step = 0.1, + width = "full", + }), + }, + }, + cooldown = { + type = "group", + name = L["Cooldown"], + order = 2, + args = { + header = { + type = "header", + name = L["Shadowsight CDs"], + order = 1, + }, + shadowsightTimerStartTime = Gladdy:option({ + type = "range", + name = L["Start Time"], + desc = L["Start time in seconds"], + min = 80, + max = 100, + order = 2, + step = 0.1, + width = "full", + }), + shadowsightTimerResetTime = Gladdy:option({ + type = "range", + name = L["Reset Time"], + desc = L["Reset time in seconds"], + min = 110, + max = 130, + order = 3, + step = 0.1, + width = "full", + }), + }, + }, + --[[font = { + type = "group", + name = L["Font"], + order = 3, + args = { + header = { + type = "header", + name = L["Font"], + order = 4, + }, + racialFont = Gladdy:option({ + type = "select", + name = L["Font"], + desc = L["Font of the cooldown"], + order = 11, + dialogControl = "LSM30_Font", + values = AceGUIWidgetLSMlists.font, + }), + racialFontScale = Gladdy:option({ + type = "range", + name = L["Font scale"], + desc = L["Scale of the font"], + order = 12, + min = 0.1, + max = 2, + step = 0.1, + width = "full", + }), + }, + },--]] + frameStrata = { + type = "group", + name = L["Frame Strata and Level"], + order = 6, + args = { + headerAuraLevel = { + type = "header", + name = L["Frame Strata and Level"], + order = 1, + }, + shadowsightTimerFrameStrata = Gladdy:option({ + type = "select", + name = L["Frame Strata"], + order = 2, + values = Gladdy.frameStrata, + sorting = Gladdy.frameStrataSorting, + width = "full", + }), + shadowsightTimerFrameLevel = Gladdy:option({ + type = "range", + name = L["Frame Level"], + min = 0, + max = 500, + step = 1, + order = 3, + width = "full", + }), + }, + }, + }, }, - shadowsightTimerStartTime = Gladdy:option({ - type = "range", - name = L["Start Time"], - desc = L["Start time in seconds"], - min = 80, - max = 100, - order = 11, - step = 0.1, - width = "full", - }), - shadowsightTimerResetTime = Gladdy:option({ - type = "range", - name = L["Reset Time"], - desc = L["Reset time in seconds"], - min = 110, - max = 130, - order = 12, - step = 0.1, - width = "full", - }), } end \ No newline at end of file diff --git a/Modules/Trinket.lua b/Modules/Trinket.lua index 928d30c..41a68ba 100644 --- a/Modules/Trinket.lua +++ b/Modules/Trinket.lua @@ -19,6 +19,8 @@ local Trinket = Gladdy:NewModule("Trinket", 80, { trinketCooldownNumberAlpha = 1, trinketXOffset = 0, trinketYOffset = 0, + trinketFrameStrata = "MEDIUM", + trinketFrameLevel = 5, }) function Trinket:Initialize() @@ -62,6 +64,9 @@ end function Trinket:CreateFrame(unit) local trinket = CreateFrame("Button", "GladdyTrinketButton" .. unit, Gladdy.buttons[unit]) trinket:EnableMouse(false) + trinket:SetFrameStrata(Gladdy.db.trinketFrameStrata) + trinket:SetFrameLevel(Gladdy.db.trinketFrameLevel) + trinket.texture = trinket:CreateTexture(nil, "BACKGROUND") trinket.texture:SetAllPoints(trinket) trinket.texture:SetTexture("Interface\\Icons\\INV_Jewelry_TrinketPVP_02") @@ -70,11 +75,15 @@ function Trinket:CreateFrame(unit) trinket.cooldown = CreateFrame("Cooldown", nil, trinket, "CooldownFrameTemplate") trinket.cooldown.noCooldownCount = true --Gladdy.db.trinketDisableOmniCC trinket.cooldown:SetHideCountdownNumbers(true) + trinket.cooldown:SetFrameStrata(Gladdy.db.trinketFrameStrata) + trinket.cooldown:SetFrameLevel(Gladdy.db.trinketFrameLevel + 1) trinket.cooldownFrame = CreateFrame("Frame", nil, trinket) trinket.cooldownFrame:ClearAllPoints() trinket.cooldownFrame:SetPoint("TOPLEFT", trinket, "TOPLEFT") trinket.cooldownFrame:SetPoint("BOTTOMRIGHT", trinket, "BOTTOMRIGHT") + trinket.cooldownFrame:SetFrameStrata(Gladdy.db.trinketFrameStrata) + trinket.cooldownFrame:SetFrameLevel(Gladdy.db.trinketFrameLevel + 2) trinket.cooldownFont = trinket.cooldownFrame:CreateFontString(nil, "OVERLAY") trinket.cooldownFont:SetFont(Gladdy:SMFetch("font", "trinketFont"), 20, "OUTLINE") @@ -84,6 +93,9 @@ function Trinket:CreateFrame(unit) trinket.borderFrame = CreateFrame("Frame", nil, trinket) trinket.borderFrame:SetAllPoints(trinket) + trinket.borderFrame:SetFrameStrata(Gladdy.db.trinketFrameStrata) + trinket.borderFrame:SetFrameLevel(Gladdy.db.trinketFrameLevel + 3) + trinket.texture.overlay = trinket.borderFrame:CreateTexture(nil, "OVERLAY") trinket.texture.overlay:SetAllPoints(trinket) trinket.texture.overlay:SetTexture(Gladdy.db.trinketBorderStyle) @@ -104,6 +116,15 @@ function Trinket:UpdateFrame(unit) local width, height = Gladdy.db.trinketSize * Gladdy.db.trinketWidthFactor, Gladdy.db.trinketSize + trinket:SetFrameStrata(Gladdy.db.trinketFrameStrata) + trinket:SetFrameLevel(Gladdy.db.trinketFrameLevel) + trinket.cooldown:SetFrameStrata(Gladdy.db.trinketFrameStrata) + trinket.cooldown:SetFrameLevel(Gladdy.db.trinketFrameLevel + 1) + trinket.cooldownFrame:SetFrameStrata(Gladdy.db.trinketFrameStrata) + trinket.cooldownFrame:SetFrameLevel(Gladdy.db.trinketFrameLevel + 2) + trinket.borderFrame:SetFrameStrata(Gladdy.db.trinketFrameStrata) + trinket.borderFrame:SetFrameLevel(Gladdy.db.trinketFrameLevel + 3) + trinket:SetWidth(width) trinket:SetHeight(height) trinket.cooldown:SetWidth(width - width/16) @@ -316,22 +337,30 @@ function Trinket:GetOptions() position = { type = "group", name = L["Position"], - order = 4, + order = 5, args = { header = { type = "header", name = L["Icon position"], order = 4, }, - trinketPos = Gladdy:option({ - type = "select", - name = L["Icon position"], - desc = L["This changes positions of the trinket"], - order = 21, - values = { - ["LEFT"] = L["Left"], - ["RIGHT"] = L["Right"], - }, + trinketXOffset = Gladdy:option({ + type = "range", + name = L["Horizontal offset"], + order = 23, + min = -800, + max = 800, + step = 0.1, + width = "full", + }), + trinketYOffset = Gladdy:option({ + type = "range", + name = L["Vertical offset"], + order = 24, + min = -800, + max = 800, + step = 0.1, + width = "full", }), }, }, @@ -360,6 +389,35 @@ function Trinket:GetOptions() }), }, }, + frameStrata = { + type = "group", + name = L["Frame Strata and Level"], + order = 6, + args = { + headerAuraLevel = { + type = "header", + name = L["Frame Strata and Level"], + order = 1, + }, + trinketFrameStrata = Gladdy:option({ + type = "select", + name = L["Frame Strata"], + order = 2, + values = Gladdy.frameStrata, + sorting = Gladdy.frameStrataSorting, + width = "full", + }), + trinketFrameLevel = Gladdy:option({ + type = "range", + name = L["Frame Level"], + min = 0, + max = 500, + step = 1, + order = 3, + width = "full", + }), + }, + }, }, }, } From 1dd411fed760378853df35745fec61546faac1fc Mon Sep 17 00:00:00 2001 From: Sumsebrum Date: Wed, 12 Jan 2022 20:57:53 +0100 Subject: [PATCH 42/65] green colored trinket option added --- Modules/Trinket.lua | 59 +++++++++++++++++++++++++++++++++++++++------ 1 file changed, 52 insertions(+), 7 deletions(-) diff --git a/Modules/Trinket.lua b/Modules/Trinket.lua index 41a68ba..5bf0fda 100644 --- a/Modules/Trinket.lua +++ b/Modules/Trinket.lua @@ -9,6 +9,7 @@ local L = Gladdy.L local Trinket = Gladdy:NewModule("Trinket", 80, { trinketFont = "DorisPP", trinketFontScale = 1, + trinketFontEnabled = true, trinketEnabled = true, trinketSize = 60 + 20 + 1, trinketWidthFactor = 0.9, @@ -21,6 +22,7 @@ local Trinket = Gladdy:NewModule("Trinket", 80, { trinketYOffset = 0, trinketFrameStrata = "MEDIUM", trinketFrameLevel = 5, + trinketColored = false, }) function Trinket:Initialize() @@ -35,6 +37,9 @@ local function iconTimer(self, elapsed) self.active = false self.cooldown:Clear() Gladdy:SendMessage("TRINKET_READY", self.unit) + if Gladdy.db.trinketColored then + self:SetBackdropColor(0,1,0,1) + end else self.timeLeft = self.timeLeft - elapsed end @@ -57,12 +62,17 @@ local function iconTimer(self, elapsed) self.cooldownFont:SetTextColor(1, 0, 0, Gladdy.db.trinketCooldownNumberAlpha) self.cooldownFont:SetFont(Gladdy:SMFetch("font", "trinketFont"), (self:GetWidth()/2 - 1) * Gladdy.db.trinketFontScale, "OUTLINE") end - Gladdy:FormatTimer(self.cooldownFont, self.timeLeft, self.timeLeft < 10, true) + if Gladdy.db.trinketFontEnabled then + Gladdy:FormatTimer(self.cooldownFont, self.timeLeft, self.timeLeft < 10, true) + else + self.cooldownFont:SetText("") + end end end function Trinket:CreateFrame(unit) - local trinket = CreateFrame("Button", "GladdyTrinketButton" .. unit, Gladdy.buttons[unit]) + local trinket = CreateFrame("Button", "GladdyTrinketButton" .. unit, Gladdy.buttons[unit], BackdropTemplateMixin and "BackdropTemplate") + trinket:SetBackdrop({bgFile = "Interface\\AddOns\\Gladdy\\Images\\trinket" }) trinket:EnableMouse(false) trinket:SetFrameStrata(Gladdy.db.trinketFrameStrata) trinket:SetFrameLevel(Gladdy.db.trinketFrameLevel) @@ -114,6 +124,18 @@ function Trinket:UpdateFrame(unit) return end + if Gladdy.db.trinketColored then + if trinket.active then + trinket:SetBackdropColor(1,0,0,1) + else + trinket:SetBackdropColor(0,1,0,1) + end + trinket.texture:SetTexture() + else + trinket:SetBackdropColor(0,1,0,0) + trinket.texture:SetTexture("Interface\\Icons\\INV_Jewelry_TrinketPVP_02") + end + local width, height = Gladdy.db.trinketSize * Gladdy.db.trinketWidthFactor, Gladdy.db.trinketSize trinket:SetFrameStrata(Gladdy.db.trinketFrameStrata) @@ -151,7 +173,15 @@ function Trinket:UpdateFrame(unit) 0) end - if (Gladdy.db.trinketEnabled == false) then + trinket.cooldown:SetAlpha(Gladdy.db.trinketCooldownAlpha) + + if Gladdy.db.trinketDisableCircle then + trinket.cooldown:Hide() + else + trinket.cooldown:Show() + end + + if (not Gladdy.db.trinketEnabled) then trinket:Hide() else trinket:Show() @@ -215,6 +245,9 @@ function Trinket:Used(unit, startTime, duration) trinket.timeLeft = (startTime/1000.0 + duration/1000.0) - GetTime() if not Gladdy.db.trinketDisableCircle then trinket.cooldown:SetCooldown(startTime/1000.0, duration/1000.0) end trinket.active = true + if Gladdy.db.trinketColored then + trinket:SetBackdropColor(1,0,0,1) + end Gladdy:SendMessage("TRINKET_USED", unit) end end @@ -232,11 +265,17 @@ function Trinket:GetOptions() desc = L["Enable trinket icon"], order = 3, }), + trinketColored = Gladdy:option({ + type = "toggle", + name = L["Green colored trinket"], + desc = L["Shows a green icon when off CD and red when on CD."], + order = 4, + }), group = { type = "group", childGroups = "tree", name = L["Frame"], - order = 4, + order = 5, args = { general = { type = "group", @@ -312,13 +351,19 @@ function Trinket:GetOptions() header = { type = "header", name = L["Font"], - order = 4, + order = 1, }, + trinketFontEnabled = Gladdy:option({ + type = "toggle", + name = L["Font Enabled"], + order = 2, + width = "full", + }), trinketFont = Gladdy:option({ type = "select", name = L["Font"], desc = L["Font of the cooldown"], - order = 11, + order = 3, dialogControl = "LSM30_Font", values = AceGUIWidgetLSMlists.font, }), @@ -326,7 +371,7 @@ function Trinket:GetOptions() type = "range", name = L["Font scale"], desc = L["Scale of the font"], - order = 12, + order = 4, min = 0.1, max = 2, step = 0.1, From 1e926024cee557ec91877146eed4113c9f7b121f Mon Sep 17 00:00:00 2001 From: Sumsebrum Date: Wed, 12 Jan 2022 20:58:20 +0100 Subject: [PATCH 43/65] green colored trinket option added --- Images/trinket.blp | Bin 0 -> 6660 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 Images/trinket.blp diff --git a/Images/trinket.blp b/Images/trinket.blp new file mode 100644 index 0000000000000000000000000000000000000000..ad29aaa96e4871fc24994034db7f12f20e2c017b GIT binary patch literal 6660 zcmeHLOGs2v82)FpQbtDup$C$dxGFI+qBb*^HW>yMnN%c2MUX^IEu*wmv@j|Y!c3E( zHiZbes20tDMav=;ga|Y(Aqpqd>7mT&f875%j!Co_!Mq2~<2(QRyXT(a&h}lqH+cZS zo8j?TI8$#*$DW6MCH7SSz1WAbk7G|?jS7Ejxu}3X03BO65!62Q(HMktH&ndcOwD86 zxbyUK&-vlt{qif1@(TKb%~i$E_LlVo3lEBUTSNRvU=*6-LMPiXGnwMljCe6o3>JHOfoBzF)^cByvXJaqP zL$*G}pY{(xnEYs4?tj-#a?L;2u0!SY9H^NznWx7N&a?Pd(br#S4ShBPx!@N{T8*7-2HQ??D1SpXtsATsj`zMu^64Lv`d?OfI9^A= zjuEQ!!ML2CeT{+7guCAc*#EYEnfDLJ_`Elj$T^4y#9s3rtM6j{pFcc22drzXzxKdu z#uvLJzUptb`Z!K zTHn9spTvh_zF6va3YO>ZK(~G-#N|U7aL)%Zpls-U>0)KTJsaz^cA$I&M$riNxk?fh<`26b4#rMzvIKH*WlN0V!bfgX(ss+PpqFdQiH=_d?uVa z|KwR(YVud_sp7}=uM8}f=Qn9O4d5#{Z}oXjx!rH+H(9sp+-20KO=J63Z6nQ FzX3$kCJ_Jt literal 0 HcmV?d00001 From 22526c03869c50d5556ba472f5e09ac2e4098904 Mon Sep 17 00:00:00 2001 From: Sumsebrum Date: Wed, 12 Jan 2022 21:04:25 +0100 Subject: [PATCH 44/65] cleanup --- Gladdy.lua | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Gladdy.lua b/Gladdy.lua index e378938..416ba57 100644 --- a/Gladdy.lua +++ b/Gladdy.lua @@ -216,11 +216,11 @@ function Gladdy:DeleteUnknownOptions(tbl, refTbl, str) end for k,v in pairs(tbl) do if refTbl[k] == nil then - --Gladdy:Print("SavedVariable deleted:", str .. "." .. k, "not found!") + Gladdy:Debug("INFO", "SavedVariable deleted:", str .. "." .. k, "not found!") tbl[k] = nil else if type(v) ~= type(refTbl[k]) then - --Gladdy:Print("SavedVariable deleted:", str .. "." .. k, "type error!", "Expected", type(refTbl[k]), "but found", type(v)) + Gladdy:Debug("INFO", "SavedVariable deleted:", str .. "." .. k, "type error!", "Expected", type(refTbl[k]), "but found", type(v)) tbl[k] = nil elseif type(v) == "table" then Gladdy:DeleteUnknownOptions(v, refTbl[k], str .. "." .. k) From 12abedfd0f0fd8b1890a390fe32d264eaac9451b Mon Sep 17 00:00:00 2001 From: Sumsebrum Date: Wed, 12 Jan 2022 21:08:30 +0100 Subject: [PATCH 45/65] readme added features --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 112f909..baceaaa 100644 --- a/README.md +++ b/README.md @@ -83,6 +83,7 @@ Thank you for the great feedback and active contribution. - **big overhaul of positioning elements added! All elements besides HP and PowerBar can be moved separately** - added Mover Frames for Auras, Interrupts, (De)Buffs, CastBar, ClassIcon, CombatIndicator, Cooldowns, DRs, Pets, Racial, Trinket - this will hopefully make configuration a lot easier + - all visible elements' FrameStrata and FrameLevel can be configured (overlap frames how you want it) - **SpecDetection:** - fixed spec detection for Paladins - added following spells for better spec detection: @@ -123,6 +124,7 @@ Thank you for the great feedback and active contribution. - **Shadowsight:** - reset timer when buff was taken - add a configurable 2nd timer or show one timer with the closest CD +- **Trinket: green/red option added** - **fixed some DR-categories** (Hibernate / Chastice / Dragonsbreath / ImpConcussiveShot / Counterattack) - **Pixel Perfect option added** (makes your Gladdy Frames pixel perfect - no more wierd scaling interferences) - **Pets can be grouped** (not perfect yet, but a first step) From 061bc5859cdf421cc235d3f272abfaeccfe6ba8d Mon Sep 17 00:00:00 2001 From: Sumsebrum Date: Wed, 12 Jan 2022 21:31:56 +0100 Subject: [PATCH 46/65] imp blink is Arcane --- Constants.lua | 2 +- README.md | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Constants.lua b/Constants.lua index d04dcda..8bbd4c7 100644 --- a/Constants.lua +++ b/Constants.lua @@ -35,7 +35,7 @@ local specBuffs = { [GetSpellInfo(12043)] = L["Arcane"], -- Presence of Mind [GetSpellInfo(31589)] = L["Arcane"], -- Slow [GetSpellInfo(12472)] = L["Frost"], -- Icy Veins - [GetSpellInfo(46989)] = L["Fire"], -- Improved Blink + [GetSpellInfo(46989)] = L["Arcane"], -- Improved Blink -- PALADIN [GetSpellInfo(31836)] = L["Holy"], -- Light's Grace diff --git a/README.md b/README.md index baceaaa..19c87b6 100644 --- a/README.md +++ b/README.md @@ -79,7 +79,7 @@ Thank you for the great feedback and active contribution. **Here is a list of all changes:** - **major release version set to v2** - - this will mean, that export strings will still be backwards compatible, but not forward (v2 String cant be imported into v1 Strings but vice versa) + - this will mean, that export strings will still be backwards compatible, but not forward (Gladdy v2.x String cant be imported into Gladdy v1.x but vice versa) - **big overhaul of positioning elements added! All elements besides HP and PowerBar can be moved separately** - added Mover Frames for Auras, Interrupts, (De)Buffs, CastBar, ClassIcon, CombatIndicator, Cooldowns, DRs, Pets, Racial, Trinket - this will hopefully make configuration a lot easier @@ -89,7 +89,7 @@ Thank you for the great feedback and active contribution. - added following spells for better spec detection: - Expose Weakness (Survival Hunter) - Slow (Arcane Mage) - - Improved Blink (Fire Mage) + - Improved Blink (Arcane Mage) - Vindication (Retribution Paladin) - Holy Shield (Protection Paladin) - Vampiric Embrace (Shadow Priest) @@ -100,7 +100,7 @@ Thank you for the great feedback and active contribution. - Healing Way (Restoration Shaman) - Totem of Wrath (Elemental Shaman) - Dark Pact (Affliction Warlock) - - Conflagate (Destruction Warlock) + - Conflagrate (Destruction Warlock) - Shield Slam (Protection Warrior) - **Cooldowns:** - added Fear Ward and Fear Ward Cooldown Detection in case it was used before arena From 298ce642fc70584fbb00d32b1f6fed7881356bab Mon Sep 17 00:00:00 2001 From: Sumsebrum Date: Wed, 12 Jan 2022 22:15:39 +0100 Subject: [PATCH 47/65] fixed racial cooldowncircle --- Modules/Racial.lua | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/Modules/Racial.lua b/Modules/Racial.lua index 153c71f..717e4d5 100644 --- a/Modules/Racial.lua +++ b/Modules/Racial.lua @@ -76,13 +76,15 @@ function Racial:CreateFrame(unit) racial.cooldown = CreateFrame("Cooldown", nil, racial, "CooldownFrameTemplate") racial.cooldown.noCooldownCount = true --Gladdy.db.racialDisableOmniCC racial.cooldown:SetHideCountdownNumbers(true) + racial.cooldown:SetFrameStrata(Gladdy.db.racialFrameStrata) + racial.cooldown:SetFrameLevel(Gladdy.db.racialFrameLevel + 1) racial.cooldownFrame = CreateFrame("Frame", nil, racial) racial.cooldownFrame:ClearAllPoints() racial.cooldownFrame:SetPoint("TOPLEFT", racial, "TOPLEFT") racial.cooldownFrame:SetPoint("BOTTOMRIGHT", racial, "BOTTOMRIGHT") racial.cooldownFrame:SetFrameStrata(Gladdy.db.racialFrameStrata) - racial.cooldownFrame:SetFrameLevel(Gladdy.db.racialFrameLevel + 1) + racial.cooldownFrame:SetFrameLevel(Gladdy.db.racialFrameLevel + 2) racial.cooldownFont = racial.cooldownFrame:CreateFontString(nil, "OVERLAY") racial.cooldownFont:SetFont(Gladdy:SMFetch("font", "racialFont"), 20, "OUTLINE") @@ -93,7 +95,7 @@ function Racial:CreateFrame(unit) racial.borderFrame = CreateFrame("Frame", nil, racial) racial.borderFrame:SetAllPoints(racial) racial.borderFrame:SetFrameStrata(Gladdy.db.racialFrameStrata) - racial.borderFrame:SetFrameLevel(Gladdy.db.racialFrameLevel + 2) + racial.borderFrame:SetFrameLevel(Gladdy.db.racialFrameLevel + 3) racial.texture.overlay = racial.borderFrame:CreateTexture(nil, "OVERLAY") racial.texture.overlay:SetAllPoints(racial) @@ -115,10 +117,12 @@ function Racial:UpdateFrame(unit) racial:SetFrameStrata(Gladdy.db.racialFrameStrata) racial:SetFrameLevel(Gladdy.db.racialFrameLevel) + racial.cooldown:SetFrameStrata(Gladdy.db.racialFrameStrata) + racial.cooldown:SetFrameLevel(Gladdy.db.racialFrameLevel + 1) racial.cooldownFrame:SetFrameStrata(Gladdy.db.racialFrameStrata) - racial.cooldownFrame:SetFrameLevel(Gladdy.db.racialFrameLevel + 1) + racial.cooldownFrame:SetFrameLevel(Gladdy.db.racialFrameLevel + 2) racial.borderFrame:SetFrameStrata(Gladdy.db.racialFrameStrata) - racial.borderFrame:SetFrameLevel(Gladdy.db.racialFrameLevel + 2) + racial.borderFrame:SetFrameLevel(Gladdy.db.racialFrameLevel + 3) racial:SetWidth(width) racial:SetHeight(height) @@ -178,7 +182,7 @@ function Racial:Used(unit, startTime, duration) end if not racial.active then racial.timeLeft = duration - if not Gladdy.db.trinketDisableCircle then racial.cooldown:SetCooldown(startTime, duration) end + if not Gladdy.db.racialDisableCircle then racial.cooldown:SetCooldown(startTime, duration) end racial.active = true end end From d24b330411033747fffa755d2d035196b9383fbb Mon Sep 17 00:00:00 2001 From: Sumsebrum Date: Wed, 12 Jan 2022 22:16:02 +0100 Subject: [PATCH 48/65] added option to hide castbar icon --- Modules/Castbar.lua | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/Modules/Castbar.lua b/Modules/Castbar.lua index 9a16ff2..10526fc 100644 --- a/Modules/Castbar.lua +++ b/Modules/Castbar.lua @@ -33,6 +33,7 @@ local Castbar = Gladdy:NewModule("Cast Bar", 70, { castBarIconColor = { r = 0, g = 0, b = 0, a = 1 }, castBarBorderColor = { r = 0, g = 0, b = 0, a = 1 }, castBarFontColor = { r = 1, g = 1, b = 1, a = 1 }, + castBarIconEnabled = true, castBarGuesses = true, castBarXOffset = 0, castBarYOffset = 0, @@ -173,6 +174,11 @@ function Castbar:UpdateFrame(unit) castBar.icon:SetHeight(Gladdy.db.castBarIconSize) castBar.icon.texture:SetAllPoints(castBar.icon) castBar.icon:ClearAllPoints() + if Gladdy.db.castBarIconEnabled then + castBar.icon:Show() + else + castBar.icon:Hide() + end local rightMargin = 0 local leftMargin = 0 @@ -664,6 +670,12 @@ function Castbar:GetOptions() name = L["Icon Size"], order = 1, }, + castBarIconEnabled = option({ + type = "toggle", + name = L["Icon Enabled"], + order = 2, + width = "full", + }), castBarIconSize = option({ type = "range", name = L["Icon size"], From e5151f16052a3cd304606b2842a4064d9bdd78d6 Mon Sep 17 00:00:00 2001 From: Sumsebrum Date: Wed, 12 Jan 2022 22:17:28 +0100 Subject: [PATCH 49/65] added option to hide castbar icon --- Modules/Castbar.lua | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/Modules/Castbar.lua b/Modules/Castbar.lua index 10526fc..06d3ff7 100644 --- a/Modules/Castbar.lua +++ b/Modules/Castbar.lua @@ -423,7 +423,11 @@ function Castbar:CAST_START(unit, spell, icon, value, maxValue, test) castBar.spark:Show() end castBar:SetAlpha(1) - castBar.icon:Show() + if Gladdy.db.castBarIconEnabled then + castBar.icon:Show() + else + castBar.icon:Hide() + end end function Castbar:CAST_STOP(unit, ...) From 61c50b3e3266b3e0eec428800389047ca68d14d1 Mon Sep 17 00:00:00 2001 From: Sumsebrum Date: Wed, 12 Jan 2022 22:18:34 +0100 Subject: [PATCH 50/65] readme --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 19c87b6..9f0084c 100644 --- a/README.md +++ b/README.md @@ -124,6 +124,7 @@ Thank you for the great feedback and active contribution. - **Shadowsight:** - reset timer when buff was taken - add a configurable 2nd timer or show one timer with the closest CD +- **CastBar Icon can be enabled/disabled** - **Trinket: green/red option added** - **fixed some DR-categories** (Hibernate / Chastice / Dragonsbreath / ImpConcussiveShot / Counterattack) - **Pixel Perfect option added** (makes your Gladdy Frames pixel perfect - no more wierd scaling interferences) From 99fa6c0664e12dee7e14274def472c5fff357ae8 Mon Sep 17 00:00:00 2001 From: Sumsebrum Date: Wed, 12 Jan 2022 22:20:53 +0100 Subject: [PATCH 51/65] readme added disclaimer --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 9f0084c..ce7c701 100644 --- a/README.md +++ b/README.md @@ -77,6 +77,8 @@ Thank you! This is a packed release with new features and bugfixes. Most importantly, positioning of all elements has been redone with movable frames. Thank you for the great feedback and active contribution. +####Attention: Once you install this version it will drastically change your current profile! You can't go back to an earlier version. Either back up your WTF or export your Profile before updating! + **Here is a list of all changes:** - **major release version set to v2** - this will mean, that export strings will still be backwards compatible, but not forward (Gladdy v2.x String cant be imported into Gladdy v1.x but vice versa) From ea10481c13e9eb7f35fcb77d0462592f09268abd Mon Sep 17 00:00:00 2001 From: Sumsebrum Date: Wed, 12 Jan 2022 22:39:06 +0100 Subject: [PATCH 52/65] configurable trinket color --- Modules/Trinket.lua | 34 ++++++++++++++++++++++++++++------ Options.lua | 4 ++++ 2 files changed, 32 insertions(+), 6 deletions(-) diff --git a/Modules/Trinket.lua b/Modules/Trinket.lua index 5bf0fda..7a2ba38 100644 --- a/Modules/Trinket.lua +++ b/Modules/Trinket.lua @@ -23,6 +23,8 @@ local Trinket = Gladdy:NewModule("Trinket", 80, { trinketFrameStrata = "MEDIUM", trinketFrameLevel = 5, trinketColored = false, + trinketColoredCd = { r = 1, g = 0, b = 0, a = 1 }, + trinketColoredNoCd = { r = 0, g = 1, b = 0, a = 1 }, }) function Trinket:Initialize() @@ -38,7 +40,7 @@ local function iconTimer(self, elapsed) self.cooldown:Clear() Gladdy:SendMessage("TRINKET_READY", self.unit) if Gladdy.db.trinketColored then - self:SetBackdropColor(0,1,0,1) + self:SetBackdropColor(Gladdy:SetColor(Gladdy.db.trinketColoredNoCd)) end else self.timeLeft = self.timeLeft - elapsed @@ -126,13 +128,13 @@ function Trinket:UpdateFrame(unit) if Gladdy.db.trinketColored then if trinket.active then - trinket:SetBackdropColor(1,0,0,1) + trinket:SetBackdropColor(Gladdy:SetColor(Gladdy.db.trinketColoredCd)) else - trinket:SetBackdropColor(0,1,0,1) + trinket:SetBackdropColor(Gladdy:SetColor(Gladdy.db.trinketColoredNoCd)) end trinket.texture:SetTexture() else - trinket:SetBackdropColor(0,1,0,0) + trinket:SetBackdropColor(Gladdy:SetColor(Gladdy.db.trinketColoredNoCd)) trinket.texture:SetTexture("Interface\\Icons\\INV_Jewelry_TrinketPVP_02") end @@ -160,7 +162,7 @@ function Trinket:UpdateFrame(unit) trinket.texture:SetAllPoints(trinket) trinket.texture.overlay:SetTexture(Gladdy.db.trinketBorderStyle) - trinket.texture.overlay:SetVertexColor(Gladdy.db.trinketBorderColor.r, Gladdy.db.trinketBorderColor.g, Gladdy.db.trinketBorderColor.b, Gladdy.db.trinketBorderColor.a) + trinket.texture.overlay:SetVertexColor(Gladdy:SetColor(Gladdy.db.trinketBorderColor)) Gladdy:SetPosition(trinket, unit, "trinketXOffset", "trinketYOffset", Trinket:LegacySetPosition(trinket, unit), Trinket) @@ -246,7 +248,7 @@ function Trinket:Used(unit, startTime, duration) if not Gladdy.db.trinketDisableCircle then trinket.cooldown:SetCooldown(startTime/1000.0, duration/1000.0) end trinket.active = true if Gladdy.db.trinketColored then - trinket:SetBackdropColor(1,0,0,1) + trinket:SetBackdropColor(Gladdy:SetColor(Gladdy.db.trinketColoredCd)) end Gladdy:SendMessage("TRINKET_USED", unit) end @@ -271,6 +273,26 @@ function Trinket:GetOptions() desc = L["Shows a green icon when off CD and red when on CD."], order = 4, }), + trinketColoredCd = Gladdy:colorOption({ + type = "color", + name = L["Colored trinket CD"], + desc = L["Color of the border"], + order = 5, + hasAlpha = true, + disabled = function() + return not Gladdy.db.trinketColored + end, + }), + trinketColoredNoCd = Gladdy:colorOption({ + type = "color", + name = L["Colored trinket No CD"], + desc = L["Color of the border"], + order = 6, + hasAlpha = true, + disabled = function() + return not Gladdy.db.trinketColored + end, + }), group = { type = "group", childGroups = "tree", diff --git a/Options.lua b/Options.lua index 0dd3bfe..ea4c3a3 100644 --- a/Options.lua +++ b/Options.lua @@ -104,6 +104,10 @@ function Gladdy:option(params) return defaults end +function Gladdy:SetColor(option) + return option.r, option.g, option.b, option.a +end + function Gladdy:colorOption(params) local defaults = { get = function(info) From 042a8f78129a30188c4ec9cc552f7fe9d38796af Mon Sep 17 00:00:00 2001 From: Sumsebrum Date: Wed, 12 Jan 2022 23:04:23 +0100 Subject: [PATCH 53/65] colored trinket option wording --- Modules/Trinket.lua | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Modules/Trinket.lua b/Modules/Trinket.lua index 7a2ba38..a21ab5e 100644 --- a/Modules/Trinket.lua +++ b/Modules/Trinket.lua @@ -269,8 +269,8 @@ function Trinket:GetOptions() }), trinketColored = Gladdy:option({ type = "toggle", - name = L["Green colored trinket"], - desc = L["Shows a green icon when off CD and red when on CD."], + name = L["Colored trinket"], + desc = L["Shows a solid colored icon when off/off CD."], order = 4, }), trinketColoredCd = Gladdy:colorOption({ From 5f4bf034e583d4d84659abf4c78da688e33aade8 Mon Sep 17 00:00:00 2001 From: Sumsebrum Date: Wed, 12 Jan 2022 23:07:23 +0100 Subject: [PATCH 54/65] use Gladdy:SetColor for all color setters --- Frame.lua | 5 ++--- Modules/Auras.lua | 18 +++++++++--------- Modules/BuffsDebuffs.lua | 2 +- Modules/Castbar.lua | 28 ++++++++++++++-------------- Modules/Classicon.lua | 2 +- Modules/CombatIndicator.lua | 4 ++-- Modules/Cooldowns.lua | 10 +++++----- Modules/Diminishings.lua | 18 +++++++++--------- Modules/Healthbar.lua | 16 ++++++++-------- Modules/Highlight.lua | 6 +++--- Modules/Pets.lua | 26 +++++++++++++------------- Modules/Powerbar.lua | 16 ++++++++-------- Modules/Racial.lua | 2 +- 13 files changed, 76 insertions(+), 77 deletions(-) diff --git a/Frame.lua b/Frame.lua index 7f86b67..79a1354 100644 --- a/Frame.lua +++ b/Frame.lua @@ -39,7 +39,7 @@ function Gladdy:CreateFrame() self.frame.background = CreateFrame("Frame", nil, self.frame, BackdropTemplateMixin and "BackdropTemplate") self.frame.background:SetBackdrop({bgFile = "Interface\\Tooltips\\UI-Tooltip-Background", tile = false, tileSize = 16}) self.frame.background:SetFrameStrata("BACKGROUND") - self.frame.background:SetBackdropColor(self.db.backgroundColor.r, self.db.backgroundColor.g, self.db.backgroundColor.b, self.db.backgroundColor.a) + self.frame.background:SetBackdropColor(Gladdy:SetColor(self.db.backgroundColor)) self.frame.background:SetAllPoints(self.frame) --self.frame.texture = self.frame:CreateTexture(nil, "OVERLAY") --self.frame.texture:SetAllPoints(self.frame) @@ -149,8 +149,7 @@ function Gladdy:UpdateFrame() self.frame:SetWidth(self.db.barWidth + highlightBorderSize) self.frame:SetHeight(height) self.frame:ClearAllPoints() - self.frame.background:SetBackdropColor(self.db.backgroundColor.r, self.db.backgroundColor.g, self.db.backgroundColor.b, self.db.backgroundColor.a) - --self.frame:SetBackdropColor(self.db.frameColor.r, self.db.frameColor.g, self.db.frameColor.b, self.db.frameColor.a) + self.frame.background:SetBackdropColor(Gladdy:SetColor(self.db.backgroundColor)) self.frame:ClearAllPoints() if (self.db.x == 0 and self.db.y == 0) then self.frame:SetPoint("CENTER") diff --git a/Modules/Auras.lua b/Modules/Auras.lua index 367bbf4..7d903e4 100644 --- a/Modules/Auras.lua +++ b/Modules/Auras.lua @@ -108,7 +108,7 @@ function Auras:CreateFrame(unit) auraFrame.text = auraFrame.cooldownFrame:CreateFontString(nil, "OVERLAY") auraFrame.text:SetFont(Gladdy:SMFetch("font", "auraFont"), 10, "OUTLINE") - auraFrame.text:SetTextColor(Gladdy.db.auraFontColor.r, Gladdy.db.auraFontColor.g, Gladdy.db.auraFontColor.b, Gladdy.db.auraFontColor.a) + auraFrame.text:SetTextColor(Gladdy:SetColor(Gladdy.db.auraFontColor)) --auraFrame.text:SetShadowOffset(1, -1) --auraFrame.text:SetShadowColor(0, 0, 0, 1) auraFrame.text:SetJustifyH("CENTER") @@ -181,7 +181,7 @@ function Auras:CreateInterrupt(unit) interruptFrame.text = interruptFrame.cooldownFrame:CreateFontString(nil, "OVERLAY") interruptFrame.text:SetFont(Gladdy:SMFetch("font", "auraFont"), 10, "OUTLINE") - interruptFrame.text:SetTextColor(Gladdy.db.auraFontColor.r, Gladdy.db.auraFontColor.g, Gladdy.db.auraFontColor.b, Gladdy.db.auraFontColor.a) + interruptFrame.text:SetTextColor(Gladdy:SetColor(Gladdy.db.auraFontColor)) --auraFrame.text:SetShadowOffset(1, -1) --auraFrame.text:SetShadowColor(0, 0, 0, 1) interruptFrame.text:SetJustifyH("CENTER") @@ -280,13 +280,13 @@ function Auras:UpdateFrame(unit) auraFrame.cooldown:SetAlpha(Gladdy.db.auraCooldownAlpha) auraFrame.text:SetFont(Gladdy:SMFetch("font", "auraFont"), (width/2 - 1) * Gladdy.db.auraFontSizeScale, "OUTLINE") - auraFrame.text:SetTextColor(Gladdy.db.auraFontColor.r, Gladdy.db.auraFontColor.g, Gladdy.db.auraFontColor.b, Gladdy.db.auraFontColor.a) + auraFrame.text:SetTextColor(Gladdy:SetColor(Gladdy.db.auraFontColor)) auraFrame.icon.overlay:SetTexture(Gladdy.db.auraBorderStyle) if auraFrame.track and auraFrame.track == AURA_TYPE_DEBUFF then - auraFrame.icon.overlay:SetVertexColor(Gladdy.db.auraDebuffBorderColor.r, Gladdy.db.auraDebuffBorderColor.g, Gladdy.db.auraDebuffBorderColor.b, Gladdy.db.auraDebuffBorderColor.a) + auraFrame.icon.overlay:SetVertexColor(Gladdy:SetColor(Gladdy.db.auraDebuffBorderColor)) elseif auraFrame.track and auraFrame.track == AURA_TYPE_BUFF then - auraFrame.icon.overlay:SetVertexColor(Gladdy.db.auraBuffBorderColor.r, Gladdy.db.auraBuffBorderColor.g, Gladdy.db.auraBuffBorderColor.b, Gladdy.db.auraBuffBorderColor.a) + auraFrame.icon.overlay:SetVertexColor(Gladdy:SetColor(Gladdy.db.auraBuffBorderColor)) else auraFrame.icon.overlay:SetVertexColor(0, 0, 0, 1) end @@ -381,7 +381,7 @@ function Auras:UpdateInterruptFrame(unit) interruptFrame.cooldown:SetAlpha(Gladdy.db.auraCooldownAlpha) interruptFrame.text:SetFont(Gladdy:SMFetch("font", "auraFont"), (width/2 - 1) * Gladdy.db.auraFontSizeScale, "OUTLINE") - interruptFrame.text:SetTextColor(Gladdy.db.auraFontColor.r, Gladdy.db.auraFontColor.g, Gladdy.db.auraFontColor.b, Gladdy.db.auraFontColor.a) + interruptFrame.text:SetTextColor(Gladdy:SetColor(Gladdy.db.auraFontColor)) interruptFrame.icon.overlay:SetTexture(Gladdy.db.auraBorderStyle) if interruptFrame.spellSchool then @@ -522,9 +522,9 @@ function Auras:AURA_GAIN(unit, auraType, spellID, spellName, icon, duration, exp auraFrame.icon.overlay:Show() auraFrame.cooldownFrame:Show() if auraType == AURA_TYPE_DEBUFF then - auraFrame.icon.overlay:SetVertexColor(Gladdy.db.auraDebuffBorderColor.r, Gladdy.db.auraDebuffBorderColor.g, Gladdy.db.auraDebuffBorderColor.b, Gladdy.db.auraDebuffBorderColor.a) + auraFrame.icon.overlay:SetVertexColor(Gladdy:SetColor(Gladdy.db.auraDebuffBorderColor)) elseif auraType == AURA_TYPE_BUFF then - auraFrame.icon.overlay:SetVertexColor(Gladdy.db.auraBuffBorderColor.r, Gladdy.db.auraBuffBorderColor.g, Gladdy.db.auraBuffBorderColor.b, Gladdy.db.auraBuffBorderColor.a) + auraFrame.icon.overlay:SetVertexColor(Gladdy:SetColor(Gladdy.db.auraBuffBorderColor)) else auraFrame.icon.overlay:SetVertexColor(Gladdy.db.frameBorderColor.r, Gladdy.db.frameBorderColor.g, Gladdy.db.frameBorderColor.b, Gladdy.db.frameBorderColor.a) end @@ -559,7 +559,7 @@ end function Auras:GetInterruptColor(extraSpellSchool) if not Gladdy.db.auraInterruptColorsEnabled then - return Gladdy.db.auraDebuffBorderColor.r, Gladdy.db.auraDebuffBorderColor.g, Gladdy.db.auraDebuffBorderColor.b, Gladdy.db.auraDebuffBorderColor.a + return Gladdy:SetColor(Gladdy.db.auraDebuffBorderColor) else local color = Gladdy.db.auraInterruptColors[extraSpellSchool] or Gladdy.db.auraInterruptColors["unknown"] return color.r, color.g, color.b, color.a diff --git a/Modules/BuffsDebuffs.lua b/Modules/BuffsDebuffs.lua index 8c75649..d1575a9 100644 --- a/Modules/BuffsDebuffs.lua +++ b/Modules/BuffsDebuffs.lua @@ -62,7 +62,7 @@ local function spellSchoolToOptionValue(spellSchool) spellSchoolToOptionValueTable[spellSchool].b, spellSchoolToOptionValueTable[spellSchool].a else - return Gladdy.db.buffsBorderColor.r,Gladdy.db.buffsBorderColor.g,Gladdy.db.buffsBorderColor.b,Gladdy.db.buffsBorderColor.a + return Gladdy:SetColor(Gladdy.db.buffsBorderColor) end end diff --git a/Modules/Castbar.lua b/Modules/Castbar.lua index 06d3ff7..644bfcd 100644 --- a/Modules/Castbar.lua +++ b/Modules/Castbar.lua @@ -70,13 +70,13 @@ function Castbar:CreateFrame(unit) castBar.backdrop:SetAllPoints(castBar) castBar.backdrop:SetBackdrop({ edgeFile = Gladdy:SMFetch("border", "castBarBorderStyle"), edgeSize = Gladdy.db.castBarBorderSize }) - castBar.backdrop:SetBackdropBorderColor(Gladdy.db.castBarBorderColor.r, Gladdy.db.castBarBorderColor.g, Gladdy.db.castBarBorderColor.b, Gladdy.db.castBarBorderColor.a) + castBar.backdrop:SetBackdropBorderColor(Gladdy:SetColor(Gladdy.db.castBarBorderColor)) castBar.backdrop:SetFrameStrata(Gladdy.db.castBarFrameStrata) castBar.backdrop:SetFrameLevel(Gladdy.db.castBarFrameLevel - 1) castBar.bar = CreateFrame("StatusBar", nil, castBar) castBar.bar:SetStatusBarTexture(Gladdy:SMFetch("statusbar", "castBarTexture")) - castBar.bar:SetStatusBarColor(Gladdy.db.castBarColor.r, Gladdy.db.castBarColor.g, Gladdy.db.castBarColor.b, Gladdy.db.castBarColor.a) + castBar.bar:SetStatusBarColor(Gladdy:SetColor(Gladdy.db.castBarColor)) castBar.bar:SetMinMaxValues(0, 100) castBar.bar:SetFrameLevel(0) castBar.bar:SetFrameStrata(Gladdy.db.castBarFrameStrata) @@ -92,7 +92,7 @@ function Castbar:CreateFrame(unit) castBar.bg = castBar.bar:CreateTexture(nil, "BACKGROUND") castBar.bg:SetAlpha(1) castBar.bg:SetTexture(Gladdy:SMFetch("statusbar", "castBarTexture")) - castBar.bg:SetVertexColor(Gladdy.db.castBarBgColor.r, Gladdy.db.castBarBgColor.g, Gladdy.db.castBarBgColor.b, Gladdy.db.castBarBgColor.a) + castBar.bg:SetVertexColor(Gladdy:SetColor(Gladdy.db.castBarBgColor)) castBar.bg:SetAllPoints(castBar.bar) castBar.icon = CreateFrame("Frame", nil, castBar) @@ -114,7 +114,7 @@ function Castbar:CreateFrame(unit) castBar.spellText = castBar:CreateFontString(nil, "LOW") castBar.spellText:SetFont(Gladdy:SMFetch("font", "auraFont"), Gladdy.db.castBarFontSize) - castBar.spellText:SetTextColor(Gladdy.db.castBarFontColor.r, Gladdy.db.castBarFontColor.g, Gladdy.db.castBarFontColor.b, Gladdy.db.castBarFontColor.a) + castBar.spellText:SetTextColor(Gladdy:SetColor(Gladdy.db.castBarFontColor)) castBar.spellText:SetShadowOffset(1, -1) castBar.spellText:SetShadowColor(0, 0, 0, 1) castBar.spellText:SetJustifyH("CENTER") @@ -122,7 +122,7 @@ function Castbar:CreateFrame(unit) castBar.timeText = castBar:CreateFontString(nil, "LOW") castBar.timeText:SetFont(Gladdy:SMFetch("font", "auraFont"), Gladdy.db.castBarFontSize) - castBar.timeText:SetTextColor(Gladdy.db.castBarFontColor.r, Gladdy.db.castBarFontColor.g, Gladdy.db.castBarFontColor.b, Gladdy.db.castBarFontColor.a) + castBar.timeText:SetTextColor(Gladdy:SetColor(Gladdy.db.castBarFontColor)) castBar.timeText:SetShadowOffset(1, -1) castBar.timeText:SetShadowColor(0, 0, 0, 1) castBar.timeText:SetJustifyH("CENTER") @@ -152,20 +152,20 @@ function Castbar:UpdateFrame(unit) castBar:SetHeight(Gladdy.db.castBarHeight) castBar.backdrop:SetBackdrop({ edgeFile = Gladdy:SMFetch("border", "castBarBorderStyle"), edgeSize = Gladdy.db.castBarBorderSize }) - castBar.backdrop:SetBackdropBorderColor(Gladdy.db.castBarBorderColor.r, Gladdy.db.castBarBorderColor.g, Gladdy.db.castBarBorderColor.b, Gladdy.db.castBarBorderColor.a) + castBar.backdrop:SetBackdropBorderColor(Gladdy:SetColor(Gladdy.db.castBarBorderColor)) castBar.bar:SetStatusBarTexture(Gladdy:SMFetch("statusbar", "castBarTexture")) castBar.bar:ClearAllPoints() - castBar.bar:SetStatusBarColor(Gladdy.db.castBarColor.r, Gladdy.db.castBarColor.g, Gladdy.db.castBarColor.b, Gladdy.db.castBarColor.a) + castBar.bar:SetStatusBarColor(Gladdy:SetColor(Gladdy.db.castBarColor)) castBar.bar:SetPoint("TOPLEFT", castBar, "TOPLEFT", (Gladdy.db.castBarBorderSize/Gladdy.db.statusbarBorderOffset), -(Gladdy.db.castBarBorderSize/Gladdy.db.statusbarBorderOffset)) castBar.bar:SetPoint("BOTTOMRIGHT", castBar, "BOTTOMRIGHT", -(Gladdy.db.castBarBorderSize/Gladdy.db.statusbarBorderOffset), (Gladdy.db.castBarBorderSize/Gladdy.db.statusbarBorderOffset)) castBar.bg:SetTexture(Gladdy:SMFetch("statusbar", "castBarTexture")) - castBar.bg:SetVertexColor(Gladdy.db.castBarBgColor.r, Gladdy.db.castBarBgColor.g, Gladdy.db.castBarBgColor.b, Gladdy.db.castBarBgColor.a) + castBar.bg:SetVertexColor(Gladdy:SetColor(Gladdy.db.castBarBgColor)) if Gladdy.db.castBarSparkEnabled then castBar.spark:SetHeight(Gladdy.db.castBarHeight * 1.8) - castBar.spark:SetVertexColor(Gladdy.db.castBarSparkColor.r, Gladdy.db.castBarSparkColor.g, Gladdy.db.castBarSparkColor.b, Gladdy.db.castBarSparkColor.a) + castBar.spark:SetVertexColor(Gladdy:SetColor(Gladdy.db.castBarSparkColor)) else castBar.spark:SetAlpha(0) end @@ -193,13 +193,13 @@ function Castbar:UpdateFrame(unit) Gladdy:SetPosition(castBar, unit, "castBarXOffset", "castBarYOffset", Castbar:LegacySetPosition(castBar, unit, leftMargin, rightMargin), Castbar) castBar.spellText:SetFont(Gladdy:SMFetch("font", "castBarFont"), Gladdy.db.castBarFontSize) - castBar.spellText:SetTextColor(Gladdy.db.castBarFontColor.r, Gladdy.db.castBarFontColor.g, Gladdy.db.castBarFontColor.b, Gladdy.db.castBarFontColor.a) + castBar.spellText:SetTextColor(Gladdy:SetColor(Gladdy.db.castBarFontColor)) castBar.timeText:SetFont(Gladdy:SMFetch("font", "castBarFont"), Gladdy.db.castBarFontSize) - castBar.timeText:SetTextColor(Gladdy.db.castBarFontColor.r, Gladdy.db.castBarFontColor.g, Gladdy.db.castBarFontColor.b, Gladdy.db.castBarFontColor.a) + castBar.timeText:SetTextColor(Gladdy:SetColor(Gladdy.db.castBarFontColor)) castBar.icon.texture.overlay:SetTexture(Gladdy.db.castBarIconStyle) - castBar.icon.texture.overlay:SetVertexColor(Gladdy.db.castBarIconColor.r, Gladdy.db.castBarIconColor.g, Gladdy.db.castBarIconColor.b, Gladdy.db.castBarIconColor.a) + castBar.icon.texture.overlay:SetVertexColor(Gladdy:SetColor(Gladdy.db.castBarIconColor)) if (unit == "arena1") then Gladdy:CreateMover(castBar, "castBarXOffset", "castBarYOffset", L["Cast Bar"], {"TOPLEFT", "TOPLEFT"}, Gladdy.db.castBarWidth, Gladdy.db.castBarHeight, 0, 0) @@ -409,7 +409,7 @@ function Castbar:CAST_START(unit, spell, icon, value, maxValue, test) castBar.channeling = test == "channel" end - castBar.bar:SetStatusBarColor(Gladdy.db.castBarColor.r, Gladdy.db.castBarColor.g, Gladdy.db.castBarColor.b, Gladdy.db.castBarColor.a) + castBar.bar:SetStatusBarColor(Gladdy:SetColor(Gladdy.db.castBarColor)) castBar.value = value castBar.maxValue = maxValue castBar.bar:SetMinMaxValues(0, maxValue) @@ -594,7 +594,7 @@ function Castbar:GetOptions() desc = L["Height of the bar"], order = 3, min = 0, - max = 50, + max = 100, step = 1, width = "full", }), diff --git a/Modules/Classicon.lua b/Modules/Classicon.lua index 01099a6..906954c 100644 --- a/Modules/Classicon.lua +++ b/Modules/Classicon.lua @@ -134,7 +134,7 @@ function Classicon:UpdateFrame(unit) classIcon.texture:SetAllPoints(classIcon) classIcon.texture.overlay:SetTexture(Gladdy.db.classIconBorderStyle) - classIcon.texture.overlay:SetVertexColor(Gladdy.db.classIconBorderColor.r, Gladdy.db.classIconBorderColor.g, Gladdy.db.classIconBorderColor.b, Gladdy.db.classIconBorderColor.a) + classIcon.texture.overlay:SetVertexColor(Gladdy:SetColor(Gladdy.db.classIconBorderColor)) if Gladdy.db.classIconEnabled then classIcon:Show() else diff --git a/Modules/CombatIndicator.lua b/Modules/CombatIndicator.lua index 5647178..dc2a693 100644 --- a/Modules/CombatIndicator.lua +++ b/Modules/CombatIndicator.lua @@ -51,7 +51,7 @@ function CombatIndicator:CreateFrame(unit) ciFrame.border = ciFrame:CreateTexture(nil, "OVERLAY") ciFrame.border:SetAllPoints(ciFrame) ciFrame.border:SetTexture(Gladdy.db.ciBorderStyle) - ciFrame.border:SetVertexColor(Gladdy.db.ciBorderColor.r, Gladdy.db.ciBorderColor.g, Gladdy.db.ciBorderColor.b, Gladdy.db.ciBorderColor.a) + ciFrame.border:SetVertexColor(Gladdy:SetColor(Gladdy.db.ciBorderColor)) self.frames[unit] = ciFrame button.ciFrame = ciFrame @@ -70,7 +70,7 @@ function CombatIndicator:UpdateFrame(unit) ciFrame:SetHeight(Gladdy.db.ciSize) ciFrame:SetWidth(Gladdy.db.ciSize * Gladdy.db.ciWidthFactor) ciFrame.border:SetTexture(Gladdy.db.ciBorderStyle) - ciFrame.border:SetVertexColor(Gladdy.db.ciBorderColor.r, Gladdy.db.ciBorderColor.g, Gladdy.db.ciBorderColor.b, Gladdy.db.ciBorderColor.a) + ciFrame.border:SetVertexColor(Gladdy:SetColor(Gladdy.db.ciBorderColor)) Gladdy:SetPosition(ciFrame, unit, "ciXOffset", "ciYOffset", CombatIndicator:LegacySetPosition(ciFrame, unit), CombatIndicator) diff --git a/Modules/Cooldowns.lua b/Modules/Cooldowns.lua index 268762d..b08fa83 100644 --- a/Modules/Cooldowns.lua +++ b/Modules/Cooldowns.lua @@ -125,11 +125,11 @@ function Cooldowns:CreateFrame(unit) icon.border = icon.cooldownFrame:CreateTexture(nil, "OVERLAY") icon.border:SetAllPoints(icon) icon.border:SetTexture(Gladdy.db.cooldownBorderStyle) - icon.border:SetVertexColor(Gladdy.db.cooldownBorderColor.r, Gladdy.db.cooldownBorderColor.g, Gladdy.db.cooldownBorderColor.b, Gladdy.db.cooldownBorderColor.a) + icon.border:SetVertexColor(Gladdy:SetColor(Gladdy.db.cooldownBorderColor)) icon.cooldownFont = icon.cooldownFrame:CreateFontString(nil, "OVERLAY") icon.cooldownFont:SetFont(Gladdy:SMFetch("font", "cooldownFont"), Gladdy.db.cooldownSize / 2 * Gladdy.db.cooldownFontScale, "OUTLINE") - icon.cooldownFont:SetTextColor(Gladdy.db.cooldownFontColor.r, Gladdy.db.cooldownFontColor.g, Gladdy.db.cooldownFontColor.b, Gladdy.db.cooldownFontColor.a) + icon.cooldownFont:SetTextColor(Gladdy:SetColor(Gladdy.db.cooldownFontColor)) icon.cooldownFont:SetAllPoints(icon) spellCooldownFrame["icon" .. x] = icon @@ -169,7 +169,7 @@ function Cooldowns:UpdateFrame(unit) icon:SetHeight(Gladdy.db.cooldownSize) icon:SetWidth(Gladdy.db.cooldownSize * Gladdy.db.cooldownWidthFactor) icon.cooldownFont:SetFont(Gladdy:SMFetch("font", "cooldownFont"), Gladdy.db.cooldownSize / 2 * Gladdy.db.cooldownFontScale, "OUTLINE") - icon.cooldownFont:SetTextColor(Gladdy.db.cooldownFontColor.r, Gladdy.db.cooldownFontColor.g, Gladdy.db.cooldownFontColor.b, Gladdy.db.cooldownFontColor.a) + icon.cooldownFont:SetTextColor(Gladdy:SetColor(Gladdy.db.cooldownFontColor)) icon:ClearAllPoints() if (Gladdy.db.cooldownXGrowDirection == "LEFT") then if (j == 1) then @@ -217,10 +217,10 @@ function Cooldowns:UpdateFrame(unit) icon.cooldown:SetAlpha(Gladdy.db.cooldownCooldownAlpha) icon.cooldownFont:SetFont(Gladdy:SMFetch("font", "cooldownFont"), (icon:GetWidth()/2 - 1) * Gladdy.db.cooldownFontScale, "OUTLINE") - icon.cooldownFont:SetTextColor(Gladdy.db.cooldownFontColor.r, Gladdy.db.cooldownFontColor.g, Gladdy.db.cooldownFontColor.b, Gladdy.db.cooldownFontColor.a) + icon.cooldownFont:SetTextColor(Gladdy:SetColor(Gladdy.db.cooldownFontColor)) icon.border:SetTexture(Gladdy.db.cooldownBorderStyle) - icon.border:SetVertexColor(Gladdy.db.cooldownBorderColor.r, Gladdy.db.cooldownBorderColor.g, Gladdy.db.cooldownBorderColor.b, Gladdy.db.cooldownBorderColor.a) + icon.border:SetVertexColor(Gladdy:SetColor(Gladdy.db.cooldownBorderColor)) icon:Hide() end button.spellCooldownFrame:Show() diff --git a/Modules/Diminishings.lua b/Modules/Diminishings.lua index 98af424..a83b2d9 100644 --- a/Modules/Diminishings.lua +++ b/Modules/Diminishings.lua @@ -56,11 +56,11 @@ local Diminishings = Gladdy:NewModule("Diminishings", nil, { local function getDiminishColor(dr) if dr == 0.5 then - return Gladdy.db.drHalfColor.r, Gladdy.db.drHalfColor.g, Gladdy.db.drHalfColor.b, Gladdy.db.drHalfColor.a + return Gladdy:SetColor(Gladdy.db.drHalfColor) elseif dr == 0.25 then - return Gladdy.db.drQuarterColor.r, Gladdy.db.drQuarterColor.g, Gladdy.db.drQuarterColor.b, Gladdy.db.drQuarterColor.a + return Gladdy:SetColor(Gladdy.db.drQuarterColor) else - return Gladdy.db.drNullColor.r, Gladdy.db.drNullColor.g, Gladdy.db.drNullColor.b, Gladdy.db.drNullColor.a + return Gladdy:SetColor(Gladdy.db.drNullColor) end end @@ -138,7 +138,7 @@ function Diminishings:CreateFrame(unit) icon.text = icon.cooldownFrame:CreateFontString(nil, "OVERLAY") icon.text:SetDrawLayer("OVERLAY") icon.text:SetFont(Gladdy:SMFetch("font", "drFont"), 10, "OUTLINE") - icon.text:SetTextColor(Gladdy.db.drFontColor.r, Gladdy.db.drFontColor.g, Gladdy.db.drFontColor.b, Gladdy.db.drFontColor.a) + icon.text:SetTextColor(Gladdy:SetColor(Gladdy.db.drFontColor)) icon.text:SetShadowOffset(1, -1) icon.text:SetShadowColor(0, 0, 0, 1) icon.text:SetJustifyH("CENTER") @@ -147,7 +147,7 @@ function Diminishings:CreateFrame(unit) icon.timeText = icon.cooldownFrame:CreateFontString(nil, "OVERLAY") icon.timeText:SetDrawLayer("OVERLAY") icon.timeText:SetFont(Gladdy:SMFetch("font", "drFont"), 10, "OUTLINE") - icon.timeText:SetTextColor(Gladdy.db.drFontColor.r, Gladdy.db.drFontColor.g, Gladdy.db.drFontColor.b, Gladdy.db.drFontColor.a) + icon.timeText:SetTextColor(Gladdy:SetColor(Gladdy.db.drFontColor)) icon.timeText:SetShadowOffset(1, -1) icon.timeText:SetShadowColor(0, 0, 0, 1) icon.timeText:SetJustifyH("CENTER") @@ -216,9 +216,9 @@ function Diminishings:UpdateFrame(unit) icon.cooldownFrame:SetFrameLevel(Gladdy.db.drFrameLevel + 2) icon.text:SetFont(Gladdy:SMFetch("font", "drFont"), (Gladdy.db.drIconSize/2 - 1) * Gladdy.db.drFontScale, "OUTLINE") - icon.text:SetTextColor(Gladdy.db.drFontColor.r, Gladdy.db.drFontColor.g, Gladdy.db.drFontColor.b, Gladdy.db.drFontColor.a) + icon.text:SetTextColor(Gladdy:SetColor(Gladdy.db.drFontColor)) icon.timeText:SetFont(Gladdy:SMFetch("font", "drFont"), (Gladdy.db.drIconSize/2 - 1) * Gladdy.db.drFontScale, "OUTLINE") - icon.timeText:SetTextColor(Gladdy.db.drFontColor.r, Gladdy.db.drFontColor.g, Gladdy.db.drFontColor.b, Gladdy.db.drFontColor.a) + icon.timeText:SetTextColor(Gladdy:SetColor(Gladdy.db.drFontColor)) icon.drLevelText:SetFont(Gladdy:SMFetch("font", "drLevelTextFont"), (Gladdy.db.drIconSize/2 - 1) * Gladdy.db.drLevelTextFontScale, "OUTLINE") @@ -235,7 +235,7 @@ function Diminishings:UpdateFrame(unit) if Gladdy.db.drBorderColorsEnabled then icon.border:SetVertexColor(getDiminishColor(icon.diminishing)) else - icon.border:SetVertexColor(Gladdy.db.drBorderColor.r, Gladdy.db.drBorderColor.g, Gladdy.db.drBorderColor.b, Gladdy.db.drBorderColor.a) + icon.border:SetVertexColor(Gladdy:SetColor(Gladdy.db.drBorderColor)) end if Gladdy.db.drLevelTextEnabled then @@ -355,7 +355,7 @@ function Diminishings:AuraFade(unit, spellID) if Gladdy.db.drBorderColorsEnabled then lastIcon.border:SetVertexColor(getDiminishColor(lastIcon.diminishing)) else - lastIcon.border:SetVertexColor(Gladdy.db.drBorderColor.r, Gladdy.db.drBorderColor.g, Gladdy.db.drBorderColor.b, Gladdy.db.drBorderColor.a) + lastIcon.border:SetVertexColor(Gladdy:SetColor(Gladdy.db.drBorderColor)) end lastIcon.cooldown:SetCooldown(GetTime(), Gladdy.db.drDuration) if Gladdy.db.drCategories[drCat].forceIcon then diff --git a/Modules/Healthbar.lua b/Modules/Healthbar.lua index 78132cf..4d88014 100644 --- a/Modules/Healthbar.lua +++ b/Modules/Healthbar.lua @@ -43,7 +43,7 @@ function Healthbar:CreateFrame(unit) healthBar:EnableMouse(false) healthBar:SetBackdrop({ edgeFile = Gladdy:SMFetch("border", "healthBarBorderStyle"), edgeSize = Gladdy.db.healthBarBorderSize }) - healthBar:SetBackdropBorderColor(Gladdy.db.healthBarBorderColor.r, Gladdy.db.healthBarBorderColor.g, Gladdy.db.healthBarBorderColor.b, Gladdy.db.healthBarBorderColor.a) + healthBar:SetBackdropBorderColor(Gladdy:SetColor(Gladdy.db.healthBarBorderColor)) healthBar:SetFrameStrata(Gladdy.db.healthFrameStrata) healthBar:SetFrameLevel(Gladdy.db.healthFrameLevel) @@ -58,7 +58,7 @@ function Healthbar:CreateFrame(unit) healthBar.bg:ClearAllPoints() healthBar.bg:SetAllPoints(healthBar.hp) healthBar.bg:SetAlpha(1) - healthBar.bg:SetVertexColor(Gladdy.db.healthBarBgColor.r, Gladdy.db.healthBarBgColor.g, Gladdy.db.healthBarBgColor.b, Gladdy.db.healthBarBgColor.a) + healthBar.bg:SetVertexColor(Gladdy:SetColor(Gladdy.db.healthBarBgColor)) healthBar.nameText = healthBar:CreateFontString(nil, "LOW", "GameFontNormalSmall") if (Gladdy.db.healthBarNameFontSize < 1) then @@ -68,7 +68,7 @@ function Healthbar:CreateFrame(unit) healthBar.nameText:SetFont(Gladdy:SMFetch("font", "healthBarFont"), Gladdy.db.healthBarNameFontSize) healthBar.nameText:Show() end - healthBar.nameText:SetTextColor(Gladdy.db.healthBarFontColor.r, Gladdy.db.healthBarFontColor.g, Gladdy.db.healthBarFontColor.b, Gladdy.db.healthBarFontColor.a) + healthBar.nameText:SetTextColor(Gladdy:SetColor(Gladdy.db.healthBarFontColor)) healthBar.nameText:SetShadowOffset(1, -1) healthBar.nameText:SetShadowColor(0, 0, 0, 1) healthBar.nameText:SetJustifyH("CENTER") @@ -82,7 +82,7 @@ function Healthbar:CreateFrame(unit) healthBar.healthText:SetFont(Gladdy:SMFetch("font", "healthBarFont"), Gladdy.db.healthBarHealthFontSize) healthBar.healthText:Hide() end - healthBar.healthText:SetTextColor(Gladdy.db.healthBarFontColor.r, Gladdy.db.healthBarFontColor.g, Gladdy.db.healthBarFontColor.b, Gladdy.db.healthBarFontColor.a) + healthBar.healthText:SetTextColor(Gladdy:SetColor(Gladdy.db.healthBarFontColor)) healthBar.healthText:SetShadowOffset(1, -1) healthBar.healthText:SetShadowColor(0, 0, 0, 1) healthBar.healthText:SetJustifyH("CENTER") @@ -160,11 +160,11 @@ function Healthbar:UpdateFrame(unit) healthBar.hp:SetFrameLevel(Gladdy.db.healthFrameLevel - 1) healthBar.bg:SetTexture(Gladdy:SMFetch("statusbar", "healthBarTexture")) - healthBar.bg:SetVertexColor(Gladdy.db.healthBarBgColor.r, Gladdy.db.healthBarBgColor.g, Gladdy.db.healthBarBgColor.b, Gladdy.db.healthBarBgColor.a) + healthBar.bg:SetVertexColor(Gladdy:SetColor(Gladdy.db.healthBarBgColor)) healthBar:SetBackdrop({ edgeFile = Gladdy:SMFetch("border", "healthBarBorderStyle"), edgeSize = Gladdy.db.healthBarBorderSize }) - healthBar:SetBackdropBorderColor(Gladdy.db.healthBarBorderColor.r, Gladdy.db.healthBarBorderColor.g, Gladdy.db.healthBarBorderColor.b, Gladdy.db.healthBarBorderColor.a) + healthBar:SetBackdropBorderColor(Gladdy:SetColor(Gladdy.db.healthBarBorderColor)) healthBar:ClearAllPoints() healthBar:SetPoint("TOPLEFT", Gladdy.buttons[unit], "TOPLEFT", 0, 0) healthBar:SetPoint("BOTTOMRIGHT", Gladdy.buttons[unit], "BOTTOMRIGHT") @@ -192,8 +192,8 @@ function Healthbar:UpdateFrame(unit) healthBar.nameText:Hide() end end - healthBar.nameText:SetTextColor(Gladdy.db.healthBarFontColor.r, Gladdy.db.healthBarFontColor.g, Gladdy.db.healthBarFontColor.b, Gladdy.db.healthBarFontColor.a) - healthBar.healthText:SetTextColor(Gladdy.db.healthBarFontColor.r, Gladdy.db.healthBarFontColor.g, Gladdy.db.healthBarFontColor.b, Gladdy.db.healthBarFontColor.a) + healthBar.nameText:SetTextColor(Gladdy:SetColor(Gladdy.db.healthBarFontColor)) + healthBar.healthText:SetTextColor(Gladdy:SetColor(Gladdy.db.healthBarFontColor)) end function Healthbar:ResetUnit(unit) diff --git a/Modules/Highlight.lua b/Modules/Highlight.lua index 0240caa..7430444 100644 --- a/Modules/Highlight.lua +++ b/Modules/Highlight.lua @@ -119,7 +119,7 @@ function Highlight:UpdateFrame(unit) end button.targetBorder:SetBackdrop({ edgeFile = Gladdy:SMFetch("border", "highlightBorderStyle"), edgeSize = borderSize }) - button.targetBorder:SetBackdropBorderColor(Gladdy.db.targetBorderColor.r, Gladdy.db.targetBorderColor.g, Gladdy.db.targetBorderColor.b, Gladdy.db.targetBorderColor.a) + button.targetBorder:SetBackdropBorderColor(Gladdy:SetColor(Gladdy.db.targetBorderColor)) button.focusBorder:SetWidth(width) button.focusBorder:SetHeight(height) @@ -132,7 +132,7 @@ function Highlight:UpdateFrame(unit) end button.focusBorder:SetBackdrop({ edgeFile = Gladdy:SMFetch("border", "highlightBorderStyle"), edgeSize = borderSize }) - button.focusBorder:SetBackdropBorderColor(Gladdy.db.focusBorderColor.r, Gladdy.db.focusBorderColor.g, Gladdy.db.focusBorderColor.b, Gladdy.db.focusBorderColor.a) + button.focusBorder:SetBackdropBorderColor(Gladdy:SetColor(Gladdy.db.focusBorderColor)) button.leaderBorder:SetWidth(width) button.leaderBorder:SetHeight(height) @@ -145,7 +145,7 @@ function Highlight:UpdateFrame(unit) end button.leaderBorder:SetBackdrop({ edgeFile = Gladdy:SMFetch("border", "highlightBorderStyle"), edgeSize = borderSize }) - button.leaderBorder:SetBackdropBorderColor(Gladdy.db.leaderBorderColor.r, Gladdy.db.leaderBorderColor.g, Gladdy.db.leaderBorderColor.b, Gladdy.db.leaderBorderColor.a) + button.leaderBorder:SetBackdropBorderColor(Gladdy:SetColor(Gladdy.db.leaderBorderColor)) if Gladdy.frame.testing then Highlight:Test(unit) end diff --git a/Modules/Pets.lua b/Modules/Pets.lua index fdd33b0..fc703b0 100644 --- a/Modules/Pets.lua +++ b/Modules/Pets.lua @@ -70,7 +70,7 @@ function Pets:PET_SPOTTED(unit) Gladdy.guids[UnitGUID(unit)] = unit if Gladdy.db.petEnabled then self.frames[unit].healthBar:SetAlpha(1) - self.frames[unit].healthBar.hp:SetStatusBarColor(Gladdy.db.petHealthBarColor.r, Gladdy.db.petHealthBarColor.g, Gladdy.db.petHealthBarColor.b, Gladdy.db.petHealthBarColor.a) + self.frames[unit].healthBar.hp:SetStatusBarColor(Gladdy:SetColor(Gladdy.db.petHealthBarColor)) self.frames[unit].healthBar:SetScript("OnUpdate", function(self) self.hp:SetValue(UnitHealth(self.unit)) Pets:SetHealthText(self, UnitHealth(unit), UnitHealthMax(unit)) @@ -157,7 +157,7 @@ function Pets:CreateFrame(unitId) local healthBar = CreateFrame("Frame", nil, button, BackdropTemplateMixin and "BackdropTemplate") healthBar:SetBackdrop({ edgeFile = Gladdy:SMFetch("border", "petHealthBarBorderStyle"), edgeSize = Gladdy.db.petHealthBarBorderSize }) - healthBar:SetBackdropBorderColor(Gladdy.db.petHealthBarBorderColor.r, Gladdy.db.petHealthBarBorderColor.g, Gladdy.db.petHealthBarBorderColor.b, Gladdy.db.petHealthBarBorderColor.a) + healthBar:SetBackdropBorderColor(Gladdy:SetColor(Gladdy.db.petHealthBarBorderColor)) healthBar:SetFrameStrata(Gladdy.db.petFrameStrata) healthBar:SetFrameLevel(Gladdy.db.petFrameLevel) healthBar:SetAllPoints(button) @@ -170,12 +170,12 @@ function Pets:CreateFrame(unitId) healthBar.portrait.border = healthBar:CreateTexture(nil, "OVERLAY") healthBar.portrait.border:SetAllPoints(healthBar.portrait) healthBar.portrait.border:SetTexture(Gladdy.db.classIconBorderStyle) - healthBar.portrait.border:SetVertexColor(Gladdy.db.petHealthBarBorderColor.r, Gladdy.db.petHealthBarBorderColor.g, Gladdy.db.petHealthBarBorderColor.b, Gladdy.db.petHealthBarBorderColor.a) + healthBar.portrait.border:SetVertexColor(Gladdy:SetColor(Gladdy.db.petHealthBarBorderColor)) healthBar.hp = CreateFrame("StatusBar", nil, healthBar) healthBar.hp:SetStatusBarTexture(Gladdy:SMFetch("statusbar", "petHealthBarTexture")) - healthBar.hp:SetStatusBarColor(Gladdy.db.petHealthBarColor.r, Gladdy.db.petHealthBarColor.g, Gladdy.db.petHealthBarColor.b, Gladdy.db.petHealthBarColor.a) + healthBar.hp:SetStatusBarColor(Gladdy:SetColor(Gladdy.db.petHealthBarColor)) healthBar.hp:SetMinMaxValues(0, 100) healthBar.hp:SetFrameStrata(Gladdy.db.petFrameStrata) healthBar.hp:SetFrameLevel(Gladdy.db.petFrameLevel - 1) @@ -186,7 +186,7 @@ function Pets:CreateFrame(unitId) healthBar.bg:ClearAllPoints() healthBar.bg:SetAllPoints(healthBar.hp) healthBar.bg:SetAlpha(1) - healthBar.bg:SetVertexColor(Gladdy.db.petHealthBarBgColor.r, Gladdy.db.petHealthBarBgColor.g, Gladdy.db.petHealthBarBgColor.b, Gladdy.db.petHealthBarBgColor.a) + healthBar.bg:SetVertexColor(Gladdy:SetColor(Gladdy.db.petHealthBarBgColor)) healthBar.nameText = healthBar:CreateFontString(nil, "LOW", "GameFontNormalSmall") if (Gladdy.db.petHealthBarFontSize < 1) then @@ -196,7 +196,7 @@ function Pets:CreateFrame(unitId) healthBar.nameText:SetFont(Gladdy:SMFetch("font", "petHealthBarFont"), Gladdy.db.petHealthBarFontSize) healthBar.nameText:Show() end - healthBar.nameText:SetTextColor(Gladdy.db.petHealthBarFontColor.r, Gladdy.db.petHealthBarFontColor.g, Gladdy.db.petHealthBarFontColor.b, Gladdy.db.petHealthBarFontColor.a) + healthBar.nameText:SetTextColor(Gladdy:SetColor(Gladdy.db.petHealthBarFontColor)) healthBar.nameText:SetShadowOffset(1, -1) healthBar.nameText:SetShadowColor(0, 0, 0, 1) healthBar.nameText:SetJustifyH("CENTER") @@ -210,7 +210,7 @@ function Pets:CreateFrame(unitId) healthBar.healthText:SetFont(Gladdy:SMFetch("font", "petHealthBarFont"), Gladdy.db.petHealthBarFontSize) healthBar.healthText:Hide() end - healthBar.healthText:SetTextColor(Gladdy.db.petHealthBarFontColor.r, Gladdy.db.petHealthBarFontColor.g, Gladdy.db.petHealthBarFontColor.b, Gladdy.db.petHealthBarFontColor.a) + healthBar.healthText:SetTextColor(Gladdy:SetColor(Gladdy.db.petHealthBarFontColor)) healthBar.healthText:SetShadowOffset(1, -1) healthBar.healthText:SetShadowColor(0, 0, 0, 1) healthBar.healthText:SetJustifyH("CENTER") @@ -289,17 +289,17 @@ function Pets:UpdateFrame(unitId) healthBar.portrait.border:Show() end healthBar.portrait.border:SetTexture(Gladdy.db.petPortraitBorderStyle) - healthBar.portrait.border:SetVertexColor(Gladdy.db.petHealthBarBorderColor.r, Gladdy.db.petHealthBarBorderColor.g, Gladdy.db.petHealthBarBorderColor.b, Gladdy.db.petHealthBarBorderColor.a) + healthBar.portrait.border:SetVertexColor(Gladdy:SetColor(Gladdy.db.petHealthBarBorderColor)) healthBar.bg:SetTexture(Gladdy:SMFetch("statusbar", "petHealthBarTexture")) - healthBar.bg:SetVertexColor(Gladdy.db.petHealthBarBgColor.r, Gladdy.db.petHealthBarBgColor.g, Gladdy.db.petHealthBarBgColor.b, Gladdy.db.petHealthBarBgColor.a) + healthBar.bg:SetVertexColor(Gladdy:SetColor(Gladdy.db.petHealthBarBgColor)) healthBar:SetBackdrop({ edgeFile = Gladdy:SMFetch("border", "petHealthBarBorderStyle"), edgeSize = Gladdy.db.petHealthBarBorderSize }) - healthBar:SetBackdropBorderColor(Gladdy.db.petHealthBarBorderColor.r, Gladdy.db.petHealthBarBorderColor.g, Gladdy.db.petHealthBarBorderColor.b, Gladdy.db.petHealthBarBorderColor.a) + healthBar:SetBackdropBorderColor(Gladdy:SetColor(Gladdy.db.petHealthBarBorderColor)) healthBar.hp:SetStatusBarTexture(Gladdy:SMFetch("statusbar", "petHealthBarTexture")) - healthBar.hp:SetStatusBarColor(Gladdy.db.petHealthBarColor.r, Gladdy.db.petHealthBarColor.g, Gladdy.db.petHealthBarColor.b, Gladdy.db.petHealthBarColor.a) + healthBar.hp:SetStatusBarColor(Gladdy:SetColor(Gladdy.db.petHealthBarColor)) healthBar.hp:ClearAllPoints() healthBar.hp:SetPoint("TOPLEFT", healthBar, "TOPLEFT", (Gladdy.db.petHealthBarBorderSize/Gladdy.db.statusbarBorderOffset), -(Gladdy.db.petHealthBarBorderSize/Gladdy.db.statusbarBorderOffset)) healthBar.hp:SetPoint("BOTTOMRIGHT", healthBar, "BOTTOMRIGHT", -(Gladdy.db.petHealthBarBorderSize/Gladdy.db.statusbarBorderOffset), (Gladdy.db.petHealthBarBorderSize/Gladdy.db.statusbarBorderOffset)) @@ -315,8 +315,8 @@ function Pets:UpdateFrame(unitId) healthBar.healthText:SetFont(Gladdy:SMFetch("font", "petHealthBarFont"), Gladdy.db.petHealthBarFontSize) healthBar.healthText:Show() end - healthBar.nameText:SetTextColor(Gladdy.db.petHealthBarFontColor.r, Gladdy.db.petHealthBarFontColor.g, Gladdy.db.petHealthBarFontColor.b, Gladdy.db.petHealthBarFontColor.a) - healthBar.healthText:SetTextColor(Gladdy.db.petHealthBarFontColor.r, Gladdy.db.petHealthBarFontColor.g, Gladdy.db.petHealthBarFontColor.b, Gladdy.db.petHealthBarFontColor.a) + healthBar.nameText:SetTextColor(Gladdy:SetColor(Gladdy.db.petHealthBarFontColor)) + healthBar.healthText:SetTextColor(Gladdy:SetColor(Gladdy.db.petHealthBarFontColor)) if (unit == "arenapet1") then Gladdy:CreateMover(self.frames[unit], "petXOffset", "petYOffset", L["Pets"], {"TOPLEFT", "TOPLEFT"}) end diff --git a/Modules/Powerbar.lua b/Modules/Powerbar.lua index af76f5c..4e99810 100644 --- a/Modules/Powerbar.lua +++ b/Modules/Powerbar.lua @@ -42,7 +42,7 @@ function Powerbar:CreateFrame(unit) powerBar:EnableMouse(false) powerBar:SetBackdrop({ edgeFile = Gladdy:SMFetch("border", "powerBarBorderStyle"), edgeSize = Gladdy.db.powerBarBorderSize }) - powerBar:SetBackdropBorderColor(Gladdy.db.powerBarBorderColor.r, Gladdy.db.powerBarBorderColor.g, Gladdy.db.powerBarBorderColor.b, Gladdy.db.powerBarBorderColor.a) + powerBar:SetBackdropBorderColor(Gladdy:SetColor(Gladdy.db.powerBarBorderColor)) powerBar:SetFrameStrata(Gladdy.db.powerFrameStrata) powerBar:SetFrameLevel(Gladdy.db.powerFrameLevel) @@ -56,11 +56,11 @@ function Powerbar:CreateFrame(unit) powerBar.bg:SetTexture(Gladdy:SMFetch("statusbar", "powerBarTexture")) powerBar.bg:ClearAllPoints() powerBar.bg:SetAllPoints(powerBar.energy) - powerBar.bg:SetVertexColor(Gladdy.db.powerBarBgColor.r, Gladdy.db.powerBarBgColor.g, Gladdy.db.powerBarBgColor.b, Gladdy.db.powerBarBgColor.a) + powerBar.bg:SetVertexColor(Gladdy:SetColor(Gladdy.db.powerBarBgColor)) powerBar.raceText = powerBar:CreateFontString(nil, "LOW") powerBar.raceText:SetFont(Gladdy:SMFetch("font", "powerBarFont"), Gladdy.db.powerBarFontSize) - powerBar.raceText:SetTextColor(Gladdy.db.powerBarFontColor.r, Gladdy.db.powerBarFontColor.g, Gladdy.db.powerBarFontColor.b, Gladdy.db.powerBarFontColor.a) + powerBar.raceText:SetTextColor(Gladdy:SetColor(Gladdy.db.powerBarFontColor)) powerBar.raceText:SetShadowOffset(1, -1) powerBar.raceText:SetShadowColor(0, 0, 0, 1) powerBar.raceText:SetJustifyH("CENTER") @@ -68,7 +68,7 @@ function Powerbar:CreateFrame(unit) powerBar.powerText = powerBar:CreateFontString(nil, "LOW") powerBar.powerText:SetFont(Gladdy:SMFetch("font", "powerBarFont"), Gladdy.db.powerBarFontSize) - powerBar.powerText:SetTextColor(Gladdy.db.powerBarFontColor.r, Gladdy.db.powerBarFontColor.g, Gladdy.db.powerBarFontColor.b, Gladdy.db.powerBarFontColor.a) + powerBar.powerText:SetTextColor(Gladdy:SetColor(Gladdy.db.powerBarFontColor)) powerBar.powerText:SetShadowOffset(1, -1) powerBar.powerText:SetShadowColor(0, 0, 0, 1) powerBar.powerText:SetJustifyH("CENTER") @@ -152,7 +152,7 @@ function Powerbar:UpdateFrame(unit) powerBar:Show() end powerBar.bg:SetTexture(Gladdy:SMFetch("statusbar", "powerBarTexture")) - powerBar.bg:SetVertexColor(Gladdy.db.powerBarBgColor.r, Gladdy.db.powerBarBgColor.g, Gladdy.db.powerBarBgColor.b, Gladdy.db.powerBarBgColor.a) + powerBar.bg:SetVertexColor(Gladdy:SetColor(Gladdy.db.powerBarBgColor)) powerBar:SetWidth(healthBar:GetWidth()) powerBar:SetHeight(Gladdy.db.powerBarHeight) @@ -162,7 +162,7 @@ function Powerbar:UpdateFrame(unit) powerBar:SetBackdrop({ edgeFile = Gladdy:SMFetch("border", "powerBarBorderStyle"), edgeSize = Gladdy.db.powerBarBorderSize }) - powerBar:SetBackdropBorderColor(Gladdy.db.powerBarBorderColor.r, Gladdy.db.powerBarBorderColor.g, Gladdy.db.powerBarBorderColor.b, Gladdy.db.powerBarBorderColor.a) + powerBar:SetBackdropBorderColor(Gladdy:SetColor(Gladdy.db.powerBarBorderColor)) powerBar.energy:SetStatusBarTexture(Gladdy:SMFetch("statusbar", "powerBarTexture")) powerBar.energy:ClearAllPoints() @@ -170,9 +170,9 @@ function Powerbar:UpdateFrame(unit) powerBar.energy:SetPoint("BOTTOMRIGHT", powerBar, "BOTTOMRIGHT", -(Gladdy.db.powerBarBorderSize/Gladdy.db.statusbarBorderOffset), (Gladdy.db.powerBarBorderSize/Gladdy.db.statusbarBorderOffset)) powerBar.raceText:SetFont(Gladdy:SMFetch("font", "powerBarFont"), Gladdy.db.powerBarFontSize) - powerBar.raceText:SetTextColor(Gladdy.db.powerBarFontColor.r, Gladdy.db.powerBarFontColor.g, Gladdy.db.powerBarFontColor.b, Gladdy.db.powerBarFontColor.a) + powerBar.raceText:SetTextColor(Gladdy:SetColor(Gladdy.db.powerBarFontColor)) powerBar.powerText:SetFont(Gladdy:SMFetch("font", "powerBarFont"), Gladdy.db.powerBarFontSize) - powerBar.powerText:SetTextColor(Gladdy.db.powerBarFontColor.r, Gladdy.db.powerBarFontColor.g, Gladdy.db.powerBarFontColor.b, Gladdy.db.powerBarFontColor.a) + powerBar.powerText:SetTextColor(Gladdy:SetColor(Gladdy.db.powerBarFontColor)) powerBar:SetFrameStrata(Gladdy.db.powerFrameStrata) powerBar:SetFrameLevel(Gladdy.db.powerFrameLevel) diff --git a/Modules/Racial.lua b/Modules/Racial.lua index 717e4d5..533aa6b 100644 --- a/Modules/Racial.lua +++ b/Modules/Racial.lua @@ -137,7 +137,7 @@ function Racial:UpdateFrame(unit) racial.texture:SetAllPoints(racial) racial.texture.overlay:SetTexture(Gladdy.db.racialBorderStyle) - racial.texture.overlay:SetVertexColor(Gladdy.db.racialBorderColor.r, Gladdy.db.racialBorderColor.g, Gladdy.db.racialBorderColor.b, Gladdy.db.racialBorderColor.a) + racial.texture.overlay:SetVertexColor(Gladdy:SetColor(Gladdy.db.racialBorderColor)) Gladdy:SetPosition(racial, unit, "racialXOffset", "racialYOffset", Racial:LegacySetPosition(racial, unit), Racial) From b22756b6ab0c9766616e50ed800d5151d94b55c2 Mon Sep 17 00:00:00 2001 From: Sumsebrum Date: Wed, 12 Jan 2022 23:09:01 +0100 Subject: [PATCH 55/65] readme --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index ce7c701..33dcec8 100644 --- a/README.md +++ b/README.md @@ -127,7 +127,8 @@ Thank you for the great feedback and active contribution. - reset timer when buff was taken - add a configurable 2nd timer or show one timer with the closest CD - **CastBar Icon can be enabled/disabled** -- **Trinket: green/red option added** +- **Trinket solid color option added** + - color for Trinket on/off CD can bi configured (red/green by default) - **fixed some DR-categories** (Hibernate / Chastice / Dragonsbreath / ImpConcussiveShot / Counterattack) - **Pixel Perfect option added** (makes your Gladdy Frames pixel perfect - no more wierd scaling interferences) - **Pets can be grouped** (not perfect yet, but a first step) From 83763aa0165b4c3b91cf05c3c0aa3b4aa075bb82 Mon Sep 17 00:00:00 2001 From: Sumsebrum Date: Wed, 12 Jan 2022 23:17:35 +0100 Subject: [PATCH 56/65] fix colored trinket option toggle --- Modules/Trinket.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Modules/Trinket.lua b/Modules/Trinket.lua index a21ab5e..99af23c 100644 --- a/Modules/Trinket.lua +++ b/Modules/Trinket.lua @@ -134,7 +134,7 @@ function Trinket:UpdateFrame(unit) end trinket.texture:SetTexture() else - trinket:SetBackdropColor(Gladdy:SetColor(Gladdy.db.trinketColoredNoCd)) + trinket:SetBackdropColor(0,0,0,0) trinket.texture:SetTexture("Interface\\Icons\\INV_Jewelry_TrinketPVP_02") end From 0d9e9735daf3d7e68fdfc0461227780c4922766f Mon Sep 17 00:00:00 2001 From: Sumsebrum Date: Thu, 13 Jan 2022 23:11:06 +0100 Subject: [PATCH 57/65] add unregister messages to gladdy messages --- Gladdy.lua | 10 ++++++++++ Modules/Announcements.lua | 1 + 2 files changed, 11 insertions(+) diff --git a/Gladdy.lua b/Gladdy.lua index 416ba57..eb14d39 100644 --- a/Gladdy.lua +++ b/Gladdy.lua @@ -191,6 +191,16 @@ function Gladdy:NewModule(name, priority, defaults) self.messages[message] = func or message end + module.UnregisterMessage = function(self, message) + self.messages[message] = nil + end + + module.UnregisterAllMessages = function(self) + for msg,_ in pairs(self.messages) do + self.messages[msg] = nil + end + end + module.GetOptions = function() return nil end diff --git a/Modules/Announcements.lua b/Modules/Announcements.lua index 3c8b376..27de5f1 100644 --- a/Modules/Announcements.lua +++ b/Modules/Announcements.lua @@ -53,6 +53,7 @@ function Announcements:Initialize() end function Announcements:Reset() + self:UnregisterAllMessages() self.enemy = {} self.throttled = {} end From 9dbab9939f2734d5b386eca9bf10b561ff9e88aa Mon Sep 17 00:00:00 2001 From: Sumsebrum Date: Thu, 13 Jan 2022 23:11:33 +0100 Subject: [PATCH 58/65] mover disabled on module disabled --- Frame.lua | 6 +- Modules/BuffsDebuffs.lua | 8 +- Modules/Castbar.lua | 9 +- Modules/Classicon.lua | 2 +- Modules/CombatIndicator.lua | 5 +- Modules/Cooldowns.lua | 2 +- Modules/Diminishings.lua | 315 +++++++++++++++++++++--------------- Modules/Racial.lua | 3 +- Modules/Trinket.lua | 2 +- 9 files changed, 211 insertions(+), 141 deletions(-) diff --git a/Frame.lua b/Frame.lua index 79a1354..c4e2d41 100644 --- a/Frame.lua +++ b/Frame.lua @@ -448,7 +448,11 @@ function Gladdy:CreateMover(frame, xConfig, yConfig, name, points, width, height frame.mover:SetWidth(width or frame:GetWidth()) end if self.frame and self.frame.testing and self.db.showMover then - frame.mover:Show() + if (activated ~= nil and not Gladdy.db[activated]) then + frame.mover:Hide() + else + frame.mover:Show() + end else frame.mover:Hide() end diff --git a/Modules/BuffsDebuffs.lua b/Modules/BuffsDebuffs.lua index d1575a9..45a960a 100644 --- a/Modules/BuffsDebuffs.lua +++ b/Modules/BuffsDebuffs.lua @@ -297,8 +297,8 @@ function BuffsDebuffs:UpdateFrame(unit) if (unit == "arena1") then Gladdy:CreateMover(self.frames[unit].debuffFrame, "buffsXOffset", "buffsYOffset", L["Debuffs"], {"TOPRIGHT", "TOPRIGHT"}, - Gladdy.db.buffsIconSize * Gladdy.db.buffsWidthFactor, - Gladdy.db.buffsIconSize, 0, 0) + Gladdy.db.buffsIconSize * Gladdy.db.buffsWidthFactor, Gladdy.db.buffsIconSize, + 0, 0, "buffsEnabled") if not Gladdy.db.buffsEnabled then self.frames[unit].debuffFrame.mover:Hide() end @@ -310,8 +310,8 @@ function BuffsDebuffs:UpdateFrame(unit) if (unit == "arena1") then Gladdy:CreateMover(self.frames[unit].buffFrame, "buffsBuffsXOffset", "buffsBuffsYOffset", L["Buffs"], {"TOPRIGHT", "TOPRIGHT"}, - Gladdy.db.buffsBuffsIconSize * Gladdy.db.buffsBuffsWidthFactor, - Gladdy.db.buffsBuffsIconSize, 0, 0) + Gladdy.db.buffsBuffsIconSize * Gladdy.db.buffsBuffsWidthFactor, Gladdy.db.buffsBuffsIconSize, + 0, 0, "buffsEnabled") if not Gladdy.db.buffsEnabled then self.frames[unit].buffFrame.mover:Hide() end diff --git a/Modules/Castbar.lua b/Modules/Castbar.lua index 644bfcd..7302b1d 100644 --- a/Modules/Castbar.lua +++ b/Modules/Castbar.lua @@ -202,7 +202,12 @@ function Castbar:UpdateFrame(unit) castBar.icon.texture.overlay:SetVertexColor(Gladdy:SetColor(Gladdy.db.castBarIconColor)) if (unit == "arena1") then - Gladdy:CreateMover(castBar, "castBarXOffset", "castBarYOffset", L["Cast Bar"], {"TOPLEFT", "TOPLEFT"}, Gladdy.db.castBarWidth, Gladdy.db.castBarHeight, 0, 0) + Gladdy:CreateMover(castBar, "castBarXOffset", "castBarYOffset", L["Cast Bar"], + {"TOPLEFT", "TOPLEFT"}, Gladdy.db.castBarWidth, Gladdy.db.castBarHeight, + 0, 0, "castBarEnabled") + end + if not Gladdy.db.castBarEnabled then + self:CAST_STOP(unit) end end @@ -414,6 +419,7 @@ function Castbar:CAST_START(unit, spell, icon, value, maxValue, test) castBar.maxValue = maxValue castBar.bar:SetMinMaxValues(0, maxValue) castBar.bar:SetValue(value) + castBar.icon:SetAlpha(1) castBar.icon.texture:SetTexture(icon) castBar.spellText:SetText(spell) castBar.timeText:SetText(maxValue) @@ -440,6 +446,7 @@ function Castbar:CAST_STOP(unit, ...) castBar.channeling = nil castBar.value = 0 castBar.maxValue = 0 + castBar.icon:SetAlpha(0) castBar.icon.texture:SetTexture("") castBar.spellText:SetText("") castBar.timeText:SetText("") diff --git a/Modules/Classicon.lua b/Modules/Classicon.lua index 906954c..c419ab8 100644 --- a/Modules/Classicon.lua +++ b/Modules/Classicon.lua @@ -127,7 +127,7 @@ function Classicon:UpdateFrame(unit) Gladdy.db.classIconSize * Gladdy.db.classIconWidthFactor, Gladdy.db.classIconSize, 0, - 0) + 0, "classIconEnabled") end classIcon.texture:ClearAllPoints() diff --git a/Modules/CombatIndicator.lua b/Modules/CombatIndicator.lua index dc2a693..4ac51ee 100644 --- a/Modules/CombatIndicator.lua +++ b/Modules/CombatIndicator.lua @@ -82,7 +82,10 @@ function CombatIndicator:UpdateFrame(unit) ciFrame:Show() end if (unit == "arena1") then - Gladdy:CreateMover(ciFrame, "ciXOffset", "ciYOffset", L["Combat Indicator"], {"TOPLEFT", "TOPLEFT"}) + Gladdy:CreateMover(ciFrame, "ciXOffset", "ciYOffset", L["Combat Indicator"], + {"TOPLEFT", "TOPLEFT"}, + Gladdy.db.ciSize * Gladdy.db.ciWidthFactor, Gladdy.db.ciSize, + 0, 0, "ciEnabled") end end diff --git a/Modules/Cooldowns.lua b/Modules/Cooldowns.lua index b08fa83..8c695af 100644 --- a/Modules/Cooldowns.lua +++ b/Modules/Cooldowns.lua @@ -152,7 +152,7 @@ function Cooldowns:UpdateFrame(unit) if (unit == "arena1") then Gladdy:CreateMover(button.spellCooldownFrame,"cooldownXOffset", "cooldownYOffset", L["Cooldown"], {"TOPLEFT", "TOPLEFT"}, - Gladdy.db.cooldownSize * Gladdy.db.cooldownWidthFactor, Gladdy.db.cooldownSize) + Gladdy.db.cooldownSize * Gladdy.db.cooldownWidthFactor, Gladdy.db.cooldownSize, 0, 0, "cooldown") end -- Update each cooldown icon local o = 1 diff --git a/Modules/Diminishings.lua b/Modules/Diminishings.lua index a83b2d9..a9836bd 100644 --- a/Modules/Diminishings.lua +++ b/Modules/Diminishings.lua @@ -28,6 +28,7 @@ local function defaultCategories() end local Diminishings = Gladdy:NewModule("Diminishings", nil, { drFont = "DorisPP", + drFontColorsEnabled = false, drFontColor = { r = 1, g = 1, b = 0, a = 1 }, drFontScale = 1, drGrowDirection = "RIGHT", @@ -46,7 +47,9 @@ local Diminishings = Gladdy:NewModule("Diminishings", nil, { drNullColor = {r = 1, g = 0, b = 0, a = 1 }, drLevelTextEnabled = true, drLevelTextFont = "DorisPP", - drLevelTextFontScale = 0.8, + drLevelTextScale = 0.8, + drLevelTextColor = { r = 1, g = 1, b = 0, a = 1 }, + drLevelTextColorsEnabled = true, drWidthFactor = 1, drCategories = defaultCategories(), drDuration = 18, @@ -106,12 +109,12 @@ function Diminishings:CreateFrame(unit) self.dr = nil self.diminishing = 1.0 self.texture:SetTexture("") - self.text:SetText("") + self.timeText:SetText("") self:Hide() Diminishings:Positionate(unit) else self.timeLeft = self.timeLeft - elapsed - Gladdy:FormatTimer(self.text, self.timeLeft, self.timeLeft < 5) + Gladdy:FormatTimer(self.timeText, self.timeLeft, self.timeLeft < 5) end end end) @@ -135,15 +138,6 @@ function Diminishings:CreateFrame(unit) icon.border:SetTexture("Interface\\AddOns\\Gladdy\\Images\\Border_rounded_blp") icon.border:SetAllPoints(icon) - icon.text = icon.cooldownFrame:CreateFontString(nil, "OVERLAY") - icon.text:SetDrawLayer("OVERLAY") - icon.text:SetFont(Gladdy:SMFetch("font", "drFont"), 10, "OUTLINE") - icon.text:SetTextColor(Gladdy:SetColor(Gladdy.db.drFontColor)) - icon.text:SetShadowOffset(1, -1) - icon.text:SetShadowColor(0, 0, 0, 1) - icon.text:SetJustifyH("CENTER") - icon.text:SetPoint("CENTER") - icon.timeText = icon.cooldownFrame:CreateFontString(nil, "OVERLAY") icon.timeText:SetDrawLayer("OVERLAY") icon.timeText:SetFont(Gladdy:SMFetch("font", "drFont"), 10, "OUTLINE") @@ -199,7 +193,7 @@ function Diminishings:UpdateFrame(unit) Gladdy.db.drIconSize * Gladdy.db.drWidthFactor, Gladdy.db.drIconSize, 0, - 0) + 0, "drEnabled") end for i = 1, 16 do @@ -215,12 +209,19 @@ function Diminishings:UpdateFrame(unit) icon.cooldownFrame:SetFrameStrata(Gladdy.db.drFrameStrata) icon.cooldownFrame:SetFrameLevel(Gladdy.db.drFrameLevel + 2) - icon.text:SetFont(Gladdy:SMFetch("font", "drFont"), (Gladdy.db.drIconSize/2 - 1) * Gladdy.db.drFontScale, "OUTLINE") - icon.text:SetTextColor(Gladdy:SetColor(Gladdy.db.drFontColor)) icon.timeText:SetFont(Gladdy:SMFetch("font", "drFont"), (Gladdy.db.drIconSize/2 - 1) * Gladdy.db.drFontScale, "OUTLINE") - icon.timeText:SetTextColor(Gladdy:SetColor(Gladdy.db.drFontColor)) + if Gladdy.db.drFontColorsEnabled then + icon.timeText:SetTextColor(getDiminishColor(icon.diminishing)) + else + icon.timeText:SetTextColor(Gladdy:SetColor(Gladdy.db.drFontColor)) + end - icon.drLevelText:SetFont(Gladdy:SMFetch("font", "drLevelTextFont"), (Gladdy.db.drIconSize/2 - 1) * Gladdy.db.drLevelTextFontScale, "OUTLINE") + icon.drLevelText:SetFont(Gladdy:SMFetch("font", "drLevelTextFont"), (Gladdy.db.drIconSize/2 - 1) * Gladdy.db.drLevelTextScale, "OUTLINE") + if Gladdy.db.drLevelTextColorsEnabled then + icon.drLevelText:SetTextColor(getDiminishColor(icon.diminishing)) + else + icon.drLevelText:SetTextColor(Gladdy:SetColor(Gladdy.db.drLevelTextColor)) + end icon.cooldown:SetWidth(icon:GetWidth() - icon:GetWidth()/16) icon.cooldown:SetHeight(icon:GetHeight() - icon:GetHeight()/16) @@ -284,7 +285,6 @@ function Diminishings:ResetUnit(unit) icon.active = false icon.timeLeft = 0 icon.texture:SetTexture("") - icon.text:SetText("") icon.timeText:SetText("") icon:Hide() end @@ -363,11 +363,23 @@ function Diminishings:AuraFade(unit, spellID) else lastIcon.texture:SetTexture(select(3, GetSpellInfo(spellID))) end + + if Gladdy.db.drFontColorsEnabled then + lastIcon.timeText:SetTextColor(getDiminishColor(lastIcon.diminishing)) + else + lastIcon.timeText:SetTextColor(Gladdy:SetColor(Gladdy.db.drFontColor)) + end + + lastIcon.drLevelText:SetText(getDiminishText(lastIcon.diminishing)) + if Gladdy.db.drLevelTextColorsEnabled then + lastIcon.drLevelText:SetTextColor(getDiminishColor(lastIcon.diminishing)) + else + lastIcon.drLevelText:SetTextColor(Gladdy:SetColor(Gladdy.db.drLevelTextColor)) + end + lastIcon.active = true self:Positionate(unit) lastIcon:Show() - lastIcon.drLevelText:SetText(getDiminishText(lastIcon.diminishing)) - lastIcon.drLevelText:SetTextColor(getDiminishColor(lastIcon.diminishing)) end function Diminishings:Positionate(unit) @@ -519,34 +531,42 @@ function Diminishings:GetOptions() }, font = { type = "group", - name = L["Font"], + name = L["Cooldown Font"], order = 3, args = { headerFont = { type = "header", - name = L["Font"], - order = 10, + name = L["Cooldown Font"], + order = 1, }, - drFont = Gladdy:option({ - type = "select", - name = L["Font"], - desc = L["Font of the cooldown"], - order = 11, - dialogControl = "LSM30_Font", - values = AceGUIWidgetLSMlists.font, + drFontColorsEnabled = Gladdy:option({ + type = "toggle", + name = L["Enable DR Colors as Font Color"], + desc = L["Shows the current DR Level on the DR icon."], + order = 2, + width = "full", }), drFontColor = Gladdy:colorOption({ type = "color", name = L["Font color"], desc = L["Color of the text"], - order = 13, + order = 3, hasAlpha = true, + width = "full", + }), + drFont = Gladdy:option({ + type = "select", + name = L["Font"], + desc = L["Font of the cooldown"], + order = 4, + dialogControl = "LSM30_Font", + values = AceGUIWidgetLSMlists.font, }), drFontScale = Gladdy:option({ type = "range", name = L["Font scale"], desc = L["Scale of the text"], - order = 12, + order = 5, min = 0.1, max = 2, step = 0.1, @@ -554,10 +574,142 @@ function Diminishings:GetOptions() }), } }, + levelText = { + type = "group", + name = L["DR Font"], + order = 4, + args = { + headerBorder = { + type = "header", + name = L["DR Font"], + order = 1, + }, + drLevelTextEnabled = Gladdy:option({ + type = "toggle", + name = L["Enable DR Font"], + desc = L["Shows the current DR Level on the DR icon."], + order = 2, + width = "full", + }), + drLevelTextColorsEnabled = Gladdy:option({ + type = "toggle", + name = L["Enable DR Colors as Font Color"], + desc = L["Shows the current DR Level on the DR icon."], + order = 3, + width = "full", + disabled = function() + return not Gladdy.db.drLevelTextEnabled + end, + }), + drLevelTextColor = Gladdy:colorOption({ + type = "color", + name = L["DR Font color"], + desc = L["Color of the font"], + order = 4, + hasAlpha = true, + disabled = function() + return not Gladdy.db.drLevelTextEnabled + end, + }), + drLevelTextFont = Gladdy:option({ + type = "select", + name = L["Font"], + desc = L["Font of the DR Font"], + order = 5, + dialogControl = "LSM30_Font", + values = AceGUIWidgetLSMlists.font, + width = "full", + disabled = function() + return not Gladdy.db.drLevelTextEnabled + end, + }), + drLevelTextScale = Gladdy:option({ + type = "range", + name = L["Font scale"], + desc = L["Scale of the text"], + order = 6, + min = 0.1, + max = 2, + step = 0.1, + width = "full", + disabled = function() + return not Gladdy.db.drLevelTextEnabled + end, + }), + }, + }, + border = { + type = "group", + name = L["Border"], + order = 5, + args = { + headerBorder = { + type = "header", + name = L["Border"], + order = 1, + }, + drBorderColorsEnabled = Gladdy:option({ + type = "toggle", + name = L["Enable DR Colors as Border Color"], + desc = L["Colors borders of DRs in respective DR Colors"], + order = 2, + width = "full", + }), + drBorderColor = Gladdy:colorOption({ + type = "color", + name = L["Border color"], + desc = L["Color of the border"], + order = 3, + disabled = function() + return Gladdy.db.drBorderColorsEnabled + end, + hasAlpha = true, + }), + drBorderStyle = Gladdy:option({ + type = "select", + name = L["Border style"], + order = 4, + values = Gladdy:GetIconStyles() + }), + } + }, + levelColors = { + type = "group", + name = L["DR Colors"], + order = 6, + args = { + headerColors = { + type = "header", + name = L["DR Colors"], + order = 10, + }, + drHalfColor = Gladdy:colorOption({ + type = "color", + name = L["Half"], + desc = L["Color of the border"], + order = 42, + hasAlpha = true, + }), + drQuarterColor = Gladdy:colorOption({ + type = "color", + name = L["Quarter"], + desc = L["Color of the border"], + order = 43, + hasAlpha = true, + }), + drNullColor = Gladdy:colorOption({ + type = "color", + name = L["Immune"], + desc = L["Color of the border"], + order = 44, + hasAlpha = true, + }), + }, + }, position = { type = "group", name = L["Position"], - order = 6, + order = 7, args = { headerPosition = { type = "header", @@ -594,105 +746,10 @@ function Diminishings:GetOptions() }), }, }, - level = { - type = "group", - name = L["Level Text"], - order = 5, - args = { - headerBorder = { - type = "header", - name = L["DR Level"], - order = 1, - }, - drLevelTextEnabled = Gladdy:option({ - type = "toggle", - name = L["DR Level Text Enabled"], - desc = L["Shows the current DR Level on the DR icon."], - order = 2, - width = "full", - }), - drLevelTextFont = Gladdy:option({ - type = "select", - name = L["Font"], - desc = L["Font of the cooldown"], - order = 3, - dialogControl = "LSM30_Font", - values = AceGUIWidgetLSMlists.font, - }), - drLevelTextFontScale = Gladdy:option({ - type = "range", - name = L["Font scale"], - desc = L["Scale of the text"], - order = 4, - min = 0.1, - max = 2, - step = 0.1, - width = "full", - }), - }, - }, - border = { - type = "group", - name = L["Border"], - order = 4, - args = { - headerBorder = { - type = "header", - name = L["Border"], - order = 30, - }, - drBorderStyle = Gladdy:option({ - type = "select", - name = L["Border style"], - order = 31, - values = Gladdy:GetIconStyles() - }), - drBorderColor = Gladdy:colorOption({ - type = "color", - name = L["Border color"], - desc = L["Color of the border"], - order = 32, - hasAlpha = true, - }), - headerBorderColors = { - type = "header", - name = L["DR Border Colors"], - order = 40, - }, - drBorderColorsEnabled = Gladdy:option({ - type = "toggle", - name = L["Dr Border Colors Enabled"], - desc = L["Colors borders of DRs in respective DR-color below"], - order = 41, - width = "full", - }), - drHalfColor = Gladdy:colorOption({ - type = "color", - name = L["Half"], - desc = L["Color of the border"], - order = 42, - hasAlpha = true, - }), - drQuarterColor = Gladdy:colorOption({ - type = "color", - name = L["Quarter"], - desc = L["Color of the border"], - order = 43, - hasAlpha = true, - }), - drNullColor = Gladdy:colorOption({ - type = "color", - name = L["Immune"], - desc = L["Color of the border"], - order = 44, - hasAlpha = true, - }), - } - }, frameStrata = { type = "group", name = L["Frame Strata and Level"], - order = 7, + order = 8, args = { headerAuraLevel = { type = "header", diff --git a/Modules/Racial.lua b/Modules/Racial.lua index 533aa6b..7838b9b 100644 --- a/Modules/Racial.lua +++ b/Modules/Racial.lua @@ -146,8 +146,7 @@ function Racial:UpdateFrame(unit) {"TOPLEFT", "TOPLEFT"}, Gladdy.db.racialSize * Gladdy.db.racialWidthFactor, Gladdy.db.racialSize, - 0, - 0) + 0, 0, "racialEnabled") end if (Gladdy.db.racialEnabled == false) then diff --git a/Modules/Trinket.lua b/Modules/Trinket.lua index 99af23c..0c316e1 100644 --- a/Modules/Trinket.lua +++ b/Modules/Trinket.lua @@ -172,7 +172,7 @@ function Trinket:UpdateFrame(unit) Gladdy.db.trinketSize * Gladdy.db.trinketWidthFactor, Gladdy.db.trinketSize, 0, - 0) + 0, "trinketEnabled") end trinket.cooldown:SetAlpha(Gladdy.db.trinketCooldownAlpha) From cf485a91a1f831b2af57870d78321460bf518029 Mon Sep 17 00:00:00 2001 From: Sumsebrum Date: Thu, 13 Jan 2022 23:12:34 +0100 Subject: [PATCH 59/65] cleanup --- Modules/BuffsDebuffs.lua | 6 ------ 1 file changed, 6 deletions(-) diff --git a/Modules/BuffsDebuffs.lua b/Modules/BuffsDebuffs.lua index 45a960a..1574c54 100644 --- a/Modules/BuffsDebuffs.lua +++ b/Modules/BuffsDebuffs.lua @@ -299,9 +299,6 @@ function BuffsDebuffs:UpdateFrame(unit) {"TOPRIGHT", "TOPRIGHT"}, Gladdy.db.buffsIconSize * Gladdy.db.buffsWidthFactor, Gladdy.db.buffsIconSize, 0, 0, "buffsEnabled") - if not Gladdy.db.buffsEnabled then - self.frames[unit].debuffFrame.mover:Hide() - end end --BUFFS @@ -312,9 +309,6 @@ function BuffsDebuffs:UpdateFrame(unit) {"TOPRIGHT", "TOPRIGHT"}, Gladdy.db.buffsBuffsIconSize * Gladdy.db.buffsBuffsWidthFactor, Gladdy.db.buffsBuffsIconSize, 0, 0, "buffsEnabled") - if not Gladdy.db.buffsEnabled then - self.frames[unit].buffFrame.mover:Hide() - end end for i=1, #self.frames[unit].auras[AURA_TYPE_BUFF] do From 038688bd5b77733798bf5067674c055b82506966 Mon Sep 17 00:00:00 2001 From: Sumsebrum Date: Thu, 13 Jan 2022 23:37:09 +0100 Subject: [PATCH 60/65] fix Gladdy:Hide() should call Gladdy:Reset() --- Frame.lua | 1 + 1 file changed, 1 insertion(+) diff --git a/Frame.lua b/Frame.lua index c4e2d41..4baab81 100644 --- a/Frame.lua +++ b/Frame.lua @@ -270,6 +270,7 @@ function Gladdy:HideFrame() self.startTest = nil self.hideFrame = true else + self:Reset() self.frame:Hide() end From fd37f588ac4af197a9f59ac9debad5940fe335fe Mon Sep 17 00:00:00 2001 From: Sumsebrum Date: Thu, 13 Jan 2022 23:42:42 +0100 Subject: [PATCH 61/65] readme Attention --- README.md | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 33dcec8..e76dc02 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,9 @@ # Gladdy - TBC ### The most powerful arena addon for WoW TBC 2.5.1 + +--- + ## [v2.00-Release Download Here](https://github.com/XiconQoo/Gladdy-TBC/releases/download/v2.00-Release/Gladdy_TBC-Classic_v2.00-Release.zip) ###### Please consider donating if you like my work @@ -71,13 +74,16 @@ Thank you! - **Hydra** (thanks for constructive feedback and suggestions) - **Xyz** (thanks for suggestions) +--- + ### Changes ### v2.00-Release + This is a packed release with new features and bugfixes. Most importantly, positioning of all elements has been redone with movable frames. Thank you for the great feedback and active contribution. -####Attention: Once you install this version it will drastically change your current profile! You can't go back to an earlier version. Either back up your WTF or export your Profile before updating! +***Attention: Once you install this version it will drastically change your current profile! You can't go back to an earlier version. Either back up your WTF or export your Profile before updating!*** **Here is a list of all changes:** - **major release version set to v2** From 5f94e971f01ed2d8aa8bb88625c46533edbaff38 Mon Sep 17 00:00:00 2001 From: Sumsebrum Date: Thu, 13 Jan 2022 23:45:46 +0100 Subject: [PATCH 62/65] readme --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index e76dc02..66c0797 100644 --- a/README.md +++ b/README.md @@ -87,7 +87,7 @@ Thank you for the great feedback and active contribution. **Here is a list of all changes:** - **major release version set to v2** - - this will mean, that export strings will still be backwards compatible, but not forward (Gladdy v2.x String cant be imported into Gladdy v1.x but vice versa) + - this will mean, that export strings will still be backwards compatible, but not forward (Gladdy v2.x String can't be imported into Gladdy v1.x but vice versa) - **big overhaul of positioning elements added! All elements besides HP and PowerBar can be moved separately** - added Mover Frames for Auras, Interrupts, (De)Buffs, CastBar, ClassIcon, CombatIndicator, Cooldowns, DRs, Pets, Racial, Trinket - this will hopefully make configuration a lot easier From 7ce6cdd5e0078821f8e066268a24f49fa6693016 Mon Sep 17 00:00:00 2001 From: Sumsebrum Date: Thu, 13 Jan 2022 23:48:54 +0100 Subject: [PATCH 63/65] readme --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 66c0797..2c4d356 100644 --- a/README.md +++ b/README.md @@ -134,9 +134,9 @@ Thank you for the great feedback and active contribution. - add a configurable 2nd timer or show one timer with the closest CD - **CastBar Icon can be enabled/disabled** - **Trinket solid color option added** - - color for Trinket on/off CD can bi configured (red/green by default) + - color for Trinket on/off CD can be configured (red/green by default) - **fixed some DR-categories** (Hibernate / Chastice / Dragonsbreath / ImpConcussiveShot / Counterattack) -- **Pixel Perfect option added** (makes your Gladdy Frames pixel perfect - no more wierd scaling interferences) +- **Pixel Perfect option added** (makes your Gladdy Frames pixel perfect - no more weird scaling interferences) - **Pets can be grouped** (not perfect yet, but a first step) - **added DR-Level Text** (thanks https://github.com/ManneN1) - **added zhCN Locale** (thanks https://github.com/veiz) From cd64e8b4818b2ceca30d6d908ef08a73b9d8c9fd Mon Sep 17 00:00:00 2001 From: Sumsebrum Date: Fri, 14 Jan 2022 00:36:46 +0100 Subject: [PATCH 64/65] add Mir pixel perfect edited profil --- Images/BasicProfiles/Mir1_edited.blp | Bin 0 -> 175956 bytes ImportStrings.lua | 4 ++++ Modules/Castbar.lua | 4 ++-- Modules/XiconProfiles.lua | 19 +++++++++++++++++++ 4 files changed, 25 insertions(+), 2 deletions(-) create mode 100644 Images/BasicProfiles/Mir1_edited.blp diff --git a/Images/BasicProfiles/Mir1_edited.blp b/Images/BasicProfiles/Mir1_edited.blp new file mode 100644 index 0000000000000000000000000000000000000000..1e2797bf23af93cb7dc251a851e64546b53a98af GIT binary patch literal 175956 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%0AE^JNu-uC3%J|w& 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 DtFY_{ literal 0 HcmV?d00001 diff --git a/ImportStrings.lua b/ImportStrings.lua index b2c8dba..effd467 100644 --- a/ImportStrings.lua +++ b/ImportStrings.lua @@ -26,4 +26,8 @@ end function Gladdy:GetMirProfile() return "4XzT80SCBJZKpm75XfXpee4OvsCIRnXXRLtntQAkndLeTf3ir6LKAZ45qE2)AGUbjejLIyIZLiAsGgn6Ur)pYc2I7xmF5(hEOEM9FUEvzXTPRxNx84IBylMxLw8y2R2KT6l3w(1SQzPv3N9pnlMTy(Q06g4pNvwToR6vLBlRSqk1nRLlUjAX8hD)BL9FBwmFnmOYTRl)AXLBFAdoU1vVoVoD52SxLxTABwiyFmeKrxihhOnv5fFjR5qOSCX8nzPBB2aW5M0Dzxvw0mp)FZwCdhMAXt3x2KT72TPnz1ou5YTFn9567tREmRjBTD6vPRYt3EBz9I53D9BF39wm1bLvPa8rmh34ZBEgEZ8RlAYQEiDv2FE561FSO(pF7wGi(8FE9U0hZQ)tCS)1B3wwdGSEtkqgQZFCtZ957ay0c1o(GNw92QYV(68QSvn5LfTyZ)Fwvn83)1U0)3YQ)Qy)o3SF8WXo7J3F)h)GBdxLTR0Tbwm)1Lv513E7I5pL185pcRuwZIB(nfhOZ7RsFFEDZRZEiD)2glPxLKez)nRWsExB5ppvLdqO55f3iJS0)0vFba6BM9PRUYYq4jCUyAtHXfXXtBkczsK5OtHf3oL21isePN2AehlM4ExWuk20McxOmYPnfbJXsoN9EifwFcY14mLyPEIRcpMNm19IKDCcglAaBuejJpoBCe(U2OpU0Oyu2UupXnHugjpoPA0fHfjp(ImY(wZ48PHujSjk8cYHhFgm(WtuAP6SocgSRncTAAyvmxE8zm(IOmtLwXL84PUv0IPQLtdRYexePyYhB1QtCa5i6t48JlmYhkmYnGEUPi9YmXrtLAPmjhFRp6zkUYON6uIILtLaNKmrryM4e2rgxrA0uTjacxMZsVyOnbU54Ntgrvkpk6eS9JOEpEQQHatv8jUkSiEYj28JzfHFcRcJVgM4KJRJ)iwq5Nqb5rCEksF8DY4IW6KPkEjKsZeNcdusC8PmkIznvprhieGfLJlsoMMOKOtiFno9IhpvxAfIKPA2si4rtsfjxyobboE4eIJoHs7ro9QIMOl2jt2mQqimhFrgLBiJLIJlWpchxjNKaIsmvRHMOPsO0k5evMOzNqF1yI5k1PC1AeHJe904DnTXD3lirxaP)HpmXOJh9SnQ5UOxdNXQTP1U0kmitbxj1ArsuCCc4MNWAy9HFlwmEG(D5H4EmKF7cgGZU47VsMWzmJsbM24MyvcaqP2gSE)0AGOAhcDje7lIuJL(Il0wu4jkbiVlZg5oYPW8mCBw1QSIgiuFlw5hxxAhSSiiC735tkXzNZehO(q6)0rD7Mz9B64UvU8v875RB2Cv6QMshsBWq6DPMOA)tn4SGf8gw3Q288tzlMF7MNRZxLU1TYmhw4Xi7gT)WFx52NdgkSur0WVigEcMIS)uUkVk7GPehfScQbJ)YQvPfJpd3cO7pHBsB2tlr0fGf(WnH7VHjjgStM7sfdnl3cmyPMVV4lfLFTO)u)e9AKzrmo)gIPgqaQkRB6TqDlI9ay(LfR2aSUUKxzLCd4YDNVoGtZOZZzRFDMBi2LwhbgnMzDokXKyFWEGW4EJguSpZN6b4HeBuzWV2SWmZQ8q5Mj3a61SJN(1fy8mRgsHBCmbNPDZ3boxiQ2PXGyJCV2GViMjCdJ(ogeOD58RNneVzohgW1tAyUfIhLGisedFqirazJ9AMZblesQeTgHGqIdWgQ1mVXE3APtW5QIzm3N8Vaqp3V4EbdvXodoHMkbIwczKJ8PnChaCbc4aDI0TyA)Q787d3Prke2efvQKitbu5HyrSX4gRKrOm6Sb8qS29bLMGLkX99KiIkc8t3dcGWJBAUYncNfm3QbET5(chxuUNGBtS1mhDfxk0Z(zizY9GrJKnxQMCZvJ7(yo(lMEOzoRFj0lICpOqiW1ib1Uiizbqp8bJb3k28MGiOGKrviTNRej0wIJVWK4MkW7qckiuJduHpKGteZjHf0rAexmOOQIKfzW2OvO2bsftq8igkietIma5cxCDmodqwc5ijilHyC4xbIoIYmLBljureuK0HSi3pGlsoepItqfy7mcHyinhCPffffcsyHhtKsdrjtm0bbj(aMad7Bs0jeEiqwkdpRWt4Oym8dbLegsBsek64gttcYXejHth7SXl4WXe)jzego)mSBoIKrJZRxH51JGuAbUnur06ICeLo2HXcgjXd0z8WrcncINNWiXhcnHTirItCNidSqF22x7Nj(bkBNGllTQ0Ri7gKRs1Z3u(1RQYZkwdwnxIPP)tpHLzW7uZR8ojD4R91CXIqBo07bQWdyDg(2FFFz52M8N(2FxvUVynynHQFWbfd5mlQIFUwhyogrmyF2vyhxbtE)BUcg(2sRbPXiKVAFvD2bqKDGVwQdD37JLvTg6UigDPzyLmADTACCEmEtBnrcDw9zGdhZngUa0jAKGUvT1hsGd)plUsl1kHIdkYatF2i1XV0Fd26m13XFYLLnnL7(qA1J5foFtMtvZQ32l4TDvkQXvTQVJGoSoT7ylDZ67WuePdrAhqCu6oVFxL3s7(njOWRL5Cgsnl)(v5Q94CpX2eVxD0Uu496RffNM8oE(WwPqR866Q3LU9HZyhqrFyp1oPQa6oHMT(VwU9PXINcpd4H(i4Xf8HC3aCz6S2Ow(rOuCzEDzXOsvQfbf1DkS7x)Cr6U8v4WNzv0SVOXPLAwNwNHvjUv)Lx2tffQHOLD7RmnDGjqzUtsYQhgepw5ujcaARfyhOmD()3(0QSV93xTF72V93)(M8MmcZ7qgmuRdcWLq4(oLJJ8h98wVOEd2m(17pcu3EGyuFePncC7U3BK5qBLyCQs3Xh30HjcQ(Axl87X(nLpsfIshqpVUOgJnVlyLoAxFZT)HBZEGMGUbhQI(ZbK7LqOop6odDWH7XjGUD5LRA2dQJBRRVNwUC0aK77dGvSXMEaFWvlTs99jXGnqGY)iOYoZf(v92SSNSpeKcMhkRwL5j)52FVb8slYG2CBQ2w3SV4CMtSr5u1vvSU)uwESPOv4YSjTA35SgkBcmTRrzzZ5m(yW4iHt9NYXXjj3HtpVABzr25Skkge6G1VTvPnatR(CMdNf7OwRb9zwVWoRTJkkbJ9p9CgDSbrR1vPpwwuVSklfobDgtus42xoVDc34OXRxDoJwXKoKkF3tWBoRP4LsEilT6CgVnw)fUKx0E(3PAjWe8Pnney(1PE3(qqAZ4DQPc1)L)tPt1EKFq)cr2p7AiM4Kf96kkeNerdnvE9UD7lY6zKgcpeTwAtfL3kiQ)bHK2QzoVxo7ID9efGHohHUbiVdwTRkXtWNY1Yv590X9d0Ssh4MIV3GA1v6eyvXXNSeIn2W14NQvhCJHZeNS87wWKCQsotRKnfjNEm6Otu)aCijFVbi4jNODpCJP5WKaFEXJ0gR4BkY25cumTOa4bRY2bkTC0BYC7DzPRDdOM8MjZpdAaFQg584jlNfRmBYhFkTQXM42S69vKZ2K9myA1DZ4(nWq2agKDU53k32lUKhQapMPisqNcBhvVoAl08D)WyDNfmwfmR2tI5UTwpxfEpgp5YEU6q(Te1Ec2ny7rK0gVVrwz3HUx0)yfOsilTxGPEhELlccnLwOqVlhKA)VxW5D1T4mKnwx9)aUL2CQ48swmAKTDvFGwXapg9E29H0)XQDR(wGgNxqd3rCcuH4(7ES)n5RZMTn)F)30kylb(nxK2b1bkyxxDd4u9PtjtxGcNzqf0UYkx)LZGqEGJMosX9F0gFDOitdCwBtDx)DEEgzgSu9fFVlBleqvrdmKx9MBU)n3DiYpAs(dp1qhS772PpEBlJU9KOPJn8dO2N6r1(5ujKXpXCT0g(r)6tf3UVc70wpU)5oouyK2TwHx3hVwxfsXO50gOMugeQwy4BOwRrI6SxiI4zPa8Bam(bO2hyKLqzFuU2nziBim631v)Xy6u7N5iRw)zbNP60l7n4q(RfCwVnw57aKVZMafFTRgBZ3bU4Vja7ckaQvFOVqRDcUt5W0qp2S6wELpxbuNChRged7zP0nKBkAXVHS)rYVGDVHC6bQ3wowv58oQ(JlrGKEQaWRYBJcVlIE0vs(bACUK8BySSQ48JaBsB4RTvhuWmyv9WEy2(qKMgJV2pT18XM5DCWsSyAunFGPQPAKPPP6RPNR9PMfwGIiSQacjvPebttfksqdraci0S9Lm0wzp7d(AgYI0uPjumFnkIPY1jPQecVbRArIVsc6eScloVbj0KQDjwEgSLiTVW1QJoKYeDybcDEKAhlpMklzuevMpfwsN261is81IL3vafFz8ueJqGWxa7AK(Zui1UT8lCUVuFQwSIynIijvDePGQVPstvouXWQJYK(cNKy4eAiPsSiz(YgXWYkInW0mFh64gmv2oakk3SuerRT6Hq4aoKW1rmUrkn(60rLe1vrPtyFK3zFmu13anpq4)v5l33K11pdGZWB3UyoOAZMi35415ybmH15pKdovo3EkTPbcRAU1YjLQzmp6l8D5qpGCL1P0XHbVdgoxxTGqmciU0nOV93)xIXHthywJkvwVW3)ehdsYPaP4tbP4Paj1PGKAkqk5uqkzkqsFkiPNcKmNcsMPajSLepgOSUxF2WQn0RppSfSWSv6cl0(NGUY(nvwAy5e2x3uUZLH85wRcNYp8iCLDGLfd2i(faxnBq)0ojWEHXxfKyXaGlIsg0(Ltc6hfPh04SViGvl6N4IxcWQKdAhZxcWYII)La3yXGUE)LaSAo)Nsq7iGLp8AcnjWAZ03J0VuM)cKFfkv)EkDsq)OYV)Ci9X4Cdt82lby5XMb3zVxc4QzdAy3jb2lyeRZ0gJBlOTLn4Na0hJapSh)FjaRoM1pzNtcSxawgct9SrfkdhB6Nu3jb8JB34xcPGP)vW4eCZGoX(LaUy4o)eW9ciuOqHylVuFOG8VIJ06H3CSxcWYIFHnGcdSne7WCMEqkeoD6gcYV8KI)V21dc(mcL)5dBWM(Xn9zhEFqYkdZBBDtAZ(6LEu2dlBV70LFJ7CEy2VWD9sp)Q8rthxaXjSJKCPejTI6KaUoQDs0RKr2Sye0Nzh2ox3ww1uLMh2chhKiPjrrpiJkDBB6AUp36NUZn639jxGNWt7SnKL9Yf5kM2VF5D3D9hd(qmhl37Tx((lF9130(bmiE4dF4Y3(MU3Iq527U(nZVV9TcUiXqq)9F8v)3TFW1tLwYXDF66x3nCxBbdV(Up(2p1bBmKB41ZF3LF4YqmXMpaNC8bLl5NL61VOjFi9X8vhCwYBBK6rOlC7L022Ny65bK1ESSFPJoDXeCZa76O(jRlqa7NLGekc3LC1TzPWiPJcZgMm9U)ZOGKQ7sJhm02m7Y8B5UgyXVE9VplHLBS)13z2GYE4)FgcFnZ8zx5d5f57s3MBRviDLcCt2sKfqqvuNDtnxFehBaxBrGN5YMe158mSRGzrytxReuY6msSTYnkFVx77jznLIoFceBt1LG5ZLKstTPSu019ZydzBKut(NOOBQac2ig2r82M1KGMMY7MuJ9bUIAJEjnsJgZ2vSGsgPmHwFbbbkZGSyzIpZDypyhRn(oEhX02ecQm0(N6U(yUVR6P0aYJeyU1ukcO(m8XzuY2aebZQyIpjGsQLVBtzhmc362MYozmqgrOa0kpssDzoEPfAZYRfRj2l1H8julT7tYRfdCRSHY2lETsue3NYNlljYNQwKcsqLsMjtJPcLNOqudwnCasdUC8idLbtaxrCKO4MeuosrxkbypqcAAgEHbeC)fgiIUBkcjbFy9ClhdZaliGHzVui0g6wsiWSIsBa7Y3sZO84Ixbckl4X0LoXNP0yfMk9y)nZqsP21yWKRMGxIb6kkyrrpferaWSI7f0LDWsIqXzk53rrOmOuHGtGxfeUHUbg(2H3NuxJKU6ijsFg2JO7AqeUv5cTUvUhXDefa5gIjl9PSUlt1yIQtO7aadgcsWazy8YyO9suXTmocJ0indGjEzl4(BqaLl52KvRXRaGcV1emK5bs6(dsgQJ)d10EgTA06GAicXre20bNrPPpSQQNNrmwakewZ63UpRUoR2UDw67WObxqXdl4zxBkFF5L2sIDTZhVE3VYFCBzpf8FWthwMp7ho8ooUk33RYWEAX)5fSSRtb" +end + +function Gladdy:GetMirEditedProfile() + return "4XzT8S1CBBZS)yopxp4obF0oooXZjXXFrotBNPJAPLOT5jYI(qs1u3hYV9VfyxqcErkIjo5HizsGfl277IfAjF5nlxSU6SYQ15vVQCtzL7bzlVqzTYeMwNOfkzsIz5D)IwUCXTlVIVCX9()VY9)nlxSQSCZ6YVS9hci1pKbWOU4(hAUP4X8QlQYEmFrtvwt2YfV9Y38wyDYQBolBmU6adasMhKmpizE8ch)V9H7URoVz5f)IwLO020ebGpcl3HoQe32)8I6SB3K)QIQvBYxEw3sDF8YWorDWf6T5oSF5vc9Yfpv(Lb7H3)6ZV8tVF5IhYZ208am8RGxEr52Mff)BoShGjT9PBkBYF86nzn51NU5PhYoDZxYEU(MSQ7ZBYxV8waW5nV1dHRZRwLVTj7EpchyHlAEg2blUCBtE1DzRY)JtxV(dBR)J3SjB96N)JlFegF9FGJ9pFZMY66XKEy)SXHrNiM4Dpu(LB(sP)7o052DaX9m3)9ksk4nvLF58IQ8vnfLBxU4JaRdiF)DEvn83)5Jz)FLv)52DpcKjGOURklWECeu3F7r9QDp18RfRBE4ISvnLo68jPE6tv(JLvoQ2YfNxwvuF91a5FtwD9LRk36P3Vl)VZ3S8kncT3vu3CE(Dz72044IMKeM7Z8To(9AhL7PQcaqnpV8kfGbaZA1Nby)6Z(0fx44TcBIC)tXX1gnfUqQ1ZBvKQew6XSkTRbtYSZBn06dSrMgR4gdFEtrinPQ5nfjNZtoM9Emf2EaY1KRIrQm7DgPJPVALDMiLqlsM7wxX3p9LZgHvsgy)6yWQWeSPw5EhVCsPeLDMBcLIP2pPAYfHZu7FrMyFB5cX8qQe(mL1tsN7sWTkZrPZgnLuPD)sHtR1koGC7KlIoXoZDIqj0ZCNyKhqqCFKlX(Tkon5sjNRAo3AMlIjbHR9lnkglnksb7IZr8LNQz7xnC69Hjnz)B9jvQeMu7CNctRMlb2fg38MHCUoqfS56dbeUspkdJX(qeP7xpzcBPcg7aS99XfNVvf5CfvewXmXljtCa)ctVkkPy)w53J3nZbOWtOyjv65A2wKWS7NXpPqpeGYbKhftGvQ05kaNieZK(6CTpZao4GLR9JytRWNWoafEYPiLc2SS2jLjZ1jNqONDC5Y0dS51Jrln7aw5NqD3WMBm8sz6(NY0XbPfhieIPJ2sRK7xGFcLkJAw6GGVQKzQNNYMlPYAuZu9WYtM1Uwymhk4Sj23mXbwHXtaMcKkoKS7UNC5bpz5lOurDOhvIG9L5AxnkugzIeqglljfYoq4QrHz)LgWT2nvfB)CEtib8R294T5v(X4lnYdasTXHytwocAY)Eil8FHDcJXaNJSegyFrhHKZP(oSr1iHWUFpkD)iIIViixybEG2WH8OaNToVTWMpTDCoC41DCN1(hCD261fBXAjHfJOdlpDxvgIPtvIOtSEMORqnrfVbsfLkrtubwMGb)XCyx4(MZNbZlmmO8dRNU(pTKZaL4cq)jHNA5qoTPqOLAyxdKYXLEPjRIwXuy7Sn)lVl75YDnoAbIXtUEGuBr2MEftH3r6NAg9QcJNqwduXR4DKYMNFkF5IRF456IvzBOI4rf07wKHFLy4WFB5MNJgk7Kugn8t0mxnaVsnCkxuuL3BkAw0kygn(tRwLTD6z4xa7WjCvwZoAjyNarffVj8)nmj5ODYcpNHMLFbgTul2T9ZBbX9Ht9t0Jr9csAmSH4MreGQY6Mblu3I0mu5oYGZ6QivLUQ0nuoWBulF955(H4wEldCEEMZGysAI7lqCYq2HUNyHGzpluJh4ljUSzHpDL76mxINg)mfPG1D34Pp9Lu4mNFcPFCCPGB9Z3doFY9(PbwC8pofFGMl9dJEpM8SB5cRNl14Z8HoHRNkL7xiNTl8to(fPcbKl26Z8UDrizsSwecsfoaxoQNfciXVw2eCUgnN7Fv4ba65)e3lyoEUzii00ir0sQyEYNnv4bGpdkpOtu(fZgwDF0a4oLzqytuuLrHmfWwlIfAWwH7lkoHYyyxWx0w)lmwcwMe)7tyeve4N(VibcpUPfg)i8(X9RgezP)ncCrfbcURcIN5PR4sHPeDgsM8Fj1IKnFn98Z1I7ETa)elS2z(yasOhW8FXGqqyrcQBrqYcGE4xstXTIRItickjzuds7fGZtAljWhKM4NkW7qckiuJd0GFHe5WA54anZI4skkQAizrNX5wHApinCjXJ4OGGMezaYfU4wnodqwc5ijilHyC4BDg)rWyiPdoYonmgIGerqH6C(SPD7aMGapW)5eMXrIpeJpQFHkyGCLMiPemejPKcHc)cwbi)YBtsO1brljYHfGCossvsek(sa5NI0qQDCljqRjsJGu)Czq5rXKGgncdFTQ8yQ)9KDfon8eEWEcc)ebQrzq5uoT9mwnAOcIC1tjKCshG46qG5445KCeHNWMJ4yjEvZOWbo6dzAOx6iRUo)O4H7yNi4KEGLp84WO49QDN3Yfvf5BxdopV15nF795V6H8vF(vH4iCpoY)p5dGhp2RPDLdRAp)PEhyeE(qF9VUbctRP4PV(xqGTBx7CJ4H3n5)tt0oRdgh5bKrb)nm83IrHm1UAdgQN61)y6UDmn9v7QQZNGWgI4Z4zXf)t(gi4U7Yx1eytdwT2dzJIo94yyTNnv8rA9meLmyuuaAAPMuUMbgYHOAHOK)hiExijwTcKhnmLYYcVz42QnqRVrSS3w20u(47ZQUVylefqAB09d2ErpLoRp)XR14pMXVHKpSsT7zhLZfvX3BIbCklQ2do1LtqrBUqGjxHcmpQS6uqLMtPcf4x7dfJyk3(TpyYwf(bsYjHGaPTTmeKyloppvauLXDMVozU1vVnBZDhXoik1NzD0UE1381)5TBEQFW(DkBJtPevr60wNk5GAWG07l)B80FjapX(4eXyXLO9Y8LvyT8ZyfJYI6YTtkMA6M169OdpT4Y5pVn7XIv4WdMh6t5ceOGKfs8UacKrjH4aHOlvkDAyJ0ASmiM7kovNT5wbjNvp3c2t4cTr7DIOorpi3SbOLxu25WaaXkVxHqYb9m1V4)Fxwv(x)Rl2TzZx)RF9HIM8b8CcKblrDLsaZLSvbfIxfcauYsbJAPQeFTkuDWAyUg4SN0(sfP5CFKge8zKRJFBA1xh9yCJce5u(0TBbvHvETUEs8JYio4p1r9c(v7hoqeFaysEaazHA7qsSkgkJ0WnciNEbeWdNtTzsl34YToQN3kWGn17E9f3mSFggQa2LlxhFzyqi)2Yl(fJwAvG7gfKpcKOHxAKnWKyheIDFfxIMBH0dV3BmPNvUPvp9uRtx1SdCvDBGFpiGObfwyysQoXxxzBcjKERJknKvnwjyQsymD33eyc96LMPTHfzEiYeUxr2hTvxV7iwg1WpDbGfKEgf507Z(h367WYrX0qwj)9UkcA1AG)jKsimbx6aOBWo5aVqRhrCfzg0T3M9kGJ1mYgo2gvdnIE5JpUBB(aZ3qokOYORMib7JidfxkNyVhsX75u6ztR5pjdzD15avWl(Ff3og7UOS6XVvCpRkgiK9D0lu9Cy2taloAUiSBwqV2BZLGEqS4iJSCcgAWMpRFIcVEB(J(SeYiJEpMVTXxuNQ86DvKzgVsv9t5B20UfPN4DAKhacfL4NQZx3LIHxHm3vtQNYQAEUDuFmpB9ZO2k831Dt4MhG1(bWCJp8okOXylmKSr)iuXhUVkAFNxqke5QjggXXZ6zwT6r2ei)qPWcP2BuPclzvUT45aFiEJoWOV9KHrm9Dif0tgBOn73v6keNdb6TmKphwB9K7CotwkWZBautYAcEqC04X24JYUAKX32YZpWJ05F4xVk2wtRYGl7IvbHsheqEq85iOD1WNZKAoy9IIDbTRp)egImdhzmjkKmKweTJigBx2eqw(AR2albeGMp6mvhpTEO)GJk74N6o4eYon8pH)SlW08C2PZQOifespx8)aMcAougwjD6(BqHIZcN2bknOtqwYbIpOJa)(S7lwnvoXHqKprmmf9ygdeENMjHO7SsU1KQNMXmkfyYXyViDdvHieOByjbVHU9wnKt(7k2M3f4zGBEB3XRm5UDGXduboooKag8rVOJ7z3vUAhrLWiLxNF2MI)9FZQwtwCJN3hGnvWBMZqW4ddAdKkY2gWx5nF46(w47OeRkgfZjrbgfeW6QRGOZpC5N8084C29rpuGRx0zo6Su)5JWptazAJflsiQNPIIjcQOX5tWlM2DuMwJYkzklZYHGr960ktFjn0C9(eYI3atEAgDkFARIzyCvcpjXsT2TBTk6gIbu8LPUsRBLwg3ViuWKb(uS3J(D1(SSZt9vDV2Qpwy(HzwBP2ecgMPdMiYG8X0jjQeW(JmKpgmKRlRa2vrtesexzbuKrhsvEpvcZP36pTSfpwwcg06hMuVd2nK0waZmkTLRmPmEQvkIXSE1zlwjEqUROw0yNyhv5tos6CV9txLBh7w4WkMKxQrj43RYPd2URRgiOkDh)rcZYs7L5wumo8a7kwQfW1Ehr(RGyiUhwKCFyGRAQ2u3SZxXKO(C4UYQv5HuElw5dfxQtn(ADvTD9WPC7(MI1GL79HmmO9V1AyCTwKBna5PJz8GwULwG6McSuVF75y9RXNRpMrleP(vOEvwdiiCCZHR9uQ1f1ok92JARaPYHsOpVAt52JANy4jAIJmKGTFoII8UVZjxd7jxpSCeRfKTPNQTE1XmAdx5XSDzhZO1P4(4U8SQJz8UJEAztK68B2Lxxds0Dr5nzSbT1ddC7Ntbreme(DyvVx07X1Y67hkdkV0Hd2S31FIY3FuZ)0fTpSzdNeqBg4tFak9RFqRzMJW8kT4JaB0bmeh4qBf2ARGq7JIggfro610T(nU)uMmQT3YIRz9U6MYh9rwUWjU)TSp3qGLR5SHT72lbCT8rDr3Sa7jPHcORLJaUKLmQLmNf03lspQrxFraRvoS)aFjalKf)pdWYz6FkWvlh1u7VeG1kg1w2VeGvm(AanlW6Ys6E6Zk8Zi5xPXmS)pNf03R87pgsVpoNRdAE5bRqNo6k89saxiq7FiI7jCI1L2AOVf0UGw(ba9(iWJVILVeG1Q5dB95zb2tapdX1Ao1eldRth2FXZc473VXpfsb3(ZGXjHOL)HiX7ZgS5h0t0jCtpHyhV02xq(NHkTD8fd7LaSq(fVSylmWn5zqyKhoDwE7u2BfV4ufV6FAuXnLDVKQpphsa5H81ynUgh0A)6(398(X(E44KJtji6WXJsIpCq8q2QJ2y)UlbCoxjs0qiCctIaBlhiy1(hetOOjMOK6hvHK(NUWRwVx(sC40ZV64D82O6oeh5DxTEUUSoCkbdlYhegFE2G(NIGV7m5RqXnpE6BAyp72nAjeqk17Mu7ZYeyN1P1yl6rnUNRXFXhWW2Q0FRSpZ3)OP(w3l1e6Usf1THwQldnudT6(LBWpxj3q99RXsnGOs21xJylxMQO24nXq9Imcwgh75vbNzjOztXUoM6pwH2IDJOIgzQfBhz35Q7xKKqtLQsiersGYDHsD)TwLGVGHt1bZqZTsOSWLHUhtryLsnsRweAGwbIxcMe7(vJHaQHhAntTrqic2kOjHw7vrD1jNJBkjmcCt5Vgr(Va0tekarlGKuFKI9NSeirTunIptndBc19Q(lYoHb(vof3f4EqyiXaMIOCy7nd0CKusq1yPU3f7aDrIbrny1WbOsXLtWsPMXgWvehjkEAckqzO(p2v)zryKijqe6nyg1g6IuStKHLZVACSjvTuNwd)nUxesbkDXyyBzRXUhN2nCfrvcD4mhB7u8c05EUjL2FCQnLvgQNItXMUnbBXwQxKDiyG(HuxTahh1vZoceUIy7yNGpwYyOGOYGltQc7k722DvrDoBkXXLwSHybgcJ6LygTxHLIAcxAPiuir22p5MqFiNqD1p1fVWtOMUgBhzbiaJIJgUnOgOB5Be4S0RazySzFj9rJI4JuldlvKuHH6qAK7bs6bfPuQNExvC0vT9((N(5zF4MB(GRP3AYA2vFBWbuOs3QtedmA)9xkOo720pxjlCNqV386B)0v386p6(2J((6mH5Rh2IF90p(Xl)q0laEJVWAxF67o98lVQ9f4pwiWlE)PV51DpfHY1F8YxV4M2NkbUukb939Hx9)2(cpDhE(5F8txEE3W936a4XF8dV5tDWwA0AF7BT4TN((tJXefxHbGmSj68BvUGHI64nO1l8irPhjpvsoxcx6GGDP2lzqWDs7LmW1H3OKnzGIUKbJ9Mali147IW1jXFtiDFPTN4j7xWQGnNFRFgUKgIeCutZoCBv4Kf(W1vb84qDdVpkxCLi3JYeYmTcB)(wFnWqOMTp0t7TxzLeK(yzKgKG(Iiy)P1DuA4kxitz9V0kGjoeQcTQVnUwB0TgHAv4f01XO9Afa630vhs01N)KJi3Th3dodEphC3FHWRiFhHlCeemGK6JFYJGLm(061Q13x7vlq6LSCFXl65ryRTV5gFr5CVjLMnxXdS4uYExRNYGvBUoC7Ic3Aal5ULSib8Es6JI2XgIljyNfVmQ(N4W1itsF)2lUDu3y8WSpJQ(rNEv5KXNYNk2YBWz6cJpRbaZT7AY7UKG(MlYLlYwx7oVa)5RcSauUU4UI8k3BGj04SW6sqGm2IhL9YWvhCaqUWDG9tddrhm8hRVdeYjaXP(b91)6)ronC6aZASG2RxgUuI7dsQ5aj9HGKEoqYCiizMdKsoeKsMdKShcs25aP0dbP05aj836G9bkxpzC0WQzz7VNyTzZ6Dz516VPxY59(DfOXBY8q)Eh5hJ3A93amjh6NDgALgxRYHJX7O4Wdj5BnaWA(b(nFItf7D4X731TSnX9Swt(2MhQ7D0(ThPDOT27FzSdXomSwdX9Dt89mct)LAdliKL2h1MW(7l2w8y2McxNn2DvnUP8uxo)x6Rxb2(AD1VGSEoSNEI6SOJO)DEkQNOMQYbdA22HB44Q444brx1H4gozWv4)73RJhDPUxMWWEDguBfBAwU8)(7QXTTi" end \ No newline at end of file diff --git a/Modules/Castbar.lua b/Modules/Castbar.lua index 7302b1d..3bf8f65 100644 --- a/Modules/Castbar.lua +++ b/Modules/Castbar.lua @@ -601,7 +601,7 @@ function Castbar:GetOptions() desc = L["Height of the bar"], order = 3, min = 0, - max = 100, + max = 200, step = 1, width = "full", }), @@ -611,7 +611,7 @@ function Castbar:GetOptions() desc = L["Width of the bars"], order = 4, min = 0, - max = 300, + max = 600, step = 1, width = "full", }), diff --git a/Modules/XiconProfiles.lua b/Modules/XiconProfiles.lua index bd12442..573634e 100644 --- a/Modules/XiconProfiles.lua +++ b/Modules/XiconProfiles.lua @@ -152,5 +152,24 @@ function XiconProfiles:GetOptions() width = "full", order = 15, }, + headerProfileMirEdited = { + type = "header", + name = "Mir's " .. L["Profile"] .. " edited", + order = 16, + }, + mirProfileEdited = { + type = "execute", + func = function() + Gladdy.dbi:ResetProfile(Gladdy.dbi:GetCurrentProfile()) + applyProfile(Gladdy:GetMirEditedProfile()) + end, + name = " ", + desc = "Mir's " .. L["Profile"], + image = "Interface\\AddOns\\Gladdy\\Images\\BasicProfiles\\Mir1_edited.blp", + imageWidth = 350, + imageHeight = 175, + width = "full", + order = 17, + }, } end \ No newline at end of file From 47a15bd2a17a1b5313a1898d3fe2c28b1a155420 Mon Sep 17 00:00:00 2001 From: Sumsebrum Date: Fri, 14 Jan 2022 00:39:46 +0100 Subject: [PATCH 65/65] dump version --- Gladdy.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gladdy.lua b/Gladdy.lua index eb14d39..24dc74a 100644 --- a/Gladdy.lua +++ b/Gladdy.lua @@ -27,7 +27,7 @@ local LibStub = LibStub --------------------------- -local MAJOR, MINOR = "Gladdy", 4 +local MAJOR, MINOR = "Gladdy", 5 local Gladdy = LibStub:NewLibrary(MAJOR, MINOR) local L Gladdy.version_major_num = 2