The replay harness reconstructs the camera from a pose-stamped oracle frame (Frame quaternion w,x,y,z storage order; +Y forward / +Z up; landblock-local origin) and drives the ported walk over adapter-built cells (cell transforms from EnvCell.Position now populated). The foundry-deep fixture - the pure-interior frame shape - reproduces retail EXACTLY on every complete frame: DI + DC(ov=0, [cell]) with no landscape, 39/39. Conventions are now pinned by live retail output; the remaining nine fixtures need the outdoor world build-out (landscape blocks, terrain z-slabs, building transforms + active-view clip) and join the same gate. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
60 lines
2.2 KiB
C#
60 lines
2.2 KiB
C#
using AcDream.App.Tests.Rendering;
|
|
using AcDream.App.Rendering.Walk;
|
|
using DatReaderWriter;
|
|
using DatReaderWriter.Options;
|
|
|
|
namespace AcDream.App.Tests.Rendering.Walk;
|
|
|
|
/// <summary>
|
|
/// FW1's conformance gate, first slice: replay pose-stamped oracle
|
|
/// fixtures through the ported walk and require the identical event
|
|
/// sequence. The projection-light interior fixtures gate first
|
|
/// (docs/research/2026-08-30-fw-walk-oracle/README.md, posed round);
|
|
/// the outdoor/landscape fixtures join as the landscape world build
|
|
/// lands.
|
|
/// </summary>
|
|
[Trait("Lane", "InstalledDat")]
|
|
public sealed class WalkTraceConformanceTests
|
|
{
|
|
private sealed class Recorder : IWalkEventSink
|
|
{
|
|
public readonly List<WalkEvent> Events = new();
|
|
public void Emit(in WalkEvent walkEvent) => Events.Add(walkEvent);
|
|
}
|
|
|
|
private static DatCollection OpenDats()
|
|
{
|
|
string? datDir = CornerFloodReplayTests.ResolveDatDir();
|
|
if (datDir is null)
|
|
{
|
|
Assert.Fail("Lane=InstalledDat requires an installed retail DAT directory; see docs/release-gate.md.");
|
|
}
|
|
return new DatCollection(datDir!, DatAccessType.Read);
|
|
}
|
|
|
|
[Fact]
|
|
public void Foundry_deep_reproduces_every_complete_frame_exactly()
|
|
{
|
|
IReadOnlyList<WalkOracleFrame> frames = WalkOracleTrace.Load("posed/foundry-deep");
|
|
Assert.NotEmpty(frames);
|
|
using DatCollection dats = OpenDats();
|
|
Dictionary<uint, WalkCell> cells =
|
|
WalkWorldDatAdapter.BuildInteriorCells(dats, 0xA9B40000u);
|
|
var landscape = new WalkLandscape { MidWidth = 1, Blocks = new WalkLandBlock?[1] };
|
|
|
|
foreach (WalkOracleFrame frame in frames)
|
|
{
|
|
Assert.NotNull(frame.Pose);
|
|
WalkCell camera = Assert.Contains(frame.Pose!.CellId, cells);
|
|
var ctx = new WalkTraceReplayContext(frame.Pose, cells);
|
|
var walk = new RetailFrameWalk();
|
|
var recorder = new Recorder();
|
|
|
|
walk.WalkFrame(frame.Pose.CellId, camera, landscape, ctx, recorder);
|
|
|
|
Assert.Equal(
|
|
WalkTraceReplayContext.Signature(frame),
|
|
WalkTraceReplayContext.Signature(recorder.Events));
|
|
}
|
|
}
|
|
}
|