local E, L, V, P, G = unpack(ElvUI) local UF = E:GetModule("UnitFrames") --Lua functions --WoW API / Variables function UF:Construct_Happiness(frame) local HappinessIndicator = CreateFrame("Statusbar", nil, frame) HappinessIndicator.backdrop = CreateFrame("Frame", nil, HappinessIndicator) UF.statusbars[HappinessIndicator] = true HappinessIndicator.backdrop:SetTemplate("Default", nil, nil, self.thinBorders, true) HappinessIndicator.backdrop:SetFrameLevel(HappinessIndicator:GetFrameLevel() - 1) HappinessIndicator:SetInside(HappinessIndicator.backdrop) HappinessIndicator:SetOrientation("VERTICAL") HappinessIndicator:SetMinMaxValues(0, 100) HappinessIndicator:SetFrameLevel(50) HappinessIndicator.bg = HappinessIndicator:CreateTexture(nil, "BORDER") HappinessIndicator.bg:SetAllPoints(HappinessIndicator) HappinessIndicator.bg:SetTexture(E.media.blankTex) HappinessIndicator.bg.multiplier = 0.3 HappinessIndicator.Override = UF.HappinessOverride return HappinessIndicator end function UF:Configure_Happiness(frame) if not frame.VARIABLES_SET then return end local HappinessIndicator = frame.HappinessIndicator local db = frame.db frame.HAPPINESS_WIDTH = HappinessIndicator and frame.HAPPINESS_SHOWN and (db.happiness.width + (frame.BORDER*3)) or 0 if db.happiness.enable then if not frame:IsElementEnabled("HappinessIndicator") then frame:EnableElement("HappinessIndicator") end HappinessIndicator.backdrop:ClearAllPoints() if db.power.enable and not frame.USE_MINI_POWERBAR and not frame.USE_INSET_POWERBAR and not frame.POWERBAR_DETACHED and not frame.USE_POWERBAR_OFFSET then if frame.ORIENTATION == "RIGHT" then HappinessIndicator.backdrop:Point("BOTTOMRIGHT", frame.Power, "BOTTOMLEFT", -frame.BORDER + (frame.BORDER - frame.SPACING*3), -frame.BORDER) HappinessIndicator.backdrop:Point("TOPLEFT", frame.Health, "TOPLEFT", -frame.HAPPINESS_WIDTH, frame.BORDER) else HappinessIndicator.backdrop:Point("BOTTOMLEFT", frame.Power, "BOTTOMRIGHT", frame.BORDER + (-frame.BORDER + frame.SPACING*3), -frame.BORDER) HappinessIndicator.backdrop:Point("TOPRIGHT", frame.Health, "TOPRIGHT", frame.HAPPINESS_WIDTH, frame.BORDER) end else if frame.ORIENTATION == "RIGHT" then HappinessIndicator.backdrop:Point("BOTTOMRIGHT", frame.Health, "BOTTOMLEFT", -frame.BORDER + (frame.BORDER - frame.SPACING*3), -frame.BORDER) HappinessIndicator.backdrop:Point("TOPLEFT", frame.Health, "TOPLEFT", -frame.HAPPINESS_WIDTH, frame.BORDER) else HappinessIndicator.backdrop:Point("BOTTOMLEFT", frame.Health, "BOTTOMRIGHT", frame.BORDER + (-frame.BORDER + frame.SPACING*3), -frame.BORDER) HappinessIndicator.backdrop:Point("TOPRIGHT", frame.Health, "TOPRIGHT", frame.HAPPINESS_WIDTH, frame.BORDER) end end else if frame:IsElementEnabled("HappinessIndicator") then frame:DisableElement("HappinessIndicator") end end end function UF:HappinessOverride(event, unit) if unit and self.isNamePlate and unit:sub(1, 9) ~= "nameplate" then local isUnit = self.unit and UnitIsUnit(self.unit, unit) if isUnit then unit = self.unit end end if not unit or self.unit ~= unit then return end local db = self.db if not db then return end local element = self.HappinessIndicator if element.PreUpdate then element:PreUpdate() end local _, hunterPet = HasPetUI() local happiness, damagePercentage = GetPetHappiness() local value, r, g, b if hunterPet and happiness then if damagePercentage == 75 then value = 33 r, g, b = 0.8, 0.2, 0.1 elseif damagePercentage == 100 then value = 66 r, g, b = 1, 1, 0 elseif damagePercentage == 125 then value = 100 r, g, b = 0, 0.8, 0 end element:SetValue(value) element:SetStatusBarColor(r, g, b) element.bg:SetVertexColor(r, g, b, 0.15) if damagePercentage == 125 and db.happiness.autoHide then element:Hide() else element:Show() end else return element:Hide() end local isShown = element:IsShown() local stateChanged if (self.HAPPINESS_SHOWN and not isShown) or (not self.HAPPINESS_SHOWN and isShown) then stateChanged = true end self.HAPPINESS_SHOWN = isShown if stateChanged then UF:Configure_Happiness(self) UF:Configure_HealthBar(self) UF:Configure_Power(self) UF:Configure_InfoPanel(self, true) end if element.PostUpdate then return element:PostUpdate(unit, happiness, damagePercentage) end end