if select(6, GetAddOnInfo("PitBull4_" .. (debugstack():match("[o%.][d%.][u%.]les\\(.-)\\") or ""))) ~= "MISSING" then return end if select(2, UnitClass("player")) ~= "HUNTER" then return end local PitBull4 = _G.PitBull4 if not PitBull4 then error("PitBull4_HappinessIcon requires PitBull4") end local L = PitBull4.L local cata_400 = select(4,GetBuildInfo()) >= 40000 local PitBull4_HappinessIcon = PitBull4:NewModule("HappinessIcon", "AceEvent-3.0") PitBull4_HappinessIcon:SetModuleType("indicator") PitBull4_HappinessIcon:SetName(L["Happiness icon"]) PitBull4_HappinessIcon:SetDescription(L["Show an icon on the pet frame to indicate its happiness."]) PitBull4_HappinessIcon:SetDefaults({ attach_to = "root", location = "edge_bottom_right", position = 1, size = 1.2, tooltip = true, }) function PitBull4_HappinessIcon:OnEnable() if cata_400 then self:RegisterEvent("UNIT_POWER") else self:RegisterEvent("UNIT_HAPPINESS","UNIT_POWER") end end function PitBull4_HappinessIcon:GetTexture(frame) if frame.unit ~= "pet" then return nil end local happiness = GetPetHappiness() if not happiness then return nil end return [[Interface\PetPaperDollFrame\UI-PetHappiness]] end function PitBull4_HappinessIcon:GetExampleTexture(frame) if frame.unit ~= "pet" then return nil end return [[Interface\PetPaperDollFrame\UI-PetHappiness]] end local tex_coords = { -- unhappy {0.375, 0.5625, 0, 0.359375}, -- content {0.1875, 0.375, 0, 0.359375}, -- happy {0, 0.1875, 0, 0.359375}, } function PitBull4_HappinessIcon:GetTexCoord(frame, texture) local happiness = GetPetHappiness() local tex_coord = tex_coords[happiness] or tex_coords[3] return tex_coord[1], tex_coord[2], tex_coord[3], tex_coord[4] end function PitBull4_HappinessIcon:GetExampleTexCoord() local tex_coord = tex_coords[3] -- happy return tex_coord[1], tex_coord[2], tex_coord[3], tex_coord[4] end function PitBull4_HappinessIcon:UNIT_POWER(event, unit, power_type) if event == "UNIT_POWER" and power_type ~= "HAPPINESS" then return end self:UpdateForUnitID("pet") end function PitBull4_HappinessIcon:GetEnableMouse(frame) return self:GetLayoutDB(frame).tooltip end function PitBull4_HappinessIcon.OnEnter(icon, motion) local happiness, damage_percentage = GetPetHappiness() if happiness then GameTooltip:SetOwner(icon, "ANCHOR_RIGHT") GameTooltip:SetText(_G["PET_HAPPINESS"..happiness]) if damage_percentage then GameTooltip:AddLine(format(PET_DAMAGE_PERCENTAGE, damage_percentage), "", 1, 1, 1) end GameTooltip:Show() end end function PitBull4_HappinessIcon.OnLeave(icon, motion) if GameTooltip:GetOwner() == icon then GameTooltip:Hide() end end PitBull4_HappinessIcon:SetLayoutOptionsFunction(function(self) return 'tooltip', { type = 'toggle', name = L["Tooltip"], desc = L["Show a tooltip on mouseover with the happiness and damage percent for the pet."], get = function(info) return PitBull4.Options.GetLayoutDB(self).tooltip end, set = function(info, value) PitBull4.Options.GetLayoutDB(self).tooltip = value for frame in PitBull4:IterateFramesForUnitID("pet") do self:Clear(frame) self:Update(frame) end end } end)