if select(6, GetAddOnInfo("PitBull4_" .. (debugstack():match("[o%.][d%.][u%.]les\\(.-)\\") or ""))) ~= "MISSING" then return end local PitBull4 = _G.PitBull4 if not PitBull4 then error("PitBull4_ThreatBar requires PitBull4") end local EXAMPLE_VALUE = 0.5 local L = PitBull4.L local PitBull4_ThreatBar = PitBull4:NewModule("ThreatBar", "AceEvent-3.0") PitBull4_ThreatBar:SetModuleType("bar") PitBull4_ThreatBar:SetName(L["Threat bar"]) PitBull4_ThreatBar:SetDescription(L["Show a threat bar."]) PitBull4_ThreatBar:SetDefaults({ size = 1, position = 5, }) function PitBull4_ThreatBar:OnEnable() self:RegisterEvent("PLAYER_TARGET_CHANGED") self:RegisterEvent("UNIT_THREAT_LIST_UPDATE") self:RegisterEvent("UNIT_THREAT_SITUATION_UPDATE") self:RegisterEvent("PARTY_MEMBERS_CHANGED") self:RegisterEvent("RAID_ROSTER_UPDATE") self:RegisterEvent("PLAYER_PET_CHANGED") self:PARTY_MEMBERS_CHANGED() end local player_in_group = false local ACCEPTABLE_CLASSIFICATIONS = { player = true, pet = true, party = true, raid = true, partypet = true, raidpet = true, } function PitBull4_ThreatBar:PARTY_MEMBERS_CHANGED() player_in_group = UnitExists("pet") or GetNumPartyMembers() > 0 or GetNumRaidMembers() > 0 for classification in pairs(ACCEPTABLE_CLASSIFICATIONS) do self:UpdateForClassification(classification) end end PitBull4_ThreatBar.RAID_ROSTER_UPDATE = PitBull4_ThreatBar.PARTY_MEMBERS_CHANGED PitBull4_ThreatBar.PLAYER_PET_CHANGED = PitBull4_ThreatBar.PARTY_MEMBERS_CHANGED function PitBull4_ThreatBar:GetValue(frame) if not ACCEPTABLE_CLASSIFICATIONS[frame.classification] or not player_in_group then return nil end local unit = frame.unit local _,_,threatpct = UnitDetailedThreatSituation(unit, "target") if not threatpct then return nil end return threatpct / 100 end function PitBull4_ThreatBar:GetExampleValue(frame) if frame and not ACCEPTABLE_CLASSIFICATIONS[frame.classification] then return nil end return EXAMPLE_VALUE end function PitBull4_ThreatBar:GetColor(frame, value) local status if frame.guid then local _ _, status = UnitDetailedThreatSituation(frame.unit, "target") else status = 0 end return GetThreatStatusColor(status) end function PitBull4_ThreatBar:GetExampleColor(frame, value) return GetThreatStatusColor(0) end function PitBull4_ThreatBar:PLAYER_TARGET_CHANGED() self:UpdateAll() end PitBull4_ThreatBar.UNIT_THREAT_LIST_UPDATE = PitBull4_ThreatBar.PLAYER_TARGET_CHANGED PitBull4_ThreatBar.UNIT_THREAT_SITUATION_UPDATE = PitBull4_ThreatBar.PLAYER_TARGET_CHANGED