From b54b031c1c498d85c59d16a13ce2d7465d551533 Mon Sep 17 00:00:00 2001 From: shagu Date: Tue, 24 Aug 2021 17:02:31 +0200 Subject: [PATCH] health-numbers: add health and mana text to units --- mods/health-numbers.lua | 93 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 93 insertions(+) create mode 100644 mods/health-numbers.lua diff --git a/mods/health-numbers.lua b/mods/health-numbers.lua new file mode 100644 index 0000000..a9982ba --- /dev/null +++ b/mods/health-numbers.lua @@ -0,0 +1,93 @@ +local _G = _G or getfenv(0) +local Abbreviate = ShaguTweaks.Abbreviate +local GetColorGradient = ShaguTweaks.GetColorGradient +local module = ShaguTweaks:register({ + title = "Health Numbers", + description = "Show health and mana numbers on player, pet and target unit frames.", + enabled = true, +}) + +module.enable = function(self) + TargetFrame.StatusTexts = CreateFrame("Frame", nil, TargetFrame) + TargetFrame.StatusTexts:SetAllPoints(TargetFrame) + + TargetFrameHealthBar.TextString = TargetFrame.StatusTexts:CreateFontString("TargetFrameHealthBarText", "OVERLAY") + TargetFrameHealthBar.TextString:SetPoint("TOP", TargetFrameHealthBar, "BOTTOM", -2, 23) + + TargetFrameManaBar.TextString = TargetFrame.StatusTexts:CreateFontString("TargetFrameManaBarText", "OVERLAY") + TargetFrameManaBar.TextString:SetPoint("TOP", TargetFrameManaBar, "BOTTOM", -2, 22) + + PetFrameHealthBar.TextString:SetPoint("CENTER", PetFrameHealthBar, "CENTER", -2, 0) + PetFrameManaBar.TextString:SetPoint("CENTER", PetFrameManaBar, "CENTER", -2, -2) + + for _, frame in pairs( { TargetFrameHealthBar, TargetFrameManaBar, PlayerFrameHealthBar, PlayerFrameManaBar }) do + frame.TextString:SetFontObject("GameFontNormal") + frame.TextString:SetFont(STANDARD_TEXT_FONT, 10, "OUTLINE") + frame.TextString:SetHeight(32) + end + + for _, frame in pairs( { PetFrameHealthBar, PetFrameManaBar }) do + frame.TextString:SetFontObject("GameFontNormal") + frame.TextString:SetFont(STANDARD_TEXT_FONT, 9, "OUTLINE") + frame.TextString:SetHeight(32) + frame.TextString:SetJustifyH("LEFT") + end + + local HookUnitFrame_UpdateManaType = UnitFrame_UpdateManaType + function UnitFrame_UpdateManaType(uf) + HookUnitFrame_UpdateManaType(uf) + if not uf then uf = this end + local string = uf.manabar and uf.manabar.TextString + if not string then return end + + if not strfind(uf.manabar:GetName(), "Health") then + local r, g, b = uf.manabar:GetStatusBarColor() + string:SetTextColor((r + 2) / 3, (g + 2) / 3, (b + 2) / 3, 1) + end + end + + local HookTextStatusBar_UpdateTextString = TextStatusBar_UpdateTextString + function TextStatusBar_UpdateTextString(sb) + if not sb then sb = this end + sb.lockShow = 1 + + HookTextStatusBar_UpdateTextString(sb) + local string = sb.TextString + + if string then + local min, max = sb:GetMinMaxValues() + local cur = sb:GetValue() + local percent = max > 0 and floor(cur/max*100) or 0 + + if sb:GetName() == "TargetFrameHealthBar" then + cur, max = ShaguTweaks.libhealth:GetUnitHealth(sb.unit) + end + + if cur == percent then + string:SetText(percent .. "%") + elseif sb:GetName() == "TargetFrameHealthBar" and cur < max then + string:SetText(Abbreviate(cur) .. " - " .. percent .. "%") + else + string:SetText(Abbreviate(cur)) + end + + if strfind(sb:GetName(), "Health") then + local r, g, b = GetColorGradient(percent/100) + string:SetTextColor((r + 1) / 2, (g + 1) / 2, (b + 1) / 2, .75) + end + + if max == 0 then + string:Hide() + string:SetText("") + elseif sb.unit == "target" and UnitIsDead("target") then + string:Hide() + string:SetText("") + elseif sb.unit == "target" and UnitIsGhost("target") then + string:Hide() + string:SetText("") + else + string:Show() + end + end + end +end