fix(render): FW4 slice 2 - exit seals stamp the walk''s own flood
The cathedral falls shine-through (owner report at the #456 terrace seam, toggling with the camera''s side of the seam): the probe''s new phase tags pinned the falls emitters to the cell-owners route submitting POST-depth-clear on interior roots - retail''s own timing, safe only because seals own the aperture depth by the end-of-frame alpha drain. Our seal SET still came from the old apparatus''s flood, which misses exit portals at the #456 seam band (its never-drawn panel family), so the drain z-passed across the unsealed opening. DrawWalkExitPortalMasks now stamps the walk''s own ordered interior flood (WalkFrameDriver.InteriorFloodCells, captured at OnInteriorFloodDrawTurn - retail PView::DrawCells pc:432785-432786), keeping the old assembly''s per-cell slice clips where present and sealing unclipped where the old apparatus had no entry (benign: the exact dat aperture polygon, z-tested). The legacy path keeps the old seal draw. Also: ACDREAM_PROBE_WALK_ROOT gains [walk-part]/[walk-alpha] phase-tagged submission/drain lines (the apparatus that pinned this). Hermetic 6,762/0, Walk lane 213/1, InstalledDat walk conformance 40/1. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
parent
37febd1fe6
commit
c40aecfc8c
8 changed files with 136 additions and 4 deletions
|
|
@ -386,6 +386,17 @@ internal sealed class WalkFrameDriver : IWalkEventSink
|
|||
// walk pass dedicated to nothing but set-gathering.
|
||||
internal HashSet<uint> VisitedCells { get; } = new();
|
||||
|
||||
/// <summary>FW4 slice 2: the interior root's ORDERED flood cell list,
|
||||
/// exactly as retail's <c>PView::DrawCells</c> iterates it for the
|
||||
/// exit-portal seals (pc:432785-432786) — captured at
|
||||
/// <see cref="IWalkEventSink.OnInteriorFloodDrawTurn"/>. Empty for an
|
||||
/// outdoor-rooted frame. The production seal draw iterates THIS list
|
||||
/// (the walk's own flood), not the old visibility apparatus's — at the
|
||||
/// #456 seam band the old builder's flood misses exit portals the walk
|
||||
/// provably floods, leaving unsealed aperture depth the end-of-frame
|
||||
/// alpha drain splats through (the cathedral falls shine-through).</summary>
|
||||
internal List<uint> InteriorFloodCells { get; } = new();
|
||||
|
||||
internal List<WalkBuilding> VisitedBuildings { get; } = new();
|
||||
|
||||
internal HashSet<uint> VisitedLandscapeCellIds { get; } = new();
|
||||
|
|
@ -498,6 +509,7 @@ internal sealed class WalkFrameDriver : IWalkEventSink
|
|||
VisitedCells.Clear();
|
||||
VisitedBuildings.Clear();
|
||||
VisitedLandscapeCellIds.Clear();
|
||||
InteriorFloodCells.Clear();
|
||||
}
|
||||
|
||||
/// <summary>Records the final segment mark (plan §FW3.2b-1's "at frame
|
||||
|
|
@ -691,6 +703,13 @@ internal sealed class WalkFrameDriver : IWalkEventSink
|
|||
MarkIfGrown();
|
||||
_events.Add(WalkFrameEvent.ExitSeals());
|
||||
|
||||
// FW4 slice 2: retain the ordered flood for the seal draw (the
|
||||
// DrawExitSeals leaf runs at Replay, when Collect has long filled
|
||||
// this) — see the property's own doc comment.
|
||||
InteriorFloodCells.Clear();
|
||||
for (int i = 0; i < cells.Count; i++)
|
||||
InteriorFloodCells.Add(cells[i]);
|
||||
|
||||
for (int i = 0; i < cells.Count; i++)
|
||||
EmitCellTurn(WalkDrawStage.CellStatic, cells[i]);
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue