Skip to content

Commit b04ee96

Browse files
committed
Anim: add Comet and Blink border animations
Two new DF-owned OnUpdate effects, driven off our own overlay textures via the shared driver (no LibCustomGlow, so they run on the 12.1 aura buttons too): - Comet: a bright head sweeps the perimeter with a fading tail — a DF stand-in for the LCG AutocastGlow that can't run on aura buttons. - Blink: a hard on/off strobe on all edges (crisp alert), distinct from DF Pulsate's smooth fade. Added to customTicks + DRIVER_ANIMS (Border.lua), SAFE_OVERLAY_ANIM (AuraContainer), the animation-type dropdown + parameter maps (GUI), and locale. Available on every border-animation surface.
1 parent b41ea4e commit b04ee96

5 files changed

Lines changed: 46 additions & 7 deletions

File tree

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ DandersFrames has been rebuilt for WoW 12.1 (Midnight), which fundamentally chan
1111
* (Tooltips) **The aura tooltip Enable toggles now apply immediately on the 12.1 aura rows** — turning Buff / Debuff / Defensive Icon tooltips on or off used to do nothing until the next unrelated settings change. The remaining tooltip options can't apply to aura icons on 12.1 and are marked in place: the game draws its aura tooltip at a fixed spot beside the icon with no addon hook (Anchor / Offset), and the icon's mouse state is protected during combat so hover can't be dropped per-combat (Disable in Combat). All of these keep working for Frame and Binding tooltips, which aren't aura-driven.
1212
* (Aura Designer) **The designer's own preview canvas renders through the real 12.1 engine** — the indicators you drag around on the editor's mock frame are styled by the exact same code that styles them live (size, borders, border animations, duration/stack text, bar fill), so what you see in the editor is what ships to the frames. Out-of-range fading also works on Aura Designer indicators again (the whole indicator dims with your configured alpha).
1313
* (Aura Designer) **Test mode previews the Aura Designer through the real 12.1 engine** — each placed indicator renders in its actual container wearing its own configured spell's icon, name and tooltip identity, with live-true position, borders, animations and fonts; frame effects (health-bar colour, background, frame border) apply exactly as they do live. The old hand-painted preview is gone, and preview sounds are no longer registered with the game while test mode is open.
14+
* (Interface) **Two new border animations: Comet and Blink.** Comet sweeps a bright head with a fading tail around the border (a DF-drawn take on the old rotating glow); Blink is a crisp on/off strobe for an at-a-glance alert. Both are available anywhere DF border animations are — frame borders, Aura Designer indicators, and the Defensive / Missing-Buff icons.
1415
* (Auras) **Animated borders are back for Defensive and Missing-Buff icons.** The border animations (Pulsate, Wipe, Ripple, Segment Reveal, Marching Dash, Sides/Corners) were marked as a 12.1 limitation during the rework, but the Aura Designer's own approach — DF-drawn border textures animated by an external driver, rather than Blizzard's aura-button glow — works on the container icons too. The particle-glow styles (Pixel/Autocast/Button/Proc) still can't run on the new aura buttons and are hidden from these dropdowns. Under the hood the animation driver is now shared (one timer for all animated borders instead of one each), so it's lighter across the board.
1516
* (Auras) **Out-of-range and dead-unit fading works on the 12.1 aura displays again** — buff/debuff rows, defensive icons and the missing-buff strip now dim as one when the unit is out of range (with your configured out-of-range alphas), live and in test mode. This was a known gap since the rework.
1617
* (Aura Designer) The spell picker shows one unified grid — the separate "Inferred Tracking" section (and its cast-tracking caveats) is gone. On 12.1 every tracked aura works the same way, driven by the game's native spell-ID matching, so the whitelisted/inferred distinction no longer exists.

Frames/AuraContainer.lua

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,8 @@ local SAFE_OVERLAY_ANIM = {
9191
DF_DASH = true,
9292
CORNERS_ONLY = true,
9393
SIDES_ONLY = true,
94+
COMET = true,
95+
BLINK = true,
9496
}
9597
-- Exposed so non-container consumers that apply a secretRect border directly
9698
-- (the missing-buff badge) can restrict to the same taint-safe DF-owned set.

Frames/Border.lua

Lines changed: 33 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -873,6 +873,38 @@ customTicks.SEGMENT_REVEAL = function(border, anim, elapsed)
873873
end
874874
end
875875

876+
-- COMET: a bright head travels the perimeter clockwise with a fading tail
877+
-- trailing behind it. Like WIPE but asymmetric — the edge the head just left
878+
-- dims gradually instead of symmetrically, reading as a comet / "chase". A
879+
-- DF-owned stand-in for the LCG AutocastGlow that can't run on aura buttons.
880+
customTicks.COMET = function(border, anim, elapsed)
881+
local o = border.animOverlay; if not o then return end
882+
local period = tickPeriod(anim, 2)
883+
local t = (elapsed % period) / period
884+
local tail = 0.45 -- trail length as a fraction of the loop
885+
local function comet(c)
886+
local d = (t - c) % 1 -- how far the head has passed this edge
887+
if d <= tail then return 1 - d / tail end
888+
return 0
889+
end
890+
if o.top then o.top:SetAlpha(comet(0)) end
891+
if o.right then o.right:SetAlpha(comet(0.25)) end
892+
if o.bottom then o.bottom:SetAlpha(comet(0.5)) end
893+
if o.left then o.left:SetAlpha(comet(0.75)) end
894+
end
895+
896+
-- BLINK: a hard on/off strobe on all four edges together — a crisp "alert"
897+
-- pulse, distinct from DF_PULSATE's smooth fade. Frequency is blinks/second.
898+
customTicks.BLINK = function(border, anim, elapsed)
899+
local o = border.animOverlay; if not o then return end
900+
local period = tickPeriod(anim, 1)
901+
local on = ((elapsed % period) / period) < 0.5 and 1 or 0
902+
if o.top then o.top:SetAlpha(on) end
903+
if o.right then o.right:SetAlpha(on) end
904+
if o.bottom then o.bottom:SetAlpha(on) end
905+
if o.left then o.left:SetAlpha(on) end
906+
end
907+
876908
-- ===== STATIC SHAPE MODES =====
877909

878910
-- SIDES_ONLY: reveal the overlay textures (anim.thickness, anim.color) on
@@ -1062,7 +1094,7 @@ end
10621094
-- OnUpdate-driver effects: those whose motion is driven by the shared anim
10631095
-- driver's OnUpdate (as opposed to LCG glows or the static shape modes). The dedupe in
10641096
-- StartAnimation verifies the driver is actually live for these before no-opping.
1065-
local DRIVER_ANIMS = { DF_DASH = true, WIPE = true, RIPPLE = true, SEGMENT_REVEAL = true, DF_PULSATE = true }
1097+
local DRIVER_ANIMS = { DF_DASH = true, WIPE = true, RIPPLE = true, SEGMENT_REVEAL = true, DF_PULSATE = true, COMET = true, BLINK = true }
10661098

10671099
function Border:StartAnimation(border, spec)
10681100
if not border or not spec or not spec.animation then

GUI/GUI.lua

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4793,14 +4793,14 @@ function GUI:CreateAnimationControls(group, dbTable, animPrefix, opts)
47934793
-- DF_DASH: Frequency = march SPEED (0 = static dashed), Thickness = dash
47944794
-- thickness, Inset = dash inset.
47954795
local hasFrequency = { PULSATE=1, DF_PULSATE=1, CHASE=1, FLASH=1, PROC=1,
4796-
WIPE=1, RIPPLE=1, SEGMENT_REVEAL=1, DF_DASH=1 }
4796+
WIPE=1, RIPPLE=1, SEGMENT_REVEAL=1, DF_DASH=1, COMET=1, BLINK=1 }
47974797
local hasParticles = { PULSATE=1, CHASE=1 }
47984798
local hasThickness = { PULSATE=1, WIPE=1, RIPPLE=1, SEGMENT_REVEAL=1,
4799-
SIDES_ONLY=1, CORNERS_ONLY=1, DF_DASH=1 }
4799+
SIDES_ONLY=1, CORNERS_ONLY=1, DF_DASH=1, COMET=1, BLINK=1 }
48004800
-- Inset / Offset apply to every non-NONE effect EXCEPT DF_PULSATE (which
48014801
-- modulates the border's own edges and has no separate animRect).
48024802
local hasPositioning = { PULSATE=1, CHASE=1, FLASH=1, PROC=1, WIPE=1, RIPPLE=1,
4803-
SEGMENT_REVEAL=1, SIDES_ONLY=1, CORNERS_ONLY=1, DF_DASH=1 }
4803+
SEGMENT_REVEAL=1, SIDES_ONLY=1, CORNERS_ONLY=1, DF_DASH=1, COMET=1, BLINK=1 }
48044804
local pulsateOnly = { PULSATE=1 }
48054805
local chaseOnly = { CHASE=1 }
48064806
local sidesOnly = { SIDES_ONLY=1 }
@@ -4830,10 +4830,12 @@ function GUI:CreateAnimationControls(group, dbTable, animPrefix, opts)
48304830
SIDES_ONLY = L["Sides Only"],
48314831
CORNERS_ONLY = L["Corners Only"],
48324832
DF_DASH = L["DF Dash"],
4833+
COMET = L["Comet"],
4834+
BLINK = L["Blink"],
48334835
-- None first (the "off" option), then alphabetical by label.
4834-
_order = { "NONE", "CHASE", "CORNERS_ONLY", "DF_DASH", "DF_PULSATE",
4835-
"FLASH", "PROC", "PULSATE", "RIPPLE", "SEGMENT_REVEAL",
4836-
"SIDES_ONLY", "WIPE" },
4836+
_order = { "NONE", "BLINK", "CHASE", "COMET", "CORNERS_ONLY", "DF_DASH",
4837+
"DF_PULSATE", "FLASH", "PROC", "PULSATE", "RIPPLE",
4838+
"SEGMENT_REVEAL", "SIDES_ONLY", "WIPE" },
48374839
}
48384840
-- Optional caller filter: drop any excluded type from both the value map and
48394841
-- the display order (e.g. the Aura Designer border offers only the taint-safe,

Locales/enUS.lua

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1819,6 +1819,8 @@ L["Corners Only"] = true
18191819
L["Flash"] = true
18201820
L["Ripple"] = true
18211821
L["Segment Reveal"] = true
1822+
L["Comet"] = true
1823+
L["Blink"] = true
18221824
L["Sides Axis"] = true
18231825
L["Sides Only"] = true
18241826
L["Wipe"] = true

0 commit comments

Comments
 (0)