You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
55 lines
2.1 KiB
55 lines
2.1 KiB
local AltPower = {}
|
|
AltPower.defaultVisibility = false
|
|
ShadowUF:RegisterModule(AltPower, "altPowerBar", ShadowUF.L["Alt. Power bar"], true)
|
|
|
|
function AltPower:OnEnable(frame)
|
|
frame.altPowerBar = frame.altPowerBar or ShadowUF.Units:CreateBar(frame)
|
|
|
|
frame:RegisterUnitEvent("UNIT_POWER_BAR_SHOW", self, "UpdateVisibility")
|
|
frame:RegisterUnitEvent("UNIT_POWER_BAR_HIDE", self, "UpdateVisibility")
|
|
frame:RegisterNormalEvent("PLAYER_ENTERING_WORLD", self, "UpdateVisibility")
|
|
|
|
frame:RegisterUpdateFunc(self, "UpdateVisibility")
|
|
end
|
|
|
|
function AltPower:OnDisable(frame)
|
|
frame:UnregisterAll(self)
|
|
end
|
|
|
|
local altColor = {}
|
|
function AltPower:UpdateVisibility(frame)
|
|
local barID = UnitPowerBarID(frame.unit) or 0
|
|
local barInfo = GetUnitPowerBarInfoByID(barID)
|
|
local visible = false
|
|
if( barInfo and barInfo.barType ) then
|
|
if( ( frame.unitType == "player" or frame.unitType == "pet" ) or not barInfo.hideFromOthers ) then
|
|
visible = true
|
|
elseif( barInfo.showOnRaid and ( UnitInRaid(frame.unit) or UnitInParty(frame.unit) ) ) then
|
|
visible = true
|
|
end
|
|
end
|
|
|
|
ShadowUF.Layout:SetBarVisibility(frame, "altPowerBar", visible)
|
|
|
|
-- Register or unregister events based on if it's visible
|
|
local type = visible and "RegisterUnitEvent" or "UnregisterSingleEvent"
|
|
frame[type](frame, "UNIT_POWER_FREQUENT", self, "Update")
|
|
frame[type](frame, "UNIT_MAXPOWER", self, "Update")
|
|
frame[type](frame, "UNIT_DISPLAYPOWER", self, "Update")
|
|
if( not visible ) then return end
|
|
|
|
local color = ShadowUF.db.profile.powerColors.ALTERNATE
|
|
frame:SetBarColor("altPowerBar", color.r, color.g, color.b)
|
|
|
|
AltPower:Update(frame)
|
|
end
|
|
|
|
function AltPower:Update(frame, event, unit, type)
|
|
if( event and type ~= "ALTERNATE" ) then return end
|
|
local barID = UnitPowerBarID(frame.unit) or 0
|
|
local barInfo = GetUnitPowerBarInfoByID(barID)
|
|
local minPower = barInfo and barInfo.minPower or 0
|
|
|
|
frame.altPowerBar:SetMinMaxValues(minPower, UnitPowerMax(frame.unit, ALTERNATE_POWER_INDEX) or 0)
|
|
frame.altPowerBar:SetValue(UnitPower(frame.unit, ALTERNATE_POWER_INDEX) or 0)
|
|
end
|
|
|