local parent, ns = ... local oUF = ns.oUF local ALTERNATE_POWER_INDEX = ALTERNATE_POWER_INDEX local UpdatePower = function(self, event, unit, powerType) if(self.unit ~= unit or powerType ~= 'ALTERNATE') or not unit then return end local altpowerbar = self.AltPowerBar if(altpowerbar.PreUpdate) then altpowerbar:PreUpdate() end local barType, min = UnitAlternatePowerInfo(unit) local cur = UnitPower(unit, ALTERNATE_POWER_INDEX) local max = UnitPowerMax(unit, ALTERNATE_POWER_INDEX) altpowerbar.barType = barType altpowerbar:SetMinMaxValues(min, max) altpowerbar:SetValue(cur) if(altpowerbar.PostUpdate) then return altpowerbar:PostUpdate(min, cur, max) end end local ForceUpdate = function(element) return UpdatePower(element.__owner, 'ForceUpdate', element.__owner.unit, 'ALTERNATE') end local Toggler = function(self, event, unit) if(unit ~= self.unit) or not unit then return end local altpowerbar = self.AltPowerBar local barType, minPower, _, _, _, hideFromOthers = UnitAlternatePowerInfo(unit) if(barType and (not hideFromOthers or unit == 'player' or self.realUnit == 'player')) then self:RegisterEvent('UNIT_POWER', UpdatePower) self:RegisterEvent('UNIT_MAXPOWER', UpdatePower) ForceUpdate(altpowerbar) altpowerbar:Show() else self:UnregisterEvent('UNIT_POWER', UpdatePower) self:UnregisterEvent('UNIT_MAXPOWER', UpdatePower) altpowerbar:Hide() end end local Enable = function(self, unit) local altpowerbar = self.AltPowerBar if(altpowerbar) then altpowerbar.__owner = self altpowerbar.ForceUpdate = ForceUpdate self:RegisterEvent('UNIT_POWER_BAR_SHOW', Toggler) self:RegisterEvent('UNIT_POWER_BAR_HIDE', Toggler) altpowerbar:Hide() if(unit == 'player') then PlayerPowerBarAlt:UnregisterEvent'UNIT_POWER_BAR_SHOW' PlayerPowerBarAlt:UnregisterEvent'UNIT_POWER_BAR_HIDE' PlayerPowerBarAlt:UnregisterEvent'PLAYER_ENTERING_WORLD' end return true end end local Disable = function(self, unit) local altpowerbar = self.AltPowerBar if(altpowerbar) then self:UnregisterEvent('UNIT_POWER_BAR_SHOW', Toggler) self:UnregisterEvent('UNIT_POWER_BAR_HIDE', Toggler) if(unit == 'player') then PlayerPowerBarAlt:RegisterEvent'UNIT_POWER_BAR_SHOW' PlayerPowerBarAlt:RegisterEvent'UNIT_POWER_BAR_HIDE' PlayerPowerBarAlt:RegisterEvent'PLAYER_ENTERING_WORLD' end end end oUF:AddElement('AltPowerBar', Toggler, Enable, Disable)