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

+12 -4
View File
@@ -3836,6 +3836,7 @@ private:
std::array<double,2> lowerLandingFloorGradient{};
double lowerLandingRadiusSubvoxels=0.0;
std::size_t routeEndControlIndex=0;
bool floorProfileIncludesLandingChambers=false;
};
struct FPassageSegmentData
{
@@ -3937,6 +3938,8 @@ private:
+profileT*profileSegment.authoredFloorZDelta;
}
}
if(constants.floorProfileIncludesLandingChambers)
return plannedFloor+floorDepthSubvoxels;
const double upperBlendFloor=VoxelForgeCore::PassageSpline::BlendUpperMouthFloorAtXY(
constants.upperMouthReceivingRoute,queryXSubvoxels,queryYSubvoxels,
plannedFloor,constants.upperMouthX,constants.upperMouthY,
@@ -5112,6 +5115,8 @@ private:
passage.lowerMouthControlIndex,1,passage.controlPoints.size()-1);
auto& constants=PassageComposerConstants[passageIndex];
constants.routeEndControlIndex=routeEnd;
constants.floorProfileIncludesLandingChambers=
passage.floorProfileIncludesLandingChambers;
for(std::size_t axis=0;axis<3;++axis)
{
constants.upperLandingFloorCenterSubvoxels[axis]=static_cast<double>(
@@ -5177,8 +5182,10 @@ private:
upperMouthFloorDepth=std::max(upperMouthFloorDepth,
std::max(0.0,(controls.front()[2]-routeHeight)/qPerMetre
+constants.upperMouthPlayerCenterHeightMetres));
if(upperStratum->generatorKind=="TunnelNetwork"
if(!passage.floorProfileIncludesLandingChambers
&&(upperStratum->generatorKind=="TunnelNetwork"
||upperStratum->generatorKind=="SurfaceWorld")
)
VoxelForgeCore::PassageSpline::BlendEndpointFloorToRoute(
controls,plannedFloorProfile,0,route,qPerMetre,
constants.upperMouthPlayerCenterHeightMetres);
@@ -5226,9 +5233,10 @@ private:
&&distanceSquared<=std::pow(controls[routeEnd][3]
+2.0*qPerMetre,2.0))
{
VoxelForgeCore::PassageSpline::BlendEndpointFloorToRoute(
controls,plannedFloorProfile,routeEnd,
constants.lowerMouthReceivingRoute,qPerMetre);
if(!passage.floorProfileIncludesLandingChambers)
VoxelForgeCore::PassageSpline::BlendEndpointFloorToRoute(
controls,plannedFloorProfile,routeEnd,
constants.lowerMouthReceivingRoute,qPerMetre);
constants.lowerMouthX=controls[routeEnd][0];
constants.lowerMouthY=controls[routeEnd][1];
constants.lowerMouthPlannedFloor=plannedFloorProfile[routeEnd];