From 4e09645dc7116421badecc833dc26e322db95f02 Mon Sep 17 00:00:00 2001 From: Dusk-92 Date: Sun, 30 Aug 2026 10:39:40 +0200 Subject: [PATCH] Support DruidManaBar current value text --- mods/unitframes-bighealth.lua | 73 +++++++++++++++++++++++++++++++++++ 1 file changed, 73 insertions(+) diff --git a/mods/unitframes-bighealth.lua b/mods/unitframes-bighealth.lua index 2673d08..d3e5645 100644 --- a/mods/unitframes-bighealth.lua +++ b/mods/unitframes-bighealth.lua @@ -172,6 +172,79 @@ module.enable = function(self) UpdateUnitValues("player") UpdateUnitValues("target") + -- DruidManaBar is a separate addon/frame used to keep mana visible while + -- shapeshifted. Its TextStatusBar normally renders "current / max", so give + -- it the same current-value-only presentation as Big Health. + ShaguTweaks.HookAddonOrVariable("DruidManaBar", function() + local bar = _G.DruidManaBar + if not bar then return end + + if bar.text then + bar.text:SetAlpha(0) + elseif bar.TextString then + bar.TextString:SetAlpha(0) + end + + if not self.druidManaText then + self.druidManaText = bar:CreateFontString(nil, "OVERLAY", "GameFontWhite") + self.druidManaText:SetFont(STANDARD_TEXT_FONT, 10, "OUTLINE") + self.druidManaText:SetHeight(32) + self.druidManaText:SetPoint("CENTER", bar, "CENTER", 0, 0) + self.druidManaText:SetJustifyH("CENTER") + self.druidManaText:SetTextColor(1, 1, 1, 1) + end + + local function UpdateDruidManaText() + if not bar:IsShown() then + self.druidManaText:Hide() + return + end + + local value + local max + if _G.DruidManaLib and _G.DruidManaLib.GetMana and _G.DruidManaLib.GetMaxMana then + value = _G.DruidManaLib:GetMana() + max = _G.DruidManaLib:GetMaxMana() + else + value = bar:GetValue() + local _, barMax = bar:GetMinMaxValues() + max = barMax + end + + if not max or max <= 0 then + self.druidManaText:Hide() + return + end + + self.druidManaText:SetText(tostring(value or 0)) + self.druidManaText:Show() + end + + if not self.druidManaEvents then + self.druidManaEvents = CreateFrame("Frame") + self.druidManaEvents:RegisterEvent("PLAYER_ENTERING_WORLD") + self.druidManaEvents:RegisterEvent("PLAYER_AURAS_CHANGED") + self.druidManaEvents:RegisterEvent("UNIT_DISPLAYPOWER") + self.druidManaEvents:RegisterEvent("UNIT_MANA") + self.druidManaEvents:RegisterEvent("UNIT_MAXMANA") + self.druidManaEvents:SetScript("OnEvent", function() + if event == "PLAYER_ENTERING_WORLD" or event == "PLAYER_AURAS_CHANGED" + or not arg1 or arg1 == "player" then + UpdateDruidManaText() + end + end) + end + + -- DruidManaBar can update after the shared event dispatch. Hook its value + -- write as the authoritative final refresh without polling every frame. + if not self.druidManaValueHooked and bar.SetValue then + self.druidManaValueHooked = true + hooksecurefunc(bar, "SetValue", UpdateDruidManaText) + end + + UpdateDruidManaText() + end) + local playerSetStatusBarColor = PlayerFrameHealthBar.SetStatusBarColor local targetSetStatusBarColor = TargetFrameHealthBar.SetStatusBarColor