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:
1 parent
5bd158d4eb
commit
11b59a9a9e
12 files changed
+1315
-81
No files matched your search
@@ -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];
|
||||
|
||||
Reference in new issue
Block a user