the HUD becomes UIParent's child, and cinematics fade through black
- the transcription had dropped parent= on 72 declarations the reference carries (37 to UIParent, 28 to the action bar's art frame, 7 more), so the HUD was a field of top-level frames and UIParent:Hide() reached almost nothing — which is why a cinematic had to hide the UI at the draw level and then special-case the pointer; both workarounds are deleted and the HUD hides through the reference's own route; restoring only the UIParent half would have been the dangerous part (draw order is one flat sort, so a partial restore lifts frames over the neighbours they carry), and manifest order turns out to be load-bearing — a parent name that doesn't exist yet is silently ignored, so UIParent.xml moves to the reference's own slot with a test that fails if anything declares a child first; the chat still drew over a fly-by after all that, because the reference parents the chat windows on their TEMPLATE, invisible to a name-for-name diff when both sides rename — two declarations fix it, and the sweep that replaces the method loads the whole shipped manifest, fires CINEMATIC_START and asserts the survivors are exactly three: 91 frames visible before, 3 after, and the count comes back on stop - every cinematic boundary cuts through the reference's 0.25 s fade to black, and the next step hangs on the fade's COMPLETION, not a delay — the shot boundary is exactly where the reference does a blocking terrain load, so a delay-driven cut shows through a hitch and a completion-driven one cannot; and a fly-by now ends into black instead of a ~0.3 s loading cover: the reference raises no cover on that path, it holds black while the ground under the player loads back, so ours holds black while the stream catches up — budgeted, never an unbounded wait - the death arc keeps its promises across a relog: the body's own state machine now dies with the session — re-entering the world as a ghost used to match no arm of the world-edge machine, so the corpse query never went out and "Resurrect Now" stayed down until the next death; and a corpse wears its owner's guild crest — the corpse descriptor carries the guild field and resolves through the same crest cache a living tabard does, where ours dressed the body crestless - the char-select ghost gets its body kit: the screen resolves the state kit of the very "Ghost" aura a released ghost rides in the world — tint (140,185,253), alpha 0.5, and the Ghost_state wisp model at the body's attach point, pinned by a golden that decodes the row out of the shipped DBC; the airborne model is corrected before its fix lands — the address six comments called the gravity integrator is really the fall-velocity query, and a knockback is unsteerable because its launch PLANTS the forward bit, not because the arc is airborne (our guard was a velocity proxy, so a near-zero-speed knockback steered from frame 2); and the hover inspect card now decodes a picked part's mesh tag — alpha, rig slot, and both readings of the lighting payload side by side — turning a rebuild-and-two-probes hunt into a hover Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -450,26 +450,14 @@ fn capture_ui_active(capture: Option<Res<crate::run_mode::CaptureMode>>) -> bool
|
||||
fn arbitrate_pointer_over_ui(
|
||||
egui: Option<Res<EguiPointerOver>>,
|
||||
hover: Res<PlayerUiHover>,
|
||||
cinematic: Option<Res<crate::cinematic::Cinematic>>,
|
||||
mut over: ResMut<PointerOverUi>,
|
||||
) {
|
||||
// **A cinematic covers the screen with a frame, so the pointer is over the UI wherever it
|
||||
// is.** That is a fact about the reference's own layout, not a special case: `CinematicFrame`
|
||||
// is `setAllPoints` + `enableMouse="true"`, and while it is up it is the only mouse target the
|
||||
// hit test can reach — because `UIParent:Hide()` has taken every other frame out of it.
|
||||
//
|
||||
// benilla cannot yet reach that answer through the hit test. `crate::cinematic` substitutes
|
||||
// `UiHidden` for the reference's `UIParent:Hide()` (decision 1699, for want of a HUD parented
|
||||
// to `UIParent`), and `UiHidden` also switches the whole mouse feed off — ALT-Z's meaning,
|
||||
// where the world *should* take the mouse. So `feed_ui_input` never hit-tested
|
||||
// `CinematicFrame` at all and the world took every click of a fly-by: right-drag turned the
|
||||
// character, left-click picked targets through the flying camera, the wheel zoomed a rig
|
||||
// nobody could see. **This line states the layout fact directly, and it is the interim, not
|
||||
// the fix** — restoring the 32 dropped `parent="UIParent"` declarations lets the hit test
|
||||
// reach the same answer on its own, and this argument (and this parameter) is then dead code
|
||||
// to delete.
|
||||
let in_cinematic = cinematic.is_some_and(|c| c.is_playing());
|
||||
over.0 = in_cinematic || egui.is_some_and(|e| e.0) || hover.0.is_some();
|
||||
// A cinematic used to need a third term here, and no longer does — the deletion is the point
|
||||
// of decision 1734. `CinematicFrame` is `setAllPoints` + `enableMouse="true"`, so while it is
|
||||
// up it is the only mouse target the hit test can reach, because `UIParent:Hide()` has taken
|
||||
// every other frame out of it. The hit test now arrives at that on its own, so
|
||||
// [`PlayerUiHover`] carries it and the special case is gone.
|
||||
over.0 = egui.is_some_and(|e| e.0) || hover.0.is_some();
|
||||
}
|
||||
|
||||
/// The session lifecycle — the VM's birth, identity, death, and the reload. Every edge function
|
||||
|
||||
Reference in New Issue
Block a user