mirror of
https://github.com/brues-code/pfUI.git
synced 2026-11-01 08:26:57 +00:00
Drive auras from UNIT_AURA_DELTA
UNIT_AURA says nothing about what changed and stays silent when a buff is refreshed or its duration packet lands, so a recast HoT kept its old timer until something else rebuilt the row. UNIT_AURA_DELTA reports added, updated and removed aura instances, refreshes included. Unit frames register it on their own token. An add, a removal or a full update rebuilds the auras as before; an update-only delta re-reads the slot behind each shown icon for its stacks and timer and redraws the buff indicators, without a relayout or a dispel scan. Frames that follow a GUID (the target-of-X chain) stay on UNIT_AURA, since the delta only fires for tokens. A finished aura layout announces itself as "unitframe:auras". buffwatch drops its 0.4s rescan: bars rebuild on the delta, on login and on a target change, and a timer wakes the frame when the next aura crosses the bar threshold. Bars re-anchor when the player or target frame lays out its aura rows, and a whitelist or blacklist click applies at once. Nameplates, the loss of control alert and the equipment manager's mount/stealth/dining check listen to the delta as well.
This commit is contained in:
@@ -501,7 +501,7 @@ nameplates:RegisterEvent("NAME_PLATE_CREATED")
|
||||
nameplates:RegisterEvent("NAME_PLATE_UNIT_ADDED")
|
||||
nameplates:RegisterEvent("NAME_PLATE_UNIT_REMOVED")
|
||||
nameplates:RegisterEvent("UPDATE_MOUSEOVER_UNIT")
|
||||
-- UNIT_AURA / UNIT_FLAGS / UNIT_SPELLCAST_* are registered per plate, on the
|
||||
-- UNIT_AURA_DELTA / UNIT_FLAGS / UNIT_SPELLCAST_* are registered per plate, on the
|
||||
-- plate's own frame, against its own token -- see OnCreate and
|
||||
-- NAME_PLATE_UNIT_ADDED.
|
||||
nameplates:RegisterEvent("PLAYER_GUILD_UPDATE")
|
||||
@@ -606,7 +606,7 @@ nameplates:RegisterUnitEvent("UNIT_SPELLCAST_NOT_INTERRUPTIBLE", "target", "focu
|
||||
-- Point this plate's own subscriptions at the token it just took. On a
|
||||
-- recycled frame these replace the previous unit rather than stacking:
|
||||
-- RegisterUnitEvent on an already-filtered registration swaps the units.
|
||||
plate.nameplate:RegisterUnitEvent("UNIT_AURA", arg1)
|
||||
plate.nameplate:RegisterUnitEvent("UNIT_AURA_DELTA", arg1)
|
||||
plate.nameplate:RegisterUnitEvent("UNIT_FLAGS", arg1)
|
||||
plate.nameplate:RegisterUnitEvent("UNIT_TARGET", arg1)
|
||||
plate.nameplate:RegisterUnitEvent("UNIT_SPELLCAST_START", arg1)
|
||||
@@ -760,7 +760,7 @@ nameplates:RegisterUnitEvent("UNIT_SPELLCAST_NOT_INTERRUPTIBLE", "target", "focu
|
||||
-- new token; _REMOVED drops it, which matters because freed slots are
|
||||
-- reused and a stale token would feed this frame another unit's events.
|
||||
nameplate:SetScript("OnEvent", function()
|
||||
if event == "UNIT_AURA" then
|
||||
if event == "UNIT_AURA_DELTA" then
|
||||
-- a fresh C_UnitAuras read next tick rather than waiting out the 0.5s
|
||||
-- throttle -- covers expiry, dispels, refreshes and stack changes
|
||||
this.auraUpdate = true
|
||||
|
||||
Reference in New Issue
Block a user