local Azurah = _G['Azurah'] -- grab addon table from global local LMP = LibStub('LibMediaProvider-1.0') -- UPVALUES -- local POWERTYPE_HEALTH = POWERTYPE_HEALTH local POWERTYPE_MAGICKA = POWERTYPE_MAGICKA local POWERTYPE_STAMINA = POWERTYPE_STAMINA local strformat = string.format local overlayHealth, overlayMagicka, overlayStamina local FormatHealth, FormatMagicka, FormatStamina local origExpanded, origShrunk local db local function OnPowerUpdate(_, unit, _, powerType, powerValue, powerMax, powerEffMax) if (unit ~= 'player') then return end -- only care about the player if (powerType == POWERTYPE_HEALTH) then overlayHealth:SetText(FormatHealth(powerValue, powerMax, powerEffMax)) elseif (powerType == POWERTYPE_MAGICKA) then overlayMagicka:SetText(FormatMagicka(powerValue, powerMax, powerEffMax)) elseif (powerType == POWERTYPE_STAMINA) then overlayStamina:SetText(FormatStamina(powerValue, powerMax, powerEffMax)) end end function Azurah:ConfigureAttributeOverlays() if (db.healthOverlay > 1 or db.magickaOverlay > 1 or db.staminaOverlay > 1) then -- showing at least one overlay, enable tracking EVENT_MANAGER:RegisterForEvent(self.name .. 'Attributes', EVENT_POWER_UPDATE, OnPowerUpdate) else -- no overlays being shown, disable tracking EVENT_MANAGER:UnregisterForEvent(self.name .. 'Attributes', EVENT_POWER_UPDATE) end local fontStr, value, max, maxEff -- configure health overlay if (db.healthOverlay > 1) then fontStr = strformat('%s|%d|%s', LMP:Fetch('font', db.healthFontFace), db.healthFontSize, db.healthFontOutline) overlayHealth:SetFont(fontStr) overlayHealth:SetColor(db.healthFontColour.r, db.healthFontColour.g, db.healthFontColour.b, db.healthFontColour.a) overlayHealth:SetHidden(false) FormatHealth = self.overlayFuncs[db.healthOverlay + ((db.healthOverlayFancy) and 10 or 0)] value, max, maxEff = GetUnitPower('player', POWERTYPE_HEALTH) overlayHealth:SetText(FormatHealth(value, max, maxEff)) else -- not showing overlayHealth:SetHidden(true) end -- configure magicka overlay if (db.magickaOverlay > 1) then fontStr = strformat('%s|%d|%s', LMP:Fetch('font', db.magickaFontFace), db.magickaFontSize, db.magickaFontOutline) overlayMagicka:SetFont(fontStr) overlayMagicka:SetColor(db.magickaFontColour.r, db.magickaFontColour.g, db.magickaFontColour.b, db.magickaFontColour.a) overlayMagicka:SetHidden(false) FormatMagicka = self.overlayFuncs[db.magickaOverlay + ((db.magickaOverlayFancy) and 10 or 0)] value, max, maxEff = GetUnitPower('player', POWERTYPE_MAGICKA) overlayMagicka:SetText(FormatMagicka(value, max, maxEff)) else -- not showing overlayMagicka:SetHidden(true) end -- configure stamina overlay if (db.staminaOverlay > 1) then fontStr = strformat('%s|%d|%s', LMP:Fetch('font', db.staminaFontFace), db.staminaFontSize, db.staminaFontOutline) overlayStamina:SetFont(fontStr) overlayStamina:SetColor(db.staminaFontColour.r, db.staminaFontColour.g, db.staminaFontColour.b, db.staminaFontColour.a) overlayStamina:SetHidden(false) FormatStamina = self.overlayFuncs[db.staminaOverlay + ((db.staminaOverlayFancy) and 10 or 0)] value, max, maxEff = GetUnitPower('player', POWERTYPE_STAMINA) overlayStamina:SetText(FormatStamina(value, max, maxEff)) else -- not showing overlayStamina:SetHidden(true) end end function Azurah:ConfigureAttributeFade() local minH, minM, minS, maxH, maxM, maxS local curH, curM, curS, curMS, emaxH, emaxM, emaxS, emaxS, emaxMS local inCombat = IsUnitInCombat('player') and true or false curH, _, emaxH = GetUnitPower("player", POWERTYPE_HEALTH) curM, _, emaxM = GetUnitPower("player", POWERTYPE_MAGICKA) curS, _, emaxS = GetUnitPower("player", POWERTYPE_STAMINA) curMS, _, emaxMS = GetUnitPower("player", POWERTYPE_MOUNT_STAMINA) if (db.combatBars and inCombat) then minH = db.fadeMaxAlpha maxH = db.fadeMaxAlpha minM = db.fadeMaxAlpha maxM = db.fadeMaxAlpha minS = db.fadeMaxAlpha maxS = db.fadeMaxAlpha else minH = db.fadeMinAlpha maxH = db.fadeMaxAlpha minM = db.fadeMinAlpha maxM = db.fadeMaxAlpha minS = db.fadeMinAlpha maxS = db.fadeMaxAlpha end ZO_PlayerAttributeHealth.playerAttributeBarObject.timeline:GetAnimation():SetAlphaValues(minH, maxH) ZO_PlayerAttributeStamina.playerAttributeBarObject.timeline:GetAnimation():SetAlphaValues(minM, maxM) ZO_PlayerAttributeMagicka.playerAttributeBarObject.timeline:GetAnimation():SetAlphaValues(minS, maxS) ZO_PlayerAttributeMountStamina.playerAttributeBarObject.timeline:GetAnimation():SetAlphaValues(0, maxS) ZO_PlayerAttributeWerewolf.playerAttributeBarObject.timeline:GetAnimation():SetAlphaValues(0, maxM) ZO_PlayerAttributeSiegeHealth.playerAttributeBarObject.timeline:GetAnimation():SetAlphaValues(0, maxH) if (curH >= emaxH) then ZO_PlayerAttributeHealth:SetAlpha(minH) end if (curM >= emaxM) then ZO_PlayerAttributeMagicka:SetAlpha(minM) end if (curS >= emaxS and curMS >= emaxMS) then ZO_PlayerAttributeStamina:SetAlpha(minS) end end function Azurah:ConfigureAttributeSizeLock() for k, v in pairs(PLAYER_ATTRIBUTE_BARS.attributeVisualizer.visualModules) do if (v.expandedWidth) then -- this is the size changer if (not origExpanded) then -- haven't noted down defaults yet origExpanded, origShrunk = v.expandedWidth, v.shrunkWidth end if (db.lockSize) then -- locking attribute size v.expandedWidth, v.shrunkWidth = v.normalWidth, v.normalWidth -- fire off some 'fake' events to remove any active size alterations PLAYER_ATTRIBUTE_BARS.attributeVisualizer:OnUnitAttributeVisualRemoved('player', 1, 7, 100, -2,100,100) -- health PLAYER_ATTRIBUTE_BARS.attributeVisualizer:OnUnitAttributeVisualRemoved('player', 1, 4, 100, -2,100,100) -- magicka PLAYER_ATTRIBUTE_BARS.attributeVisualizer:OnUnitAttributeVisualRemoved('player', 1, 29, 100, -2,100,100) -- stamina else v.expandedWidth, v.shrunkWidth = origExpanded, origShrunk end end end end -- ------------------------ -- INITIALIZATION -- ------------------------ function Azurah:InitializePlayer() db = self.db.attributes -- create overlays overlayHealth = self:CreateOverlay(ZO_PlayerAttributeHealth, CENTER, CENTER, 0, 0) overlayMagicka = self:CreateOverlay(ZO_PlayerAttributeMagicka, CENTER, CENTER, 0, 0) overlayStamina = self:CreateOverlay(ZO_PlayerAttributeStamina, CENTER, CENTER, 0, 0) -- set 'dummy' display functions FormatHealth = self.overlayFuncs[1] FormatMagicka = self.overlayFuncs[1] FormatStamina = self.overlayFuncs[1] self:ConfigureAttributeFade() self:ConfigureAttributeSizeLock() end