fix(combat): preserve authored meter child geometry

Carry the consumed dark-range child's own retail edge policy into the procedural scrollbar, widening it to the authored post-reflow interval without covering the rendered labels. Restore the bright layer to live attack-charge feedback across the full bar from the left.

Co-Authored-By: Codex <codex@openai.com>
This commit is contained in:
Erik 2026-07-12 21:57:53 +02:00
parent f8c174d707
commit e671b8a5c4
10 changed files with 66 additions and 105 deletions

View file

@ -185,11 +185,11 @@ The three visual layers remain separate. The gray scrollbar track spans the
whole authored control. Retail skill-gates element `0x100005EF` to Recklessness
advancement class `Trained` or higher when scalar message `0x0A` is received.
Per the connected visual gate, acdream uses that dark-red media as the always-
visible middle baseline and renders the bright texture as a desired-power band
from the absolute left edge to the green thumb (intentional divergence IA-20);
the remaining exact skill-gated treatment stays in AP-112. Retail instead drives
the meter child independently through `RecvNotice_SetPowerbarLevel`, while the
green thumb is driven by `RecvNotice_DesiredAttackPowerChanged`.
visible middle baseline (intentional divergence IA-20); the remaining exact
skill-gated treatment stays in AP-112. The bright child retains retail's live
`RecvNotice_SetPowerbarLevel` input and spans the entire scrollbar from the
absolute left edge, independently of the dark child's inset geometry. The green
thumb remains driven by `RecvNotice_DesiredAttackPowerChanged`.
The meter authors attribute `0x6F = 1`. `UIElement_Meter` constructor and
`DrawChildren @ 0x0046FBD0` make direction 1 the forward horizontal clip, so
@ -205,10 +205,10 @@ value `1`, right-aligns values `3` and `5`, and treats every other value as left
Power uses right justification.
The combat subtree inherits from an 800-pixel prototype and reflows into its
610-pixel mounted root on the first layout traversal. Therefore the controller
must not snapshot sibling positions during `Bind`: before reflow the bar is
`x=8,w=707` and Power is `x=611`; after retail anchoring they are `x=8,w=507`
and `x=411`. `ScalarRangeProvider` reads the live sibling rectangles during
drawing, producing the centered local interval `x=104,w=299`. Freezing the
pre-reflow width clamps that range to the bar's right edge and visibly shifts
the dark texture toward Power.
610-pixel mounted root on the first layout traversal. Scrollbars consume their
DAT children procedurally, so the dark child must retain its own four-edge
`UiLayoutPolicy`; copying only its sprite loses the child geometry. The authored
child starts at `x=70,w=567` inside the inherited 707-pixel meter and its
proportional edge modes reflow to `x=50,w=407` inside the mounted 507-pixel bar.
This is the wider centered interval that clears the rendered Speed/Power words;
using the full 100-pixel text element boxes produced an overly narrow range.