core: chamber floors planned into the passage h(s) profile (L152, v239; surface landing support open)

Seed 2 planned grades 9.58/6.58/8.28 deg (were 19 deg); 0 solid in 320,355 passage interior samples; 0 shell,
chamber, wall violations; envelope audit clean. Open: the upper Surface World landing plane, fitted to the surface
route, leaves 5 route + 2 chamber support samples unsupported.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016dhxM43dnWvUu2B5Ph1iG1
This commit is contained in:
Fr0zkaandClaude Opus 5.5 committed 2026-11-01 19:17:14 +01:00
1 parent 5bd158d4eb
commit 11b59a9a9e
12 files changed
+1315 -81

No files matched your search

+20 -13
View File
@@ -3267,7 +3267,8 @@ namespace StandaloneStreamBenchmark
const auto upper=std::find_if(ResolvedLayout->strates.begin(),
ResolvedLayout->strates.end(),[&](const auto& stratum)
{return stratum.strateIndex==passage.upperStrateIndex;});
if(upper!=ResolvedLayout->strates.end()&&!controls.empty()
if(!passage.floorProfileIncludesLandingChambers
&&upper!=ResolvedLayout->strates.end()&&!controls.empty()
&&(upper->generatorKind=="TunnelNetwork"
||upper->generatorKind=="SurfaceWorld"))
{
@@ -3287,7 +3288,8 @@ namespace StandaloneStreamBenchmark
{return stratum.strateIndex==passage.lowerStrateIndex;});
const std::size_t routeEnd=std::clamp<std::size_t>(
passage.lowerMouthControlIndex,1,passage.controlPoints.size()-1);
if(lower!=ResolvedLayout->strates.end()
if(!passage.floorProfileIncludesLandingChambers
&&lower!=ResolvedLayout->strates.end()
&&lower->generatorKind=="TunnelNetwork"&&routeEnd<controls.size())
{
auto route=routeForStrate(passage.lowerStrateIndex);
@@ -3344,6 +3346,7 @@ namespace StandaloneStreamBenchmark
double alongMetres,double totalLengthMetres,double x,double y,
double plannedFloor)
{
if(passage.floorProfileIncludesLandingChambers)return plannedFloor;
constexpr double LandingFloorBlendMetres=12.0;
const auto weight=[&](double distanceMetres,
const VoxelForgeCore::ResolvedLayoutPassageLandingChamberV1& chamber)
@@ -3536,17 +3539,21 @@ namespace StandaloneStreamBenchmark
const double upperPlayerCenterHeight=upperStratum
!=ResolvedLayout->strates.end()
&&upperStratum->generatorKind=="SurfaceWorld"?0.98:1.13;
floor=VoxelForgeCore::PassageSpline::BlendUpperMouthFloorAtXY(
blends.upper.receivingRoute,x,y,floor,blends.upper.mouthX,
blends.upper.mouthY,blends.upper.mouthFloor,
blends.upper.tangentX,blends.upper.tangentY,
VoxelForgeCore::PassageSpline::UpperMouthFloorBlendRadiusMetres,
upperPlayerCenterHeight);
floor=VoxelForgeCore::PassageSpline::BlendUpperMouthFloorAtXY(
blends.lower.receivingRoute,x,y,floor,blends.lower.mouthX,
blends.lower.mouthY,blends.lower.mouthFloor,
-blends.lower.tangentX,-blends.lower.tangentY,
VoxelForgeCore::PassageSpline::UpperMouthFloorBlendRadiusMetres,1.13);
if(!ResolvedLayout->passages[passageIndex]
.floorProfileIncludesLandingChambers)
{
floor=VoxelForgeCore::PassageSpline::BlendUpperMouthFloorAtXY(
blends.upper.receivingRoute,x,y,floor,blends.upper.mouthX,
blends.upper.mouthY,blends.upper.mouthFloor,
blends.upper.tangentX,blends.upper.tangentY,
VoxelForgeCore::PassageSpline::UpperMouthFloorBlendRadiusMetres,
upperPlayerCenterHeight);
floor=VoxelForgeCore::PassageSpline::BlendUpperMouthFloorAtXY(
blends.lower.receivingRoute,x,y,floor,blends.lower.mouthX,
blends.lower.mouthY,blends.lower.mouthFloor,
-blends.lower.tangentX,-blends.lower.tangentY,
VoxelForgeCore::PassageSpline::UpperMouthFloorBlendRadiusMetres,1.13);
}
if(passageIndex>=allPassageSmoothRoutes.size())return floor;
const auto& route=allPassageSmoothRoutes[passageIndex];
if(route.size()<2)return floor;