From 1941885763060bbc9924aa625bddd7045eb562db Mon Sep 17 00:00:00 2001 From: bink Date: Wed, 24 Aug 2022 16:51:27 +0800 Subject: [PATCH 1/2] add module targets. --- Gladdy.toc | 4 +- Gladdy_BCC.toc | 1 + Gladdy_Wrath.toc | 1 + Lang.lua | 4 + Modules/Targets.lua | 729 ++++++++++++++++++++++++++++++++++++++++++++ README.md | 6 +- 6 files changed, 742 insertions(+), 3 deletions(-) create mode 100644 Modules/Targets.lua diff --git a/Gladdy.toc b/Gladdy.toc index da5209a..23712ab 100644 --- a/Gladdy.toc +++ b/Gladdy.toc @@ -1,7 +1,7 @@ ## Title: Gladdy |cFFFF0000 game client not supported|r -## Version: 2.22-Release +## Version: 2.23-Release ## Notes: The most powerful arena AddOn for WoW Classic TBC/WotLK -## Author: XiconQoo, DnB_Junkee, Knall +## Author: XiconQoo, DnB_Junkee, Knall, Binkcn ## X-Email: contact me on discord Knall#1751 ## X-Curse-Project-ID: 482332 ## X-WoWI-ID: 26350 diff --git a/Gladdy_BCC.toc b/Gladdy_BCC.toc index 599ff68..80d30d3 100644 --- a/Gladdy_BCC.toc +++ b/Gladdy_BCC.toc @@ -39,6 +39,7 @@ Modules\BuffsDebuffs.lua Modules\VersionCheck.lua Modules\XiconProfiles.lua Modules\Pets.lua +Modules\Targets.lua Modules\ExportImport.lua Modules\CombatIndicator.lua Modules\RangeCheck.lua diff --git a/Gladdy_Wrath.toc b/Gladdy_Wrath.toc index 499ba6a..8214adc 100644 --- a/Gladdy_Wrath.toc +++ b/Gladdy_Wrath.toc @@ -39,6 +39,7 @@ Modules\BuffsDebuffs.lua Modules\VersionCheck.lua Modules\XiconProfiles.lua Modules\Pets.lua +Modules\Targets.lua Modules\ExportImport.lua Modules\CombatIndicator.lua Modules\RangeCheck.lua diff --git a/Lang.lua b/Lang.lua index 34ac1b5..4f14829 100644 --- a/Lang.lua +++ b/Lang.lua @@ -1298,6 +1298,10 @@ elseif GetLocale() == "zhCN" then L["Portrait"] = "头像" L["Health Values"] = "生命值" + -- Targets.lua + L["Targets"] = "敌方目标" + L["Enables Targets module"] = "启用敌方目标显示模块" + -- Powerbar.lua L["Power Bar"] = "法力/能量条" L["Power Bar Text"] = "法力/能量条文字" diff --git a/Modules/Targets.lua b/Modules/Targets.lua new file mode 100644 index 0000000..e649b1e --- /dev/null +++ b/Modules/Targets.lua @@ -0,0 +1,729 @@ +local string_gsub, floor, pairs = string.gsub, math.floor, pairs +local CreateFrame, SetPortraitTexture = CreateFrame, SetPortraitTexture +local UnitHealthMax, UnitHealth, UnitName, UnitClass, UnitGUID, UnitExists = UnitHealthMax, UnitHealth, UnitName, UnitClass, UnitGUID, UnitExists + +local RAID_CLASS_COLORS = RAID_CLASS_COLORS + +local Gladdy = LibStub("Gladdy") +local L = Gladdy.L +local Targets = Gladdy:NewModule("Targets", nil, { + targetEnabled = true, + targetWidth = 128, + targetHeight = 40, + targetPortraitEnabled = true, + targetPortraitBorderStyle = "Interface\\AddOns\\Gladdy\\Images\\Border_rounded_blp", + targetHealthBarFont = "DorisPP", + targetHealthBarHeight = 60, + targetHealthBarTexture = "Smooth", + targetHealthBarBorderStyle = "Gladdy Tooltip round", + targetHealthBarBorderSize = 9, + targetHealthBarBorderColor = { r = 0, g = 0, b = 0, a = 1 }, + targetHealthBarColor = { r = 0, g = 1, b = 0, a = 1 }, + targetHealthBarBgColor = { r = 0, g = 0, b = 0, a = 0.4 }, + targetHealthBarFontColor = { r = 1, g = 1, b = 1, a = 1 }, + targetHealthBarFontSize = 12, + targetHealthPercentage = true, + targetHealthBarClassColored = true, + targetXOffset = 286, + targetYOffset = 0, + targetGroup = false, + targetMargin = 1, + targetFrameStrata = "MEDIUM", + targetFrameLevel = 5, +}) + +function Targets:Initialize() + self.frames = {} + if Gladdy.db.targetEnabled then + self:RegisterMessage("JOINED_ARENA") + self:RegisterMessage("ENEMY_SPOTTED") + self:RegisterMessage("UNIT_DESTROYED") + self:RegisterMessage("UNIT_DEATH") + + -- self:RegisterMessage("ENEMY_STEALTH") + -- self:RegisterMessage("UNIT_SPEC") + end +end + +function Targets:UpdateFrameOnce() + if Gladdy.db.targetEnabled then + self:RegisterMessage("JOINED_ARENA") + self:RegisterMessage("ENEMY_SPOTTED") + self:RegisterMessage("UNIT_DESTROYED") + self:RegisterMessage("UNIT_DEATH") + else + self:UnregisterAllMessages() + end +end + +function Targets:JOINED_ARENA() + for _,v in pairs(self.frames) do + v.healthBar:SetAlpha(0) + end + + if Gladdy.db.targetEnabled then + self:RegisterEvent("UNIT_TARGET") + self:SetScript("OnEvent", function(_, event, unitId) + if event == "UNIT_TARGET" then + Targets:CheckUnitTarget(unitId) + end + end) + end +end + +function Targets:UNIT_DEATH(unitId) + local unit = string_gsub(unitId, "%d$", "%1target") + local healthBar = self.frames[unit].healthBar + if (not healthBar) then + return + end + + healthBar:SetAlpha(0) + healthBar:SetScript("OnUpdate", nil) + healthBar.portrait:SetTexture(nil) +end + +function Targets:UNIT_DESTROYED(unitId) + local unit = string_gsub(unitId, "%d$", "%1target") + local healthBar = self.frames[unit].healthBar + if (not healthBar) then + return + end + + healthBar:SetAlpha(0) + healthBar:SetScript("OnUpdate", nil) + healthBar.portrait:SetTexture(nil) +end + + +function Targets:ENEMY_SPOTTED(unit) + if Gladdy.db.targetEnabled then + self:CheckUnitTarget(unit) + end +end + +local targetsHealth = {} +function Targets:CheckUnitTarget(unitId) + if (not unitId) then + return + end + + local unitPrefix = string_gsub(unitId, "%d$", "") + local unit = string_gsub(unitId, "%d$", "%1target") + + if unitPrefix ~= "arena" then + return + end + + local targetsFrame = self.frames[unit] + if (not targetsFrame) then + return + end + + if ( UnitGUID(unit)) then + -- print(unit .. "'s name:" .. UnitName(unit)) + -- print(unit .. "'s HP:" .. UnitHealth(unit) .."/"..UnitHealthMax(unit)) + + targetsFrame.healthBar:SetAlpha(1) + targetsFrame.healthBar.hp:SetMinMaxValues(0, UnitHealthMax(unit)) + targetsFrame.healthBar.hp:SetValue(UnitHealth(unit)) + Targets:SetHealthText(targetsFrame.healthBar, UnitHealth(unit), UnitHealthMax(unit)) + SetPortraitTexture(targetsFrame.healthBar.portrait, unit) + + targetsFrame.healthBar:SetScript("OnUpdate", function(self) + if targetsHealth[self.unit] ~= UnitHealth(self.unit) then + -- print("OnUpdate Unit HP:" .. self.unit .. " -> " .. UnitHealth(self.unit) .. "/" .. UnitHealthMax(self.unit)) + + self.hp:SetValue(UnitHealth(self.unit)) + Targets:SetHealthText(self, UnitHealth(self.unit), UnitHealthMax(self.unit)) + + targetsHealth[self.unit] = UnitHealth(self.unit) + end + end) + + Targets:SetHealthStatusBarColor(unit) + else + targetsHealth[unit] = nil + + targetsFrame.healthBar:SetAlpha(0) + targetsFrame.healthBar:SetScript("OnUpdate", nil) + targetsFrame.healthBar.portrait:SetTexture(nil) + end +end + +function Targets:Test(unitId) + if Gladdy.db.targetEnabled then + local unit = string_gsub(unitId, "%d$", "%1target") + local targetsFrame = self.frames[unit] + if (not targetsFrame) then + return + end + + targetsFrame.healthBar:SetAlpha(1) + targetsFrame.healthBar.hp:SetMinMaxValues(0, 12000) + targetsFrame.healthBar.hp:SetValue(7000) + Targets:SetHealthText(targetsFrame.healthBar, 7000, 12000) + SetPortraitTexture(targetsFrame.healthBar.portrait, "player") + Targets:SetHealthStatusBarColor(unit) + + self:RegisterEvent("UNIT_TARGET") + self:SetScript("OnEvent", function(_, event, unitId) + if event == "UNIT_TARGET" then + Targets:CheckUnitTarget(unitId) + end + end) + end +end + +function Targets:CreateFrame(unitId) + local unit = string_gsub(unitId, "%d$", "%1target") + if self.frames[unit] then + return + end + local button = CreateFrame("Frame", "GladdyButtonFrameTarget" .. unit, Gladdy.frame) + button:SetMovable(true) + --button:SetAlpha(0) + button:SetPoint("LEFT", Gladdy.buttons[unitId].healthBar, "RIGHT", Gladdy.db.targetXOffset, Gladdy.db.targetYOffset) + + local secure = CreateFrame("Button", "GladdyButton" .. unit, button, "SecureActionButtonTemplate, SecureHandlerEnterLeaveTemplate") + secure:RegisterForClicks("AnyUp") + secure:RegisterForClicks("AnyDown") + secure:SetAttribute("*type1", "target") + secure:SetAttribute("*type2", "focus") + secure:SetAttribute("unit", unit) + secure:SetAllPoints(button) + + button.unit = unit + button.secure = secure + + local healthBar = CreateFrame("Frame", nil, button, BackdropTemplateMixin and "BackdropTemplate") + healthBar:SetBackdrop({ edgeFile = Gladdy:SMFetch("border", "targetHealthBarBorderStyle"), + edgeSize = Gladdy.db.targetHealthBarBorderSize }) + healthBar:SetBackdropBorderColor(Gladdy:SetColor(Gladdy.db.targetHealthBarBorderColor)) + healthBar:SetFrameStrata(Gladdy.db.targetFrameStrata) + healthBar:SetFrameLevel(Gladdy.db.targetFrameLevel) + healthBar:SetAllPoints(button) + healthBar:SetAlpha(0) + + healthBar.portrait = healthBar:CreateTexture(nil, "BACKGROUND") + healthBar.portrait:SetPoint("LEFT", healthBar, "RIGHT") + healthBar.portrait:SetTexCoord(0.1, 0.9, 0.1, 0.9) + SetPortraitTexture(healthBar.portrait, "player") + 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:SetColor(Gladdy.db.targetHealthBarBorderColor)) + + + healthBar.hp = CreateFrame("StatusBar", nil, healthBar) + healthBar.hp:SetStatusBarTexture(Gladdy:SMFetch("statusbar", "targetHealthBarTexture")) + healthBar.hp:SetStatusBarColor(Gladdy:SetColor(Gladdy.db.targetHealthBarColor)) + healthBar.hp:SetMinMaxValues(0, 100) + healthBar.hp:SetFrameStrata(Gladdy.db.targetFrameStrata) + healthBar.hp:SetFrameLevel(Gladdy.db.targetFrameLevel - 1) + healthBar.hp:SetAllPoints(healthBar) + + healthBar.bg = healthBar.hp:CreateTexture(nil, "BACKGROUND") + healthBar.bg:SetTexture(Gladdy:SMFetch("statusbar", "targetHealthBarTexture")) + healthBar.bg:ClearAllPoints() + healthBar.bg:SetAllPoints(healthBar.hp) + healthBar.bg:SetAlpha(1) + healthBar.bg:SetVertexColor(Gladdy:SetColor(Gladdy.db.targetHealthBarBgColor)) + + healthBar.nameText = healthBar:CreateFontString(nil, "LOW", "GameFontNormalSmall") + if (Gladdy.db.targetHealthBarFontSize < 1) then + healthBar.nameText:SetFont(Gladdy:SMFetch("font", "targetHealthBarFont"), 1) + healthBar.nameText:Hide() + else + healthBar.nameText:SetFont(Gladdy:SMFetch("font", "targetHealthBarFont"), Gladdy.db.targetHealthBarFontSize) + healthBar.nameText:Show() + end + healthBar.nameText:SetTextColor(Gladdy:SetColor(Gladdy.db.targetHealthBarFontColor)) + healthBar.nameText:SetShadowOffset(1, -1) + healthBar.nameText:SetShadowColor(0, 0, 0, 1) + healthBar.nameText:SetJustifyH("CENTER") + healthBar.nameText:SetPoint("LEFT", 5, 0) + + healthBar.healthText = healthBar:CreateFontString(nil, "LOW") + if (Gladdy.db.targetHealthBarFontSize < 1) then + healthBar.healthText:SetFont(Gladdy:SMFetch("font", "targetHealthBarFont"), 1) + healthBar.healthText:Hide() + else + healthBar.healthText:SetFont(Gladdy:SMFetch("font", "targetHealthBarFont"), Gladdy.db.targetHealthBarFontSize) + healthBar.healthText:Hide() + end + healthBar.healthText:SetTextColor(Gladdy:SetColor(Gladdy.db.targetHealthBarFontColor)) + healthBar.healthText:SetShadowOffset(1, -1) + healthBar.healthText:SetShadowColor(0, 0, 0, 1) + healthBar.healthText:SetJustifyH("CENTER") + healthBar.healthText:SetPoint("RIGHT", -5, 0) + + healthBar.unit = unit + button.healthBar = healthBar + + healthBar:RegisterUnitEvent("UNIT_HEALTH_FREQUENT", unit) + healthBar:RegisterUnitEvent("UNIT_MAXHEALTH", unit) + healthBar:RegisterUnitEvent("UNIT_PORTRAIT_UPDATE", unit) + healthBar:RegisterUnitEvent("UNIT_NAME_UPDATE", unit) + -- healthBar:SetScript("OnEvent", Targets.OnEvent) + + button:SetWidth(Gladdy.db.targetWidth) + button:SetHeight(Gladdy.db.targetHeight) + + self.frames[unit] = button +end + +function Targets.OnEvent(self, event, unit) + -- if event == "UNIT_PORTRAIT_UPDATE" then + -- SetPortraitTexture(self.portrait, unit) + -- end + + -- local health = UnitHealth(unit) + -- local healthMax = UnitHealthMax(unit) + -- self.hp:SetMinMaxValues(0, healthMax) + -- self.hp:SetValue(health) + -- Targets:SetHealthText(self, health, healthMax) +end + +function Targets:UpdateFrame(unitId) + local unit = string_gsub(unitId, "%d$", "%1target") + local healthBar = self.frames[unit].healthBar + + if (not healthBar) then + return + end + + healthBar:SetFrameStrata(Gladdy.db.targetFrameStrata) + healthBar:SetFrameLevel(Gladdy.db.targetFrameLevel) + healthBar.hp:SetFrameStrata(Gladdy.db.targetFrameStrata) + healthBar.hp:SetFrameLevel(Gladdy.db.targetFrameLevel - 1) + + if not Gladdy.db.targetEnabled then + self.frames[unit]:Hide() + else + self.frames[unit]:Show() + end + + self.frames[unit]:SetWidth(Gladdy.db.targetWidth) + self.frames[unit]:SetHeight(Gladdy.db.targetHeight) + + Gladdy:SetPosition(self.frames[unit], unitId, "targetXOffset", "targetYOffset", Targets:LegacySetPosition(unit, unitId), Targets) + + if (Gladdy.db.targetGroup) then + if (unit == "arena1target") then + self.frames[unit]:ClearAllPoints() + self.frames[unit]:SetPoint("TOPLEFT", Gladdy.buttons[unitId].healthBar, "TOPLEFT", Gladdy.db.targetXOffset, Gladdy.db.targetYOffset) + else + local previousTarget = "arena" .. string_gsub(string_gsub(unit, "arena", ""), "target", "") - 1 .. "target" + self.frames[unit]:ClearAllPoints() + self.frames[unit]:SetPoint("TOPLEFT", self.frames[previousTarget], "BOTTOMLEFT", 0, - Gladdy.db.targetMargin) + end + else + self.frames[unit]:ClearAllPoints() + self.frames[unit]:SetPoint("TOPLEFT", Gladdy.buttons[unitId].healthBar, "TOPLEFT", Gladdy.db.targetXOffset, Gladdy.db.targetYOffset) + end + + healthBar.portrait:SetHeight(Gladdy.db.targetHeight) + healthBar.portrait:SetWidth(Gladdy.db.targetHeight) + if not Gladdy.db.targetPortraitEnabled then + healthBar.portrait:Hide() + healthBar.portrait.border:Hide() + else + healthBar.portrait:Show() + healthBar.portrait.border:Show() + end + healthBar.portrait.border:SetTexture(Gladdy.db.targetPortraitBorderStyle) + healthBar.portrait.border:SetVertexColor(Gladdy:SetColor(Gladdy.db.targetHealthBarBorderColor)) + + healthBar.bg:SetTexture(Gladdy:SMFetch("statusbar", "targetHealthBarTexture")) + healthBar.bg:SetVertexColor(Gladdy:SetColor(Gladdy.db.targetHealthBarBgColor)) + + healthBar:SetBackdrop({ edgeFile = Gladdy:SMFetch("border", "targetHealthBarBorderStyle"), + edgeSize = Gladdy.db.targetHealthBarBorderSize }) + healthBar:SetBackdropBorderColor(Gladdy:SetColor(Gladdy.db.targetHealthBarBorderColor)) + + healthBar.hp:SetStatusBarTexture(Gladdy:SMFetch("statusbar", "targetHealthBarTexture")) + healthBar.hp:SetStatusBarColor(Gladdy:SetColor(Gladdy.db.targetHealthBarColor)) + healthBar.hp:ClearAllPoints() + healthBar.hp:SetPoint("TOPLEFT", healthBar, "TOPLEFT", (Gladdy.db.targetHealthBarBorderSize/Gladdy.db.statusbarBorderOffset), -(Gladdy.db.targetHealthBarBorderSize/Gladdy.db.statusbarBorderOffset)) + healthBar.hp:SetPoint("BOTTOMRIGHT", healthBar, "BOTTOMRIGHT", -(Gladdy.db.targetHealthBarBorderSize/Gladdy.db.statusbarBorderOffset), (Gladdy.db.targetHealthBarBorderSize/Gladdy.db.statusbarBorderOffset)) + + if (Gladdy.db.targetHealthBarFontSize < 1) then + healthBar.nameText:SetFont(Gladdy:SMFetch("font", "targetHealthBarFont"), 1) + healthBar.healthText:SetFont(Gladdy:SMFetch("font", "targetHealthBarFont"), 1) + healthBar.nameText:Hide() + healthBar.healthText:Hide() + else + healthBar.nameText:SetFont(Gladdy:SMFetch("font", "targetHealthBarFont"), Gladdy.db.targetHealthBarFontSize) + healthBar.nameText:Show() + healthBar.healthText:SetFont(Gladdy:SMFetch("font", "targetHealthBarFont"), Gladdy.db.targetHealthBarFontSize) + healthBar.healthText:Show() + end + healthBar.nameText:SetTextColor(Gladdy:SetColor(Gladdy.db.targetHealthBarFontColor)) + healthBar.healthText:SetTextColor(Gladdy:SetColor(Gladdy.db.targetHealthBarFontColor)) + + if (unit == "arena1target") then + Gladdy:CreateMover(self.frames[unit], "targetXOffset", "targetYOffset", L["Targets"], {"TOPLEFT", "TOPLEFT"}) + end +end + +function Targets:SetHealthStatusBarColor(unit) + local targetsFrame = self.frames[unit] + if not targetsFrame then + return + end + + local class = select(2, UnitClass(unit)) + if not class then + return + end + + local healthBar = targetsFrame.healthBar + if not healthBar.hp.oorFactor then + healthBar.hp.oorFactor = 1 + end + + healthBar.bg:SetVertexColor(Gladdy:SetColor(Gladdy.db.targetHealthBarBgColor)) + + if Gladdy.db.targetHealthBarClassColored then + healthBar.hp:SetStatusBarColor( + RAID_CLASS_COLORS[class].r / healthBar.hp.oorFactor, + RAID_CLASS_COLORS[class].g / healthBar.hp.oorFactor, + RAID_CLASS_COLORS[class].b / healthBar.hp.oorFactor, 1) + end +end + +function Targets:SetHealthText(healthBar, health, healthMax) + local healthText = "" + if healthMax ~= 0 then + local healthPercentage = floor(health * 100 / healthMax) + + if (Gladdy.db.targetHealthPercentage) then + healthText = ("%d%%"):format(healthPercentage) + end + else + healthText = "" + end + + healthBar.healthText:SetText(healthText) +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 + Gladdy.options.args.Targets.args.group.args.border.args.targetHealthBarBorderSize.max = Gladdy.db.targetHeight/2 + if Gladdy.db.targetHealthBarBorderSize > Gladdy.db.targetHeight/2 then + Gladdy.db.targetHealthBarBorderSize = Gladdy.db.targetHeight/2 + end + Gladdy:UpdateFrame() + end, + } + + for k, v in pairs(params) do + defaults[k] = v + end + + return defaults +end + +function Targets:GetOptions() + return { + header = { + type = "header", + name = L["Targets"], + order = 2, + }, + targetEnabled = Gladdy:option({ + type = "toggle", + name = L["Enabled"], + desc = L["Enables Targets module"], + order = 3, + }), + targetGroup = option({ + type = "toggle", + name = L["Group Targets"], + order = 4, + }), + group = { + type = "group", + childGroups = "tree", + name = L["Frame"], + order = 3, + disabled = function() return not Gladdy.db.targetEnabled end, + args = { + general = { + type = "group", + name = L["General"], + order = 1, + args = { + headerAuras = { + type = "header", + name = L["General"], + order = 1, + }, + targetHeight = option({ + type = "range", + name = L["Bar height"], + desc = L["Height of the bar"], + order = 3, + min = 10, + max = 100, + step = 1, + width = "full", + }), + targetWidth = option({ + type = "range", + name = L["Bar width"], + desc = L["Width of the bar"], + order = 4, + min = 10, + max = 300, + step = 1, + width = "full", + }), + targetMargin = option({ + type = "range", + name = L["Margin"], + desc = L["Height of the bar"], + order = 6, + disabled = function() + return not Gladdy.db.targetGroup + end, + min = 0, + max = 50, + step = .1, + }), + targetHealthBarTexture = option({ + type = "select", + name = L["Bar texture"], + desc = L["Texture of the bar"], + order = 7, + dialogControl = "LSM30_Statusbar", + values = AceGUIWidgetLSMlists.statusbar, + }), + targetHealthBarColor = Gladdy:colorOption({ + type = "color", + name = L["Health color"], + desc = L["Color of the status bar"], + order = 8, + hasAlpha = true, + }), + targetHealthBarBgColor = Gladdy:colorOption({ + type = "color", + name = L["Background color"], + desc = L["Color of the status bar background"], + order = 9, + hasAlpha = true, + }), + }, + }, + portrait = { + type = "group", + name = L["Portrait"], + order = 2, + args = { + headerAuras = { + type = "header", + name = L["Portrait"], + order = 1, + }, + targetPortraitEnabled = Gladdy:option({ + type = "toggle", + name = L["Enabled"], + order = 2, + }), + targetPortraitBorderStyle = Gladdy:option({ + type = "select", + name = L["Border style"], + order = 3, + values = Gladdy:GetIconStyles() + }), + + }, + }, + font = { + type = "group", + name = L["Font"], + order = 3, + args = { + header = { + type = "header", + name = L["Font"], + order = 1, + }, + targetHealthBarFont = option({ + type = "select", + name = L["Font"], + desc = L["Font of the bar"], + order = 11, + dialogControl = "LSM30_Font", + values = AceGUIWidgetLSMlists.font, + }), + targetHealthBarFontColor = Gladdy:colorOption({ + type = "color", + name = L["Font color"], + desc = L["Color of the text"], + order = 12, + hasAlpha = true, + }), + targetHealthBarFontSize = option({ + type = "range", + name = L["Font size"], + desc = L["Size of the text"], + order = 13, + min = 0, + max = 20, + width = "full", + }), + }, + }, + border = { + type = "group", + name = L["Border"], + order = 4, + args = { + header = { + type = "header", + name = L["Border"], + order = 1, + }, + targetHealthBarBorderStyle = option({ + type = "select", + name = L["Border style"], + order = 21, + dialogControl = "LSM30_Border", + values = AceGUIWidgetLSMlists.border, + }), + targetHealthBarBorderSize = option({ + type = "range", + name = L["Border size"], + desc = L["Size of the border"], + order = 22, + min = 0.5, + max = Gladdy.db.targetHeight/2, + step = 0.5, + width = "full", + }), + targetHealthBarBorderColor = Gladdy:colorOption({ + type = "color", + name = L["Border color"], + desc = L["Color of the border"], + order = 23, + hasAlpha = true, + }), + }, + }, + position = { + type = "group", + name = L["Position"], + order = 5, + args = { + header = { + type = "header", + name = L["Position"], + order = 1, + }, + targetXOffset = Gladdy:option({ + type = "range", + name = L["Horizontal offset"], + order = 22, + min = -600, + max = 600, + step = 0.1, + width = "full", + }), + targetYOffset = Gladdy:option({ + type = "range", + name = L["Vertical offset"], + order = 23, + min = -600, + max = 600, + 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, + }, + targetFrameStrata = Gladdy:option({ + type = "select", + name = L["Frame Strata"], + order = 2, + values = Gladdy.frameStrata, + sorting = Gladdy.frameStrataSorting, + width = "full", + }), + targetFrameLevel = 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 = 7, + args = { + header = { + type = "header", + name = L["Health Values"], + order = 1, + }, + targetHealthPercentage = option({ + type = "toggle", + name = L["Show health percentage"], + desc = L["Show health percentage on the health bar"], + order = 33, + }), + }, + }, + }, + }, + } +end + +--------------------------- + +-- LAGACY HANDLER + +--------------------------- + +function Targets: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.targetXOffset, Gladdy.db.targetYOffset) + if (Gladdy.db.tagetsGroup) then + if (unit == "arena1target") then + self.frames[unit]:SetPoint("LEFT", Gladdy.buttons[unitId].healthBar, "RIGHT", Gladdy.db.targetXOffset, Gladdy.db.targetYOffset) + else + local previousTarget = "arena" .. string_gsub(string_gsub(unit, "arena", ""), "target", "") - 1 .. "target" + self.frames[unit]:ClearAllPoints() + self.frames[unit]:SetPoint("TOPLEFT", self.frames[previousTarget], "BOTTOMLEFT", 0, - Gladdy.db.targetMargin) + end + else + self.frames[unit]:ClearAllPoints() + self.frames[unit]:SetPoint("LEFT", Gladdy.buttons[unitId].healthBar, "RIGHT", Gladdy.db.targetXOffset, Gladdy.db.targetYOffset) + end + return Gladdy.db.newLayout +end \ No newline at end of file diff --git a/README.md b/README.md index 075ccd9..97737f2 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ --- -## [v2.22-Release Download Here](https://github.com/XiconQoo/Gladdy-TBC/releases/download/v2.22-Release/Gladdy_Classic_v2.22-Release.zip) +## [v2.23-Release Download Here](https://github.com/XiconQoo/Gladdy-TBC/releases/download/v2.23-Release/Gladdy_Classic_v2.23-Release.zip) ###### Please consider donating if you like my work @@ -79,6 +79,10 @@ Thank you! ### Changes +### v2.23-Release +- **Targets** + - show targets + ### v2.22-Release - fixed unwanted committed changes to LibCustomGlow -- 2.39.2 From 83dc5a12e2eb399ab026e016863ef419b008ba74 Mon Sep 17 00:00:00 2001 From: bink Date: Wed, 24 Aug 2022 17:24:51 +0800 Subject: [PATCH 2/2] add unit name in Targets. --- Modules/Targets.lua | 33 ++++++++++++++++++++++++++++++--- 1 file changed, 30 insertions(+), 3 deletions(-) diff --git a/Modules/Targets.lua b/Modules/Targets.lua index e649b1e..d455bf5 100644 --- a/Modules/Targets.lua +++ b/Modules/Targets.lua @@ -22,6 +22,7 @@ local Targets = Gladdy:NewModule("Targets", nil, { targetHealthBarBgColor = { r = 0, g = 0, b = 0, a = 0.4 }, targetHealthBarFontColor = { r = 1, g = 1, b = 1, a = 1 }, targetHealthBarFontSize = 12, + targetHealthUnitName = true, targetHealthPercentage = true, targetHealthBarClassColored = true, targetXOffset = 286, @@ -141,6 +142,7 @@ function Targets:CheckUnitTarget(unitId) end end) + Targets:SetText(unit) Targets:SetHealthStatusBarColor(unit) else targetsHealth[unit] = nil @@ -164,6 +166,7 @@ function Targets:Test(unitId) targetsFrame.healthBar.hp:SetValue(7000) Targets:SetHealthText(targetsFrame.healthBar, 7000, 12000) SetPortraitTexture(targetsFrame.healthBar.portrait, "player") + Targets:SetText(unit) Targets:SetHealthStatusBarColor(unit) self:RegisterEvent("UNIT_TARGET") @@ -208,7 +211,7 @@ function Targets:CreateFrame(unitId) healthBar.portrait = healthBar:CreateTexture(nil, "BACKGROUND") healthBar.portrait:SetPoint("LEFT", healthBar, "RIGHT") healthBar.portrait:SetTexCoord(0.1, 0.9, 0.1, 0.9) - SetPortraitTexture(healthBar.portrait, "player") + -- SetPortraitTexture(healthBar.portrait, "player") healthBar.portrait.border = healthBar:CreateTexture(nil, "OVERLAY") healthBar.portrait.border:SetAllPoints(healthBar.portrait) healthBar.portrait.border:SetTexture(Gladdy.db.classIconBorderStyle) @@ -408,6 +411,23 @@ function Targets:SetHealthText(healthBar, health, healthMax) healthBar.healthText:SetText(healthText) end +function Targets:SetText(unit) + local targetsFrame = self.frames[unit] + if not targetsFrame then + return + end + + local nameText = "" + local unitName = UnitName(unit) + if unitName and Gladdy.db.targetHealthUnitName then + nameText = unitName + else + nameText = "" + end + + targetsFrame.healthBar.nameText:SetText(nameText) +end + local function option(params) local defaults = { get = function(info) @@ -680,14 +700,21 @@ function Targets:GetOptions() }, healthValues = { type = "group", - name = L["Health Values"], + name = L["Health Bar Text"], order = 7, args = { header = { type = "header", - name = L["Health Values"], + name = L["Health Bar Text"], order = 1, }, + targetHealthUnitName = option({ + type = "toggle", + name = L["Show name text"], + desc = L["Show the units name"], + order = 2, + width = "full", + }), targetHealthPercentage = option({ type = "toggle", name = L["Show health percentage"], -- 2.39.2