v5 fix round 2: Pixel Perfect, identity gate hardening, override-icon unification, buff-filter curation#214
Open
Krathe82 wants to merge 17 commits into
Open
Conversation
Tab switching re-enters the page ONLY through GUI RefreshCached -> RefreshStates (the builder is cache-skipped), and the AD RefreshStates override early-outs when the page dimensions are unchanged (the guard that stops the banner-cascade rebuild loop). But the mainFrame OnHide hook clears the preview canvas on every navigation away — so from the second same-size revisit on, the cleared canvas was never repainted (the first revisit only worked because the dims baseline was captured pre-layout). Track the clear with a flag and, on a same-size revisit that needs it, repaint the pooled slots only — slot restyling creates no banners, so the cascade loop the early-out exists for cannot re-arm.
The container port lost the legacy pixel-perfect contract; with PP on, aura icon borders rendered uneven (fat/thin edges), gapped from the art, and differed between adjacent icons. Restored engine-wide: - Border:SnapThickness + spec.renderScale: thickness (and art insets, via the same function) now snap to whole physical pixels in the border's ACTUAL render space, folding the container/window SetScale instead of assuming UIParent space. Min one physical pixel so thin borders can't vanish. - Layout quantization: icon sizes/spacings/strip reservation quantize to whole pixels in scaled space at config adoption; the container pin offset is nudged onto the physical pixel grid from the anchor frame's rect (never the container's own secret-derived rect), with a retry once the rect resolves at login and a re-pin on frame resize. - Stale pixel-scale cache: login builds could bake all snapped values before UIParent's scale settled, with nothing restyling after (uneven until any settings toggle, broken again on reload). The pixel-scale value now rides the factory cosmetic signatures, and UpdatePixelScale invalidates the aura layout when the value actually changes (plus a post-login settle check), so everything re-bakes automatically. - Missing badges: badge size, cell pitch and animation spill quantize in the strip's scaled space; the parked badge compensates the flow layout's 1x1 empty-container size floor exactly (source-cited), so its border renders uniform; SetBadgeSpill no longer floors the quantized spill (badge stayed planted while animation inset/offset sliders drag). - Diagnostics: /df ppdump (physical-pixel rects + grid deviation for every aura container anchor chain) and /df ppbadge (window-park missing badges to isolate container-anchor drift).
…anAssist
The 12.1 identity gate only evaluates include/excludeSpellIDs candidate filters for units passing UnitCanAssist, and a failed gate SKIPS the checks (fail-open: every helpful aura passes). A cross-faction group member only counts as assistable inside instanced content — outside (or when dueling a party member) the gate drops and any 'only these spells' pool silently degrades to 'every buff on the unit': food buffs flooding the defensive bar, live-confirmed.
Containers now self-classify at build: a HELPFUL pool whose selection comes from includeSpellIDs (and doesn't carry the query-level PLAYER token, which is immune) hides its anchor frame while UnitCanAssist('player', unit) is false, and returns when it flips back. Render-side only (combat-safe, secure enabled state untouched), composed with consumer visibility intent, fail-safe to visible on any doubt. A module watcher re-evaluates on faction/phase/roster/world/target changes. Exclude-only pools deliberately stay visible: 'everything except X' degrading to 'everything' beats hiding a whole row.
Nudge the default colour-by-time breakpoints up off dark aura icons to a more vivid green -> gold -> orange -> red ladder, clearer at a glance in combat without going pure-primary. Both sync-locked sources move together (Config.lua GlobalDefaults + the Auras.lua engine fallback), so Reset to Default and the fallback agree. Baseline-only: existing customised breakpoints and already-materialised profiles keep their values.
SetDisabled toggled the wash via object alpha while its rest strength lives in the vertex-colour alpha, so a disable->enable cycle could restore it at full strength. Off/on now both go through the vertex channel (ApplyThemeColor on re-enable), so a re-enabled button matches one that was never disabled.
… tooltips Raw IDs typed into a custom filter now resolve their live name/icon from the client (with a one-shot repaint while spell data streams in) and carry a "not in database" chip; only genuinely invalid IDs keep "unknown ID". The disabled add/rename/delete tooltips now use the shared two-line style.
Override indicator rework - Replace the auto-layout gold star and Filter Designer yellow box with one shared filled-dot marker (GUI:CreateOverrideMarker) and one shared red reset button (GUI:CreateOverrideResetButton), so overrides read the same way everywhere. One OVERRIDE_MARKER_COLOR constant. - Hover tooltips on inline markers, the nav tab/category dots, and the frame-position indicator (all "Override active" + a description). - Nav dots sized consistently; layout-editor cogwheel -> edit_square icon. - Filter Designer: modified-preset dot uses the shared marker (with tooltip); "Reset to stock" becomes a Reset Page-style red "Reset to Default" button. Aura Filters banner - Single info banner: full control over which buffs show (enable/disable in the presets or build a custom filter), while debuffs are category-only by a Blizzard limitation. Remove Aura Filter Setup wizard - Drop the builtin wizard, the /df aurasetup command, the first-login auto-show and its seenAuraSetupWizard default. Reset Page covers the same ground. New icons: dot.tga, edit_square.tga. Locale keys added; orphans removed.
Runtime (R.Spells): - off=true (disable): Infusion of Light, Avenging Wrath, Avenging Crusader, Elemental Resistance, Ironfur, Protective Light, Immolation Aura (427912), Forestwalk, Ghost Wolf, Temporal Burst - enable: Symbiotic Blooms - remove: Dream Guide, Dream Flight healing dup 363502 (raid-CD 359816 kept), Overflowing Mists, Healing Stream/Tide Totem, Earth Elemental, Poison Cleansing Totem, Shell Cover (totems/guardians/procs - not auras) - move/copy: Twin Guardian -> Utility+Movement; Spatial Paradox +Utility; Temporal Burst +Utility (off in both) - add: Primordial Bond 381755 (Defensives), Echoing Freedom 394454 (Movement) - fix wrong id: Bestow Weyrnstone 408233 -> 410318 Durability: removals + wrong-id drop go in R.Excluded, moves/copies in R.CategoryPatch, so /update-spelldb reproduces them. off flags survive natively. The two adds, the wrong-id, and the 427912 "Infernal Armor" mislabel (actually Immolation Aura) need a gatherer-source update - tracked in the lab curation discussion.
…r-only removal)
"Remove" means drop from the preset only, not the database. Dream Guide
(1278914) and Overflowing Mists (388513) go back into R.Spells with an empty
cats set - still addable via the Add-from-Database picker (which sources
R.Spells by class, not category), just in no built-in preset. Dropped from
R.Excluded; R.CategoryPatch[id] = {} carries the empty set through re-harvest.
Left fully excluded (agreed): Dream Flight 363502 (duplicate id - the spell
stays in the DB via 359816) and the genuine non-auras (Healing Stream/Tide
Totem, Earth Elemental, Poison Cleansing Totem, Shell Cover).
Dream Flight: all three same-named ids (359816 + 362361 + 363502) now live in ONE Raid Cooldowns record; 363502 dropped from R.Excluded and all three CategoryPatch'd to raidDefensives. Per Mael's sighting split, 363502 is the ally-facing HoT (241k on others) - kept alongside the self-buff ids, not split into Healing. Second curation pass: - disable (off): Invoke Chi-Ji, Tranquility, Apotheosis, Ultimate Penitence, Vampiric Embrace, Ascendance, Bulwark of Order, Sacrosanct Crusade (self-buffs / noise) - remove: Halo (all 4 ids -> R.Excluded) - the cast leaves no aura - move to Healing: Seraphic Barrier (+off), Saved by the Light (+off), Light of the Titans; via cats + CategoryPatch
Disabled spell names keep the TRUE class colour and fade only through alpha (50%), instead of the old scale-toward-black that buried dark classes like Shaman. The shared ApplyNameColor no longer shifts the hue - enabled and disabled use identical RGB. Disabled icons are now greyscaled (SetDesaturated) on top of their 0.4 dim; the enabled path resets it so pooled rows never stay grey. Applies to both the preset list and the Add-from-Database picker.
Add auras_filterdesigner to WIDE_PAGES so its two-column preset+spell list gets the same minimum width and expand-on-open as the Aura Designer, Text Designer, Pinned Frames and Nicknames, instead of squashing at narrow widths.
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.
Base:
feature/aura-factory-12.1(alpha.10). Continues from #212 — the five commits below landed on #212's head after its merge (698a094) and are carried here unchanged, plus a new fix round on top.Carried over from #212 (pushed post-merge, previously unmerged)
Border:SnapThickness+renderScale), icon sizes/spacings quantize to whole pixels, and each row/window is nudged onto the pixel grid. Root cause of the "toggle fixes it until reload" variant: the pixel-scale cache could bake pre-settle values into login builds — the factory signatures now carry a pixel-scale token and a settle re-derive invalidates aura layout when the effective scale changes. Missing-badge anchoring compensates the empty container's 1-unit size floor. Diagnostics:/df ppdump,/df ppbadge.UnitCanAssist. The 12.1 identity gate fails OPEN: include/exclude spell-ID maps are skipped entirely for units you cannot currently assist — a cross-faction group member outside instanced content, or a duel partner — so "only these spells" pools silently degrade to "every buff" (food/flask icons flooding the defensive bar). Affected handles now hide render-side (plain anchor frame, combat-safe, fail-safe to SHOW on any doubt) until the gate holds again.New in this round
IsShown, and retries — so an aborted write can no longer strand the gate out of sync (the field bug: icons stuck visible with the gate believing them hidden). Destroy, retarget, and the Edit-Mode fake-data park/restore paths ride the same channel; the restore also composes with the gate now (a bareShow()used to re-open gate-hidden windows).UnitCanAssistcan keep reporting the pre-load answer while the world streams in, and no watched event fires once it settles — the wrong verdict stuck until an actual reinvite. The watcher now also covers member-data settle events (UNIT_NAME_UPDATE,PARTY_MEMBER_ENABLE/DISABLE), coalesces bursts onto one sweep, and parks two delayed sweeps afterPLAYER_ENTERING_WORLD.includeSpellIDsregardless of tokens —HELPFUL|PLAYERis NOT immune (the token still narrows the pool at query level, but the spell whitelist is skipped, so a "My Buffs" indicator degrades to "anything I cast"; live-caught with an instance-cast buff persisting on a cross-faction ally and rendering in the wrong indicator) — plusexcludeSpellIDspools, and theBIG_DEFENSIVE/EXTERNAL_DEFENSIVEcategory-token fallbacks. Genuinely unfiltered pools stay visible, since their data is correct on non-assistable units./df idgate— per handle: filter string, include/exclude presence, liveUnitCanAssist, stored verdict, and actual window visibility.UI + buff-filter round (on top of the above)
GUI:CreateOverrideMarker(a filled dot, one colour constant) andGUI:CreateOverrideResetButton(a red icon-only reset that reads like the Reset Page button) — so every override reads the same. Hover tooltips ("Override active" + what's overridden) sit on the inline markers, the nav tab/category dots, and the frame-position indicator; the layout-editor cogwheel becomes anedit_squareicon./df aurasetup+ first-login auto-show + its saved flag). The Aura Filters page now opens with a single banner: you have full control over which buffs show (enable/disable any spell in the presets, or build a custom filter), while debuffs can only be filtered by category (boss, dispellable, crowd control, …) because of a Blizzard limitation.R.Excluded/R.CategoryPatch/offflags; the two adds and the wrong-id need a gatherer-source update, tracked in a lab discussion. Users' own per-preset choices are unaffected.Status: this round is syntax-verified; an in-game pass is still pending (the Pixel Perfect and identity-gate items above are the live-verified ones).
Filter Designer polish + further curation (latest)
SetDesaturated) on top of its dim — so a disabled row reads as "greyed icon + faded-but-true-colour name". One shared helper, so it applies to both the preset list and the Add-from-Database picker.850) used by the Aura Designer, Text Designer, Pinned Frames and Nicknames, so its two-column list no longer squashes at narrow widths.363502is the ally-facing HoT, not a duplicate, so it's kept alongside the self-buff ids rather than removed. Plus a second tuning pass: more self-buff / noise auras default off (Invoke Chi-Ji, Tranquility, Apotheosis, Ultimate Penitence, Vampiric Embrace, Ascendance, Bulwark of Order, Sacrosanct Crusade), Halo removed (leaves no aura), and Seraphic Barrier / Saved by the Light / Light of the Titans moved into Healing. All durable via the override tables and synced with the data team in the lab.The disabled-row readability was iterated with in-game feedback; the rest of this section is syntax-verified pending a full in-game pass.
Testing
Live-verified in a cross-faction party: in a non-assistable zone every vulnerable surface hides (buff/defensive rows, missing badges, Aura Designer indicators including My Buffs — confirmed via
/df idgate:canAssist=false -> gateHidden=true shown=falseacross the board) while debuff surfaces stay; in a sanctuary city and in instances everything returns automatically;/reloadmid-party no longer resurrects hidden icons; no tooltip-taint errors while hovering during gate flips. Pixel Perfect verified across buff/debuff/defensive rows, AD icons and missing badges, including border animations and anim inset/offset stability.