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
@@ -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;
|
||||
|
||||
Reference in new issue
Block a user