(Dispel Overlay) Fix absorb bar z-ordering and gradient opacity on live frames#65
Merged
DanderBot merged 1 commit intoMay 11, 2026
Conversation
…ve frames - Re-parent dfAbsorbBar and dfHealAbsorbBar from frame to healthBar in both party and raid Create functions, and bump their frame levels from hb+3/+4 to hb+4/+5. The dispel gradient is a child of healthBar at hb+2; parenting absorbs to the same ancestor ensures all three track healthBar level changes together, preventing the gradient from drifting above the absorb bars when SecureGroupHeaderTemplate adjusts frame levels after creation. - Fix gradient opacity slider having no effect on live frames. The GetAuraDispelTypeColor API returns a secret ColorMixin whose alpha channel cannot be passed to SetVertexColor — it silently renders at full opacity. Switch from GetRGBA() to GetRGB() and fold the base gradient opacity into the frame's SetAlphaFromBoolean call (inAlpha=gradientAlpha, oorAlpha=gradientAlpha*oorDispelAlpha) so it is never overwritten by health tracking SetValue calls. - Invalidate the gradient curve cache in the opacity and intensity slider preview callbacks so live UNIT_AURA events rebuild the curve from the current value during drag rather than restoring the stale cached alpha.
Owner
|
Thanks for the PR! Merged into main and will ship in the next alpha build. |
Krathe82
added a commit
to Krathe82/DandersFrames
that referenced
this pull request
May 15, 2026
…nsition UpdateDispelOverlayAppearance was restoring the gradient to alpha 1.0 when a unit came back in range, ignoring the configured dispelGradientAlpha. This was masked before PR DanderBot#65 because ShowOverlayWithSecretColor also used 1.0, but after DanderBot#65 corrected that function to use the configured alpha the two fell out of sync. The dfLastDispelAuraID skip then prevented ShowOverlay from correcting it, leaving the gradient stuck at full brightness permanently. Fix: use element-specific alphas (gradientAlpha, borderAlpha, iconAlpha) derived from settings in UpdateDispelOverlayAppearance, matching what ShowOverlayWithSecretColor applies, so OOR->in-range transitions restore the correct opacity rather than 1.0.
DanderBot
pushed a commit
that referenced
this pull request
May 17, 2026
…nsition UpdateDispelOverlayAppearance was restoring the gradient to alpha 1.0 when a unit came back in range, ignoring the configured dispelGradientAlpha. This was masked before PR #65 because ShowOverlayWithSecretColor also used 1.0, but after #65 corrected that function to use the configured alpha the two fell out of sync. The dfLastDispelAuraID skip then prevented ShowOverlay from correcting it, leaving the gradient stuck at full brightness permanently. Fix: use element-specific alphas (gradientAlpha, borderAlpha, iconAlpha) derived from settings in UpdateDispelOverlayAppearance, matching what ShowOverlayWithSecretColor applies, so OOR->in-range transitions restore the correct opacity rather than 1.0.
Krathe82
pushed a commit
to Krathe82/DandersFrames
that referenced
this pull request
Jun 6, 2026
…rb-zorder-opacity (Dispel Overlay) Fix absorb bar z-ordering and gradient opacity on live frames
Krathe82
pushed a commit
to Krathe82/DandersFrames
that referenced
this pull request
Jun 6, 2026
Krathe82
added a commit
to Krathe82/DandersFrames
that referenced
this pull request
Jun 6, 2026
…nsition UpdateDispelOverlayAppearance was restoring the gradient to alpha 1.0 when a unit came back in range, ignoring the configured dispelGradientAlpha. This was masked before PR DanderBot#65 because ShowOverlayWithSecretColor also used 1.0, but after DanderBot#65 corrected that function to use the configured alpha the two fell out of sync. The dfLastDispelAuraID skip then prevented ShowOverlay from correcting it, leaving the gradient stuck at full brightness permanently. Fix: use element-specific alphas (gradientAlpha, borderAlpha, iconAlpha) derived from settings in UpdateDispelOverlayAppearance, matching what ShowOverlayWithSecretColor applies, so OOR->in-range transitions restore the correct opacity rather than 1.0.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Absorb bar z-ordering (https://danders-lab.netlify.app/bugs/865):
dfAbsorbBaranddfHealAbsorbBarwere parented toframewith frame levels set tohealthBar+3andhealthBar+4at creation. The dispel gradient is a child ofhealthBarathealthBar+2, so its effective level floats whenSecureGroupHeaderTemplateadjustshealthBar's level after creation. Re-parenting the absorb bars tohealthBarand bumping their levels to+4/+5ensures all three track frame level changes together — the gradient can never drift above the absorbs.Gradient opacity on live frames:
ShowOverlayWithSecretColorcalledtex:SetVertexColor(gradientColor:GetRGBA()), passing the alpha channel from a secretColorMixinreturned byC_UnitAuras.GetAuraDispelTypeColor.SetVertexColorcannot handle secret values in the alpha position and silently renders at full opacity. Fixed by usingGetRGB()for the secret-safe colour and folding the base opacity into theSetAlphaFromBooleancall on the gradient frame (inAlpha=gradientAlpha,oorAlpha=gradientAlpha*oorAlpha). This also means health-trackingSetValuecalls inUpdateDispelGradientHealthcan no longer reset the opacity, which explains why the bug only manifested on live frames (not test mode, where health events don't fire).Opacity slider live preview: The gradient opacity and intensity slider preview callbacks (during drag) were not invalidating the curve cache. On live frames, the next
UNIT_AURAevent would callUpdateDispelOverlay→GetGradientCurve→ return the stale cached curve → overwrite whatever the lightweight update had just applied. AddedInvalidateDispelColorCurve()to both preview callbacks.Test plan