Files
coa-elvui/ElvUI/Libraries/oUF_Plugins/oUF_DebuffHighlight/oUF_DebuffHighlight.lua
T
2024-04-19 09:05:57 -07:00

89 lines
2.5 KiB
Lua

local _, ns = ...
local oUF = oUF or ns.oUF
if not oUF then return end
local UnitAura = UnitAura
local UnitCanAssist = UnitCanAssist
local function GetDebuffType(unit, filterTable)
if not unit or not UnitCanAssist("player", unit) then return nil end
local i = 1
while true do
local name, _, texture, _, debufftype, _, _, _, _, _, spellID = UnitAura(unit, i, "HARMFUL")
if not texture then break end
local filterSpell = filterTable[spellID] or filterTable[name]
if filterTable and filterSpell and filterSpell.enable then
return debufftype, texture, true, filterSpell.style, filterSpell.color
elseif debufftype then
return debufftype, texture
end
i = i + 1
end
end
local function Update(object, event, unit)
if unit ~= object.unit then return end
local debuffType, texture, wasFiltered, style, color = GetDebuffType(unit, object.DebuffHighlightFilterTable)
if wasFiltered then
if style == "GLOW" and object.DBHGlow then
object.DBHGlow:Show()
object.DBHGlow:SetBackdropBorderColor(color.r, color.g, color.b)
elseif object.DBHGlow then
object.DBHGlow:Hide()
object.DebuffHighlight:SetVertexColor(color.r, color.g, color.b, color.a or object.DebuffHighlightAlpha or .5)
end
elseif debuffType then
color = DebuffTypeColor[debuffType]
if object.DebuffHighlightBackdrop and object.DBHGlow then
object.DBHGlow:Show()
object.DBHGlow:SetBackdropBorderColor(color.r, color.g, color.b)
elseif object.DebuffHighlightUseTexture then
object.DebuffHighlight:SetTexture(texture)
else
object.DebuffHighlight:SetVertexColor(color.r, color.g, color.b, object.DebuffHighlightAlpha or .5)
end
else
if object.DBHGlow then
object.DBHGlow:Hide()
end
if object.DebuffHighlightUseTexture then
object.DebuffHighlight:SetTexture(nil)
else
object.DebuffHighlight:SetVertexColor(0, 0, 0, 0)
end
end
if object.DebuffHighlight.PostUpdate then
object.DebuffHighlight:PostUpdate(object, debuffType, texture, wasFiltered, style, color)
end
end
local function Enable(object)
-- if we're not highlighting this unit return
if not object.DebuffHighlightBackdrop and not object.DebuffHighlight and not object.DBHGlow then
return
end
-- make sure aura scanning is active for this object
object:RegisterEvent("UNIT_AURA", Update)
return true
end
local function Disable(object)
object:UnregisterEvent("UNIT_AURA", Update)
if object.DBHGlow then
object.DBHGlow:Hide()
end
end
oUF:AddElement("DebuffHighlight", Update, Enable, Disable)