Files
coa-shadowedunitframes/ShadowedUnitFrames/modules/power.lua
T
2024-12-23 06:56:21 -07:00

75 lines
2.8 KiB
Lua

local Power = {}
ShadowUF:RegisterModule(Power, "powerBar", ShadowUF.L["Power bar"], true)
local function updatePower(self, elapsed)
local currentPower = UnitPower(self.parent.unit)
if( currentPower == self.currentPower ) then return end
self.currentPower = currentPower
self:SetValue(currentPower)
for _, fontString in pairs(self.parent.fontStrings) do
if( fontString.fastPower ) then
fontString:UpdateTags()
end
end
end
function Power:OnEnable(frame)
frame.powerBar = frame.powerBar or ShadowUF.Units:CreateBar(frame)
frame:RegisterUnitEvent("UNIT_MANA", self, "Update")
frame:RegisterUnitEvent("UNIT_RAGE", self, "Update")
frame:RegisterUnitEvent("UNIT_ENERGY", self, "Update")
frame:RegisterUnitEvent("UNIT_FOCUS", self, "Update")
frame:RegisterUnitEvent("UNIT_RUNIC_POWER", self, "Update")
frame:RegisterUnitEvent("UNIT_MAXMANA", self, "Update")
frame:RegisterUnitEvent("UNIT_MAXRAGE", self, "Update")
frame:RegisterUnitEvent("UNIT_MAXENERGY", self, "Update")
frame:RegisterUnitEvent("UNIT_MAXFOCUS", self, "Update")
frame:RegisterUnitEvent("UNIT_MAXRUNIC_POWER", self, "Update")
frame:RegisterUnitEvent("UNIT_DISPLAYPOWER", self, "UpdateColor")
frame:RegisterUpdateFunc(self, "UpdateColor")
frame:RegisterUpdateFunc(self, "Update")
end
function Power:OnLayoutApplied(frame)
-- Enable predicted updates which requires polling in an OnUpdate to get more up to date values
if( frame.visibility.powerBar ) then
if( ShadowUF.db.profile.units[frame.unitType].powerBar.predicted ) then
frame.powerBar:SetScript("OnUpdate", updatePower)
else
frame.powerBar:SetScript("OnUpdate", nil)
end
end
end
function Power:OnDisable(frame)
frame:UnregisterAll(self)
end
function Power:UpdateColor(frame)
local color = ShadowUF.db.profile.powerColors[select(2, UnitPowerType(frame.unit))] or ShadowUF.db.profile.powerColors.MANA
if( not ShadowUF.db.profile.units[frame.unitType].powerBar.invert ) then
frame.powerBar:SetStatusBarColor(color.r, color.g, color.b, ShadowUF.db.profile.bars.alpha)
if( not frame.powerBar.background.overrideColor ) then
frame.powerBar.background:SetVertexColor(color.r, color.g, color.b, ShadowUF.db.profile.bars.backgroundAlpha)
end
else
frame.powerBar.background:SetVertexColor(color.r, color.g, color.b, ShadowUF.db.profile.bars.alpha)
color = frame.powerBar.background.overrideColor
if( not color ) then
frame.powerBar:SetStatusBarColor(0, 0, 0, 1 - ShadowUF.db.profile.bars.backgroundAlpha)
else
frame.powerBar:SetStatusBarColor(color.r, color.g, color.b, ShadowUF.db.profile.bars.backgroundAlpha)
end
end
end
function Power:Update(frame)
frame.powerBar.currentPower = UnitPower(frame.unit)
frame.powerBar:SetMinMaxValues(0, UnitPowerMax(frame.unit))
frame.powerBar:SetValue(UnitIsDeadOrGhost(frame.unit) and 0 or not UnitIsConnected(frame.unit) and 0 or frame.powerBar.currentPower)
end