ElvUI/Modules/Nameplates/Elements/Auras.lua

165 lines
4.7 KiB
Lua
Raw Permalink Normal View History

2020-11-13 14:27:50 -05:00
local E, L, V, P, G = unpack(select(2, ...)); --Import: Engine, Locales, PrivateDB, ProfileDB, GlobalDB
local NP = E:GetModule('NamePlates')
local UF = E:GetModule('UnitFrames')
local LSM = E.Libs.LSM
local _G = _G
local floor = floor
local unpack = unpack
local CreateFrame = CreateFrame
function NP:Construct_Auras(nameplate)
local frameName = nameplate:GetName()
local Buffs = CreateFrame('Frame', frameName..'Buffs', nameplate)
Buffs:SetFrameStrata(nameplate:GetFrameStrata())
Buffs:SetFrameLevel(5)
Buffs:Size(300, 27)
Buffs.disableMouse = true
Buffs.size = 27
Buffs.num = 4
Buffs.spacing = E.Border * 2
Buffs.onlyShowPlayer = false
Buffs.initialAnchor = 'BOTTOMLEFT'
Buffs['growth-x'] = 'RIGHT'
Buffs['growth-y'] = 'UP'
Buffs.type = 'buffs'
Buffs.forceShow = nameplate == _G.ElvNP_Test
local Debuffs = CreateFrame('Frame', frameName..'Debuffs', nameplate)
Debuffs:SetFrameStrata(nameplate:GetFrameStrata())
Debuffs:SetFrameLevel(5)
Debuffs:Size(300, 27)
Debuffs.disableMouse = true
Debuffs.size = 27
Debuffs.num = 4
Debuffs.spacing = E.Border * 2
Debuffs.onlyShowPlayer = false
Debuffs.initialAnchor = 'BOTTOMLEFT'
Debuffs['growth-x'] = 'RIGHT'
Debuffs['growth-y'] = 'UP'
Debuffs.type = 'debuffs'
Debuffs.forceShow = nameplate == _G.ElvNP_Test
Buffs.PostCreateIcon = NP.Construct_AuraIcon
Buffs.PostUpdateIcon = UF.PostUpdateAura
Buffs.CustomFilter = UF.AuraFilter
Debuffs.PostCreateIcon = NP.Construct_AuraIcon
Debuffs.PostUpdateIcon = UF.PostUpdateAura
Debuffs.CustomFilter = UF.AuraFilter
nameplate.Buffs_, nameplate.Debuffs_ = Buffs, Debuffs
nameplate.Buffs, nameplate.Debuffs = Buffs, Debuffs
end
function NP:Construct_AuraIcon(button)
if not button then return end
button:SetTemplate(nil, nil, nil, nil, nil, true)
button.cd:SetReverse(true)
button.cd:SetInside(button)
button.icon:SetDrawLayer('ARTWORK')
button.icon:SetInside()
button.count:ClearAllPoints()
button.count:Point('BOTTOMRIGHT', 1, 1)
button.count:SetJustifyH('RIGHT')
button.overlay:SetTexture()
button.stealable:SetTexture()
button.cd.CooldownOverride = 'nameplates'
E:RegisterCooldown(button.cd)
local auras = button:GetParent()
button.db = auras and NP.db.units and NP.db.units[auras.__owner.frameType] and NP.db.units[auras.__owner.frameType][auras.type]
NP:UpdateAuraSettings(button)
end
function NP:Configure_Auras(nameplate, auras, db)
auras.size = db.size
auras.num = db.numAuras
auras.onlyShowPlayer = false
auras.spacing = db.spacing
auras['growth-y'] = db.growthY
auras['growth-x'] = db.growthX
auras.initialAnchor = E.InversePoints[db.anchorPoint]
local index = 1
while auras[index] do
local button = auras[index]
if button then
button.db = db
NP:UpdateAuraSettings(button)
end
index = index + 1
end
local mult = floor((nameplate.width or 150) / db.size) < db.numAuras
auras:Size((nameplate.width or 150), (mult and 1 or 2) * db.size)
auras:ClearAllPoints()
auras:Point(E.InversePoints[db.anchorPoint] or 'TOPRIGHT', db.attachTo == 'BUFFS' and nameplate.Buffs or nameplate, db.anchorPoint or 'TOPRIGHT', db.xOffset, db.yOffset)
end
function NP:Update_Auras(nameplate)
local db = NP:PlateDB(nameplate)
if db.debuffs.enable or db.buffs.enable then
nameplate:SetAuraUpdateMethod(E.global.nameplate.effectiveAura)
nameplate:SetAuraUpdateSpeed(E.global.nameplate.effectiveAuraSpeed)
if not nameplate:IsElementEnabled('Auras') then
nameplate:EnableElement('Auras')
end
if db.debuffs.enable then
nameplate.Debuffs = nameplate.Debuffs_
NP:Configure_Auras(nameplate, nameplate.Debuffs, db.debuffs)
nameplate.Debuffs:Show()
nameplate.Debuffs:ForceUpdate()
elseif nameplate.Debuffs then
nameplate.Debuffs:Hide()
nameplate.Debuffs = nil
end
if db.buffs.enable then
nameplate.Buffs = nameplate.Buffs_
NP:Configure_Auras(nameplate, nameplate.Buffs, db.buffs)
nameplate.Buffs:Show()
nameplate.Buffs:ForceUpdate()
elseif nameplate.Buffs then
nameplate.Buffs:Hide()
nameplate.Buffs = nil
end
elseif nameplate:IsElementEnabled('Auras') then
nameplate:DisableElement('Auras')
end
end
function NP:UpdateAuraSettings(button)
if button.db then
button.count:FontTemplate(LSM:Fetch('font', button.db.countFont), button.db.countFontSize, button.db.countFontOutline)
button.count:ClearAllPoints()
local point = (button.db and button.db.countPosition) or 'CENTER'
if point == 'CENTER' then
button.count:Point(point, 1, 0)
else
local bottom, right = point:find('BOTTOM'), point:find('RIGHT')
button.count:SetJustifyH(right and 'RIGHT' or 'LEFT')
button.count:Point(point, right and -1 or 1, bottom and 1 or -1)
end
end
if button.icon then
button.icon:SetTexCoord(unpack(E.TexCoords))
end
button:Size((button.db and button.db.size) or 26)
button.needsUpdateCooldownPosition = true
end