fix(render): clip walk content to authored portal views
This commit is contained in:
parent
90eba0ec3c
commit
11e68aad82
10 changed files with 408 additions and 78 deletions
|
|
@ -43,12 +43,17 @@ public sealed class WalkFrameDriverTests
|
|||
private sealed class RecordingLeafRenderer(List<string> log) : IWalkFrameLeafRenderer
|
||||
{
|
||||
public readonly List<WalkPolygon> Punches = new();
|
||||
public readonly List<(uint CellId, uint ClipSlot)> Shells = new();
|
||||
|
||||
public void DrawSky() => log.Add("SKY");
|
||||
|
||||
public void DrawTerrainSlice(int sliceIndex) => log.Add($"TERRAIN:{sliceIndex}");
|
||||
|
||||
public void DrawCellShell(uint cellId) => log.Add($"SHELL:{cellId:x8}");
|
||||
public void DrawCellShell(uint cellId, uint clipSlot)
|
||||
{
|
||||
Shells.Add((cellId, clipSlot));
|
||||
log.Add($"SHELL:{cellId:x8}");
|
||||
}
|
||||
|
||||
public void ClearInteriorDepth() => log.Add("CLEAR");
|
||||
|
||||
|
|
@ -427,7 +432,9 @@ public sealed class WalkFrameDriverTests
|
|||
|
||||
var leaf = new RecordingLeafRenderer(log);
|
||||
var trace = new RecordingTrace(log);
|
||||
var driver = new WalkFrameDriver(fx.Dispatcher, leaf, worldData, trace);
|
||||
using ClipFrame clipFrame = ClipFrame.NoClip();
|
||||
var driver = new WalkFrameDriver(
|
||||
fx.Dispatcher, leaf, worldData, trace, clipFrame);
|
||||
var walk = new RetailFrameWalk();
|
||||
|
||||
var activeView = new WalkPortalView();
|
||||
|
|
@ -456,6 +463,13 @@ public sealed class WalkFrameDriverTests
|
|||
|
||||
Assert.Equal([0x104u], driver.LookInCellTurns);
|
||||
Assert.Equal([0x104u], driver.LookInCells);
|
||||
Assert.Collection(
|
||||
leaf.Shells,
|
||||
shell =>
|
||||
{
|
||||
Assert.Equal(0x104u, shell.CellId);
|
||||
Assert.NotEqual(0u, shell.ClipSlot);
|
||||
});
|
||||
WalkPortalView capturedView = ctx.Cells[0x104].PortalViews[0];
|
||||
WalkViewPoly capturedPoly = Assert.Single(capturedView.View.Polys);
|
||||
Vector2 capturedCenter = Vector2.Zero;
|
||||
|
|
@ -470,6 +484,10 @@ public sealed class WalkFrameDriverTests
|
|||
0, in insideCone, 0.1f));
|
||||
Assert.False(driver.SphereVisibleInLookInTurn(
|
||||
0, new Vector3(10_000f, 0f, 10f), 0.1f));
|
||||
uint clipSlot = Assert.Single(driver.VisibleClipSlotsInLookInTurn(
|
||||
0, in insideCone, 0.1f, testSphere: true));
|
||||
Assert.NotEqual(0u, clipSlot);
|
||||
Assert.Equal(2, clipFrame.SlotCount);
|
||||
|
||||
// The punch polygon reached the leaf renderer in WORLD space: the
|
||||
// building-local Quad(-2f) vertex (-0.5,-0.5,-2) translates by
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue