[RaidFrames] introducing new frame level properties for individual components#411
[RaidFrames] introducing new frame level properties for individual components#411maxzaleski wants to merge 10 commits into
Conversation
…| buffs omitted as well)
…text carriers. - StyleButton: three carriers created individually in their natural positions - UpdateTextCarriersLevel: defined once after d.AnchorStatusText, covers all three, called immediately and stored on d - ReloadFrames / ReloadPartyFrames: single d.UpdateTextCarriersLevel() call after the status text block - ApplyPreviewData: three inline relevels consolidated into one block after the status text block, sharing a single fpl local
- roleCarrier and markerCarrier stored on d; hardcoded levels removed - d.leaderHost replaced ns.ApplyChatStrata with profile-driven level - readyCheckCarrier created (previously readyCheck was a bare texture on health) - summonPendingCarrier + d.summonPending texture added as a separate frame, splitting summon pending away from the shared d.readyCheck texture - UpdateIndicatorsLevel() closure after d.readyCheck/d.summonPending, covers all five carriers; stored on d - Called from ReloadFrames and ReloadPartyFrames after the raid marker block; ns.ApplyChatStrata calls removed from both - CreatePreviewFrame mirrored: all five carriers with profile-driven initial levels, stored as f._roleCarrier, f._markerCarrier, f._readyCheckCarrier, f._summonPendingCarrier, f._leaderHost - ApplyPreviewData: five-line relevel block ## Ready check / summon pending logic: - UpdateReadyCheck split into three functions: ApplyReadyCheck (manages d.readyCheck, returns whether it showed), ApplySummonPending (manages d.summonPending), and UpdateReadyCheck as a thin dispatcher that preserves the priority rule (ready check suppresses summon pending) - Preview ApplyPreviewData logic updated to use f._readyCheck and f._summonPending separately
… defensives, private auras) Wires debuffLevel, defLevel, and paLevel through ns.STRATA_SCALE so all three aura icon pools respond to profile settings instead of the hardcoded ns.LVL_AURA offset. - Store _durCarrier on debuff and defensive icons at creation so the elevel loop can reach the text carrier above the cooldown swipe. - Add UpdateAuraLevels closure in StyleButton covering all three pools (debuffIcons, defIcons, privateAuraFrames) plus the dispel container; called immediately and stored on d, re-called from ReloadFrames and ReloadPartyFrames. - Fix RegisterPrivateAuraSlots to use ns.STRATA_SCALE[s.paLevel] so level survives unit reassignment. - Store _durCarrier on preview aura icons in MakePreviewAuraIcon. - Relevel all preview aura pools (_pvDebuffs, _pvDefs, _pvPA, _pvDispelDebuff) in ApplyPreviewData so the settings panel reflects changes in real time.
- Rename: ns.STRATA_SCALE → ns.FRAMELVL across EllesmereUIRaidFrames.lua (34 sites) and the comment in EUI_RaidFrames_Options.lua - BM alignment: FRAMELVL_BASE medium/high/highest now reference ns.FRAMELVL; text carrier offset changed from the fixed +18 to off + 2; unused FRAMELVL_TEXT constant removed
…ation (lua 5.1 max 200 local)
- ReadyCheck and SummonPending now display the correct icon (cog instead of direction arrows) - TargetedSpells now include frame level dropdown (originally missed)
|
wow this is an insanely well done PR, i'll look into this soon. quick question, does it make sure to set defaults to existing hardcoded values so user settings are completely unaffected unless they actively change one? |
|
Hey Ellesmere, to my understanding My understanding of the engine (EUI) as a whole is limited, but I have been consistently reloading my changes with an existing profile without any Lua errors. I will report back tomorrow with a fresh profile, and double-check that it behaves as expected. Edit: I would be happy to send you my current profile string should that be of any help to you. |
c4f31af to
63d4174
Compare
192dda7 to
bda1dd5
Compare
This PR introduces user-configurable frame level control across most visual layers of the raid frames: name and health text, status overlays, indicators, aura icons, and Buff Manager indicators.
Previously, every component's z-order was hardcoded to a fixed offset constant (such as
ns.LVL_AURA,ns.LVL_RAISE), which meant users who repositioned the name text to a centre or bottom slot had no way to resolve the resulting overlap with ready-check icons, status text, or aura icons short of a source edit.In-game example (old)
Targeted Spells, and indicators like Ready-Check / Summon Pending would overlap with the display name. Additionally, should one prefer to have debuffs or other auras outside of frame boundary, the hover/target border would cut these off.
In-game example (new)
Every component is displayed correctly. One will also notice on frame 2 (top-down, warrior) that both a private aura and a targeted spell are rendered at the same time; I set the TS to have a higher priority than PA.
New scale
The philosophy behind the new scale was to maintain backwards compatibility as much as possible while providing some flexibility to the user.
Text, indicators, and auras are now distributed over 3 distinct levels representative of their visual priority, +12, +13, and +14 respectively. The implication is that Indicators and auras no longer share the same
ns.LVL_AURAlevel; auras still have a sufficient level buffer (from +14 to +20) to allow for flexible rendering. Thethreat/hover/target border remains unchanged at +20. The raid-marker "always on top" behaviour also remains unchanged; however, the user can now set other elements to that same level (such as my debuffs in the prior section).Buff Manager aligned, not redesigned.
BM indicators already had a per-indicator frame-level dropdown (behindBorders → highest). Rather than adding a new pool-level key on top of that,
FRAMELVL_BASE's three shared tiers (medium, high, highest) is now aligned tons.FRAMELVL(new scale), so BM indicators occupy the same bands as every other component. The two BM-only fixed tiers (behindBorders=7, behindText=11) are intentional design positions - indicators explicitly placed there are exempt and unaffected. The text carrier offset was also made relative (off + 2) instead of pinned to the old fixed constant +18, which would have placed labels below their own icon at high or highest.Summary Changes
New profile properties
nameLevel"lowest"UpdateTextCarriersLevelhealthTextLevel"lowest"UpdateTextCarriersLevelstatusTextLevel"low"UpdateTextCarriersLevelroleIconLevel"low"UpdateIndicatorsLevelraidMarkerLevel"highest"UpdateIndicatorsLevelreadyCheckLevel"low"UpdateIndicatorsLevelsummonPendingLevel"low"UpdateIndicatorsLevelleaderIconLevel"low"UpdateIndicatorsLevelthreatBorderLevel"medium"UpdateBordersLeveldispelBorderLevel"high"UpdateBordersLeveldebuffLevel"medium"UpdateAurasLeveldefLevel"medium"UpdateAurasLevelpaLevel"medium"UpdateAurasLeveltsLevel"lowest"TS_ApplySettings→StyleIconEach controllable layer follows the same end-to-end flow: a new string key is added to the profile defaults using one of five named tiers that map to absolute frame level offsets via
s.FRAMELVL. A corresponding Frame Level dropdown is added to the options UI, reading and writing that key through the standard SVal / SSet helpers and triggering aReloadAndUpdateon change.On the render side,
StyleButtoncreates a carrier frame for each layer and immediately calls a closure;ns.FRAMELVL[s.<key>]is read and applied relative to the unit button's current frame level. That closure is stored ondso bothReloadFramesandReloadPartyFramescan re-invoke it when settings change without recreating any frames. The preview panel mirrors this: carrier frames are stored withf._prefixes at creation, andApplyPreviewDatare-levels them on every settings refresh so the panel stays in sync with the dropdowns in real time.Important
Please note that
ReadyCheckandSummonPendingnow have uncoupled texture frames.Screenshots
Settings
These patterns are repeated where applicable.