feat(render): Phase A8 — populate LoadedCell.PortalPolygons
BuildLoadedCell now reads the full portal polygon vertices from cellStruct.Polygons[portal.PolygonId].VertexIds and stores them in local-space on the LoadedCell. Empty arrays for unresolved polygons. Same source as the ClipPlane block; no new dat read. Unit test covers the data-class invariant (parallel indexing) since the full integration is exercised only at runtime with live dat data. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
fee878f292
commit
d834188a4e
2 changed files with 85 additions and 0 deletions
|
|
@ -0,0 +1,55 @@
|
|||
// CellVisibilityPortalPolygonsTests.cs — verifies BuildLoadedCell preserves
|
||||
// portal polygon vertices in LoadedCell.PortalPolygons.
|
||||
//
|
||||
// Phase A8 — Indoor-cell visibility culling. Issue #78.
|
||||
|
||||
using System.Numerics;
|
||||
using AcDream.App.Rendering;
|
||||
using Xunit;
|
||||
|
||||
namespace AcDream.App.Tests.Rendering;
|
||||
|
||||
public class CellVisibilityPortalPolygonsTests
|
||||
{
|
||||
[Fact]
|
||||
public void LoadedCell_DefaultPortalPolygons_IsEmpty()
|
||||
{
|
||||
var cell = new LoadedCell();
|
||||
Assert.NotNull(cell.PortalPolygons);
|
||||
Assert.Empty(cell.PortalPolygons);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void LoadedCell_PortalPolygons_ParallelIndexedToPortals()
|
||||
{
|
||||
// Hand-construct: two portals, one with a 4-vertex polygon, one with
|
||||
// an empty polygon (resolution failure simulated by an empty array).
|
||||
// The data-class semantics: PortalPolygons[i] corresponds to
|
||||
// Portals[i] and ClipPlanes[i].
|
||||
var cell = new LoadedCell
|
||||
{
|
||||
Portals = new()
|
||||
{
|
||||
new CellPortalInfo(0xFFFF, 100, 0), // exit portal, has geometry
|
||||
new CellPortalInfo(0x0102, 101, 0), // inner portal, no geometry resolved
|
||||
},
|
||||
ClipPlanes = new() { default, default },
|
||||
PortalPolygons = new()
|
||||
{
|
||||
new[]
|
||||
{
|
||||
new Vector3(0, 0, 0),
|
||||
new Vector3(1, 0, 0),
|
||||
new Vector3(1, 1, 0),
|
||||
new Vector3(0, 1, 0),
|
||||
},
|
||||
System.Array.Empty<Vector3>(),
|
||||
},
|
||||
};
|
||||
|
||||
Assert.Equal(2, cell.Portals.Count);
|
||||
Assert.Equal(2, cell.PortalPolygons.Count);
|
||||
Assert.Equal(4, cell.PortalPolygons[0].Length);
|
||||
Assert.Empty(cell.PortalPolygons[1]);
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue