mirror of
https://github.com/brues-code/pfUI.git
synced 2026-10-18 02:30:50 +00:00
buff/buffwatch: positional aura reads in hot refresh loops
buff.lua RefreshBuffButton runs 50x per PLAYER_AURAS_CHANGED and buffwatch.lua GetBuffData runs 32x per RefreshBuffBarFrame; both now use the zero-allocation positional C_UnitAuras.UnitAura instead of the table-allocating GetAuraDataByIndex. buffwatch also threads the aura's dispelType out of GetBuffData onto the frame.buffs row, so the debuff-bar colour reads it from the row instead of re-fetching the aura with GetDebuffDataByIndex on every name change. Cold single-lookups (hover/click tooltips) keep the readable table API.
This commit is contained in:
+7
-7
@@ -23,7 +23,7 @@ pfUI:RegisterModule("buff", function ()
|
|||||||
CreateBackdropShadow(buff)
|
CreateBackdropShadow(buff)
|
||||||
end
|
end
|
||||||
|
|
||||||
local aura = C_UnitAuras.GetAuraDataByIndex("player", buff.id, buff.btype)
|
local name, icon, count, dispelType, _, expirationTime, _, _, _, spellId = C_UnitAuras.UnitAura("player", buff.id, buff.btype)
|
||||||
|
|
||||||
--detect weapon buffs
|
--detect weapon buffs
|
||||||
if buff.btype == "HELPFUL" and ((C.buffs.separateweapons == "0" and buff.gid <= pfUI.buff.wepbuffs.count) or (pfUI.buff.wepbuffs.count > 0 and buff.weapon ~= nil)) then
|
if buff.btype == "HELPFUL" and ((C.buffs.separateweapons == "0" and buff.gid <= pfUI.buff.wepbuffs.count) or (pfUI.buff.wepbuffs.count > 0 and buff.weapon ~= nil)) then
|
||||||
@@ -55,16 +55,16 @@ pfUI:RegisterModule("buff", function ()
|
|||||||
buff.texture:SetTexture(GetInventoryItemTexture("player", 17))
|
buff.texture:SetTexture(GetInventoryItemTexture("player", 17))
|
||||||
buff.backdrop:SetBackdropBorderColor(GetItemQualityColor(GetInventoryItemQuality("player", 17) or 1))
|
buff.backdrop:SetBackdropBorderColor(GetItemQualityColor(GetInventoryItemQuality("player", 17) or 1))
|
||||||
end
|
end
|
||||||
elseif aura and (( buff.btype == "HARMFUL" and C.buffs.debuffs == "1" ) or ( buff.btype == "HELPFUL" and C.buffs.buffs == "1" )) then
|
elseif name and (( buff.btype == "HARMFUL" and C.buffs.debuffs == "1" ) or ( buff.btype == "HELPFUL" and C.buffs.buffs == "1" )) then
|
||||||
-- Set Buff Texture and Border
|
-- Set Buff Texture and Border
|
||||||
buff.mode = buff.btype
|
buff.mode = buff.btype
|
||||||
buff.expirationTime = aura.expirationTime
|
buff.expirationTime = expirationTime
|
||||||
buff.stackCount = aura.applications
|
buff.stackCount = count
|
||||||
buff.spellId = aura.spellId
|
buff.spellId = spellId
|
||||||
buff.texture:SetTexture(aura.icon)
|
buff.texture:SetTexture(icon)
|
||||||
|
|
||||||
if buff.btype == "HARMFUL" then
|
if buff.btype == "HARMFUL" then
|
||||||
local dispelColor = C_UnitAuras.GetAuraDispelTypeColor(aura.dispelName)
|
local dispelColor = C_UnitAuras.GetAuraDispelTypeColor(dispelType)
|
||||||
buff.backdrop:SetBackdropBorderColor(dispelColor:GetRGBA())
|
buff.backdrop:SetBackdropBorderColor(dispelColor:GetRGBA())
|
||||||
else
|
else
|
||||||
buff.backdrop:SetBackdropBorderColor(br,bg,bb,ba)
|
buff.backdrop:SetBackdropBorderColor(br,bg,bb,ba)
|
||||||
|
|||||||
@@ -75,10 +75,10 @@ pfUI:RegisterModule("buffwatch", function ()
|
|||||||
|
|
||||||
local function GetBuffData(unit, id, type, selfdebuff)
|
local function GetBuffData(unit, id, type, selfdebuff)
|
||||||
local filter = (selfdebuff and type == "HARMFUL") and "HARMFUL|PLAYER" or type
|
local filter = (selfdebuff and type == "HARMFUL") and "HARMFUL|PLAYER" or type
|
||||||
local aura = C_UnitAuras.GetAuraDataByIndex(unit, id, filter)
|
local name, icon, count, dispelType, _, expirationTime = C_UnitAuras.UnitAura(unit, id, filter)
|
||||||
if not aura then return end
|
if not name then return end
|
||||||
local remaining = aura.expirationTime > 0 and (aura.expirationTime - GetTime()) or 0
|
local remaining = expirationTime > 0 and (expirationTime - GetTime()) or 0
|
||||||
return remaining, aura.icon, aura.name, aura.applications
|
return remaining, icon, name, count, dispelType
|
||||||
end
|
end
|
||||||
|
|
||||||
local function StatusBarOnClick()
|
local function StatusBarOnClick()
|
||||||
@@ -236,7 +236,7 @@ pfUI:RegisterModule("buffwatch", function ()
|
|||||||
local selfdebuff = frame.config.selfdebuff == "1"
|
local selfdebuff = frame.config.selfdebuff == "1"
|
||||||
|
|
||||||
for i=1,32 do
|
for i=1,32 do
|
||||||
local timeleft, texture, name, stacks = GetBuffData(frame.unit, i, frame.type, selfdebuff)
|
local timeleft, texture, name, stacks, dtype = GetBuffData(frame.unit, i, frame.type, selfdebuff)
|
||||||
timeleft = timeleft or 0
|
timeleft = timeleft or 0
|
||||||
|
|
||||||
if texture and name and name ~= "" and BuffIsVisible(frame.config, name) then
|
if texture and name and name ~= "" and BuffIsVisible(frame.config, name) then
|
||||||
@@ -245,12 +245,14 @@ pfUI:RegisterModule("buffwatch", function ()
|
|||||||
frame.buffs[i][3] = name
|
frame.buffs[i][3] = name
|
||||||
frame.buffs[i][4] = texture
|
frame.buffs[i][4] = texture
|
||||||
frame.buffs[i][5] = stacks
|
frame.buffs[i][5] = stacks
|
||||||
|
frame.buffs[i][6] = dtype
|
||||||
else
|
else
|
||||||
frame.buffs[i][1] = 0
|
frame.buffs[i][1] = 0
|
||||||
frame.buffs[i][2] = nil
|
frame.buffs[i][2] = nil
|
||||||
frame.buffs[i][3] = nil
|
frame.buffs[i][3] = nil
|
||||||
frame.buffs[i][4] = nil
|
frame.buffs[i][4] = nil
|
||||||
frame.buffs[i][5] = 0
|
frame.buffs[i][5] = 0
|
||||||
|
frame.buffs[i][6] = nil
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -295,8 +297,7 @@ pfUI:RegisterModule("buffwatch", function ()
|
|||||||
local r, g, b
|
local r, g, b
|
||||||
if frame.type == "HARMFUL" then
|
if frame.type == "HARMFUL" then
|
||||||
r, g, b = 1, .2, .2
|
r, g, b = 1, .2, .2
|
||||||
local a = C_UnitAuras.GetDebuffDataByIndex(frame.unit, data[2])
|
local dtype = data[6]
|
||||||
local dtype = a and a.dispelName
|
|
||||||
if dtype and DebuffTypeColor[dtype] then
|
if dtype and DebuffTypeColor[dtype] then
|
||||||
r,g,b = DebuffTypeColor[dtype].r,DebuffTypeColor[dtype].g,DebuffTypeColor[dtype].b
|
r,g,b = DebuffTypeColor[dtype].r,DebuffTypeColor[dtype].g,DebuffTypeColor[dtype].b
|
||||||
end
|
end
|
||||||
|
|||||||
Reference in New Issue
Block a user