Support DruidManaBar current value text
This commit is contained in:
@@ -172,6 +172,79 @@ module.enable = function(self)
|
|||||||
UpdateUnitValues("player")
|
UpdateUnitValues("player")
|
||||||
UpdateUnitValues("target")
|
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 playerSetStatusBarColor = PlayerFrameHealthBar.SetStatusBarColor
|
||||||
local targetSetStatusBarColor = TargetFrameHealthBar.SetStatusBarColor
|
local targetSetStatusBarColor = TargetFrameHealthBar.SetStatusBarColor
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user