mirror of
https://github.com/brues-code/pfUI.git
synced 2026-10-04 04:30:01 +00:00
nameplates: increase nameplate render performance
increase renderer performance by not creating all debuff slots on each nameplate on creation, but rather only build those who are really needed on the fly. This heavily reduces the overall frame- and cooldown anmiation count in most scenarios.
This commit is contained in:
+64
-44
@@ -168,6 +168,58 @@ pfUI:RegisterModule("nameplates", "vanilla:tbc", function ()
|
||||
return c.effect, c.rank, c.texture, c.stacks, c.dtype, c.duration, (c.stop - GetTime())
|
||||
end
|
||||
|
||||
local function CreateDebuffIcon(plate, index)
|
||||
plate.debuffs[index] = CreateFrame("Frame", plate.platename.."Debuff"..index, plate)
|
||||
plate.debuffs[index]:Hide()
|
||||
plate.debuffs[index]:SetFrameLevel(1)
|
||||
|
||||
plate.debuffs[index].icon = plate.debuffs[index]:CreateTexture(nil, "BACKGROUND")
|
||||
plate.debuffs[index].icon:SetTexture(.3,1,.8,1)
|
||||
plate.debuffs[index].icon:SetAllPoints(plate.debuffs[index])
|
||||
|
||||
plate.debuffs[index].stacks = plate.debuffs[index]:CreateFontString(nil, "OVERLAY")
|
||||
plate.debuffs[index].stacks:SetAllPoints(plate.debuffs[index])
|
||||
plate.debuffs[index].stacks:SetJustifyH("RIGHT")
|
||||
plate.debuffs[index].stacks:SetJustifyV("BOTTOM")
|
||||
plate.debuffs[index].stacks:SetTextColor(1,1,0)
|
||||
|
||||
plate.debuffs[index].cd = CreateFrame(COOLDOWN_FRAME_TYPE, plate.platename.."Debuff"..index.."Cooldown", plate.debuffs[index], "CooldownFrameTemplate")
|
||||
plate.debuffs[index].cd.pfCooldownStyleAnimation = 0
|
||||
plate.debuffs[index].cd.pfCooldownType = "ALL"
|
||||
end
|
||||
|
||||
local function UpdateDebuffConfig(nameplate, i)
|
||||
if not nameplate.debuffs[i] then return end
|
||||
|
||||
-- update debuff positions
|
||||
local width = tonumber(C.nameplates.width)
|
||||
local debuffsize = tonumber(C.nameplates.debuffsize)
|
||||
local limit = floor(width / debuffsize)
|
||||
local font = C.nameplates.use_unitfonts == "1" and pfUI.font_unit or pfUI.font_default
|
||||
local font_size = C.nameplates.use_unitfonts == "1" and C.global.font_unit_size or C.global.font_size
|
||||
local font_style = C.nameplates.name.fontstyle
|
||||
|
||||
local aligna, alignb, offs, space
|
||||
if C.nameplates.debuffs["position"] == "BOTTOM" then
|
||||
aligna, alignb, offs, space = "TOPLEFT", "BOTTOMLEFT", -4, -1
|
||||
else
|
||||
aligna, alignb, offs, space = "BOTTOMLEFT", "TOPLEFT", 20, 1
|
||||
end
|
||||
|
||||
nameplate.debuffs[i].stacks:SetFont(font, font_size, font_style)
|
||||
nameplate.debuffs[i]:ClearAllPoints()
|
||||
if i == 1 then
|
||||
nameplate.debuffs[i]:SetPoint(aligna, nameplate.health, alignb, 0, offs)
|
||||
elseif i <= limit then
|
||||
nameplate.debuffs[i]:SetPoint("LEFT", nameplate.debuffs[i-1], "RIGHT", 1, 0)
|
||||
elseif i > limit and limit > 0 then
|
||||
nameplate.debuffs[i]:SetPoint(aligna, nameplate.debuffs[i-limit], alignb, 0, space)
|
||||
end
|
||||
|
||||
nameplate.debuffs[i]:SetWidth(tonumber(C.nameplates.debuffsize))
|
||||
nameplate.debuffs[i]:SetHeight(tonumber(C.nameplates.debuffsize))
|
||||
end
|
||||
|
||||
-- create nameplate core
|
||||
local nameplates = CreateFrame("Frame", "pfNameplates", UIParent)
|
||||
nameplates:RegisterEvent("PLAYER_ENTERING_WORLD")
|
||||
@@ -212,6 +264,7 @@ pfUI:RegisterModule("nameplates", "vanilla:tbc", function ()
|
||||
|
||||
-- create pfUI nameplate overlay
|
||||
local nameplate = CreateFrame("Button", platename, parent)
|
||||
nameplate.platename = platename
|
||||
nameplate:EnableMouse(0)
|
||||
nameplate.parent = parent
|
||||
nameplate.cache = {}
|
||||
@@ -271,27 +324,8 @@ pfUI:RegisterModule("nameplates", "vanilla:tbc", function ()
|
||||
CreateBackdrop(nameplate.totem)
|
||||
|
||||
do -- debuffs
|
||||
local debuffs = {}
|
||||
for i=1, 16, 1 do
|
||||
debuffs[i] = CreateFrame("Frame", platename.."Debuff"..i, nameplate)
|
||||
debuffs[i]:Hide()
|
||||
debuffs[i]:SetFrameLevel(1)
|
||||
|
||||
debuffs[i].icon = debuffs[i]:CreateTexture(nil, "BACKGROUND")
|
||||
debuffs[i].icon:SetTexture(.3,1,.8,1)
|
||||
debuffs[i].icon:SetAllPoints(debuffs[i])
|
||||
|
||||
debuffs[i].stacks = debuffs[i]:CreateFontString(nil, "OVERLAY")
|
||||
debuffs[i].stacks:SetAllPoints(debuffs[i])
|
||||
debuffs[i].stacks:SetJustifyH("RIGHT")
|
||||
debuffs[i].stacks:SetJustifyV("BOTTOM")
|
||||
debuffs[i].stacks:SetTextColor(1,1,0)
|
||||
|
||||
debuffs[i].cd = CreateFrame(COOLDOWN_FRAME_TYPE, platename.."Debuff"..i.."Cooldown", debuffs[i], "CooldownFrameTemplate")
|
||||
debuffs[i].cd.pfCooldownStyleAnimation = 0
|
||||
debuffs[i].cd.pfCooldownType = "ALL"
|
||||
end
|
||||
nameplate.debuffs = debuffs
|
||||
nameplate.debuffs = {}
|
||||
CreateDebuffIcon(nameplate, 1)
|
||||
end
|
||||
|
||||
do -- combopoints
|
||||
@@ -409,29 +443,8 @@ pfUI:RegisterModule("nameplates", "vanilla:tbc", function ()
|
||||
nameplate.raidicon:SetWidth(C.nameplates.raidiconsize)
|
||||
nameplate.raidicon:SetHeight(C.nameplates.raidiconsize)
|
||||
|
||||
-- update debuff positions
|
||||
local limit = floor(width / debuffsize)
|
||||
|
||||
local aligna, alignb, offs, space
|
||||
if C.nameplates.debuffs["position"] == "BOTTOM" then
|
||||
aligna, alignb, offs, space = "TOPLEFT", "BOTTOMLEFT", -4, -1
|
||||
else
|
||||
aligna, alignb, offs, space = "BOTTOMLEFT", "TOPLEFT", 20, 1
|
||||
end
|
||||
|
||||
for i=1,16 do
|
||||
nameplate.debuffs[i].stacks:SetFont(font, font_size, font_style)
|
||||
nameplate.debuffs[i]:ClearAllPoints()
|
||||
if i == 1 then
|
||||
nameplate.debuffs[i]:SetPoint(aligna, nameplate.health, alignb, 0, offs)
|
||||
elseif i <= limit then
|
||||
nameplate.debuffs[i]:SetPoint("LEFT", nameplate.debuffs[i-1], "RIGHT", 1, 0)
|
||||
elseif i > limit and limit > 0 then
|
||||
nameplate.debuffs[i]:SetPoint(aligna, nameplate.debuffs[i-limit], alignb, 0, space)
|
||||
end
|
||||
|
||||
nameplate.debuffs[i]:SetWidth(tonumber(C.nameplates.debuffsize))
|
||||
nameplate.debuffs[i]:SetHeight(tonumber(C.nameplates.debuffsize))
|
||||
UpdateDebuffConfig(nameplate, i)
|
||||
end
|
||||
|
||||
for i=1,5 do
|
||||
@@ -648,6 +661,11 @@ pfUI:RegisterModule("nameplates", "vanilla:tbc", function ()
|
||||
end
|
||||
|
||||
if effect and texture and DebuffFilter(effect) then
|
||||
if not plate.debuffs[index] then
|
||||
CreateDebuffIcon(plate, index)
|
||||
UpdateDebuffConfig(plate, index)
|
||||
end
|
||||
|
||||
plate.debuffs[index]:Show()
|
||||
plate.debuffs[index].icon:SetTexture(texture)
|
||||
plate.debuffs[index].icon:SetTexCoord(.078, .92, .079, .937)
|
||||
@@ -672,7 +690,9 @@ pfUI:RegisterModule("nameplates", "vanilla:tbc", function ()
|
||||
|
||||
-- hide remaining debuffs
|
||||
for i = index, 16 do
|
||||
plate.debuffs[i]:Hide()
|
||||
if plate.debuffs[i] then
|
||||
plate.debuffs[i]:Hide()
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
Reference in New Issue
Block a user