planner: four-strate owner plan spawns (L66); pinned 2-strate regression fixture
- Core caps each passage mouth reach to its own strate's usable content band (owner DA_Strate1 exports ReachMax=5000 owner voxels, which put the SW->FI lower mouth 79.5 m below FI, inside TN). - Unreal adapter: SW route search keeps the old 64 m candidates first, then a bounded single-mouth search with shorter lengths; logs candidate/rejection counts. - Internal-chain passage floor/support tweaks (only with >2 strates): ripple 1-2 4.78->2.90 cm, 2-3 3.57->0.10 cm. Interfaces still 0/3 walkable (59/3/2 unsupported). - verify.py: legacy tiers use Standalone/data/regression/owner_world_2strate_l61.json; new four-strate stage reads its expectations from owner_world.json (currently red on interfaces). - Unreal trace L14 vs HEAD, same assets (16-chunk FlatPlain): 12.20 vs 12.56 worker-s; no x2. 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
47148e0a0d
commit
5e2fc53d39
17 files changed
+745
-73
No files matched your search
@@ -14918,7 +14918,7 @@ bool CreateLoggedOwnerSurfaceSettingsCopy(
|
||||
UVoxelSettings* Source, int32 Seed,
|
||||
TStrongObjectPtr<UVoxelSettings>& OutSettings,
|
||||
TStrongObjectPtr<UVoxelStrateDefinition>& OutSurfaceDefinition,
|
||||
FString& OutError)
|
||||
FString& OutError, bool bCompactTracePlan = false)
|
||||
{
|
||||
if (Source == nullptr)
|
||||
{
|
||||
@@ -14934,11 +14934,10 @@ bool CreateLoggedOwnerSurfaceSettingsCopy(
|
||||
nullptr, TEXT("/Game/VoxelForge/DA_Strate1.DA_Strate1"));
|
||||
if (SurfaceDefinition == nullptr
|
||||
|| SurfaceDefinition->GeneratorType != ECaveGeneratorType::SurfaceWorld
|
||||
|| SurfaceDefinition->StrateHeightInChunks <= 0
|
||||
|| Source->TotalStrates != 1)
|
||||
|| SurfaceDefinition->StrateHeightInChunks <= 0)
|
||||
{
|
||||
OutError = FString::Printf(
|
||||
TEXT("The staged owner assets do not describe the logged single SurfaceWorld (definition_loaded=%d type=%d height=%d settings_strates=%d)."),
|
||||
TEXT("The staged owner assets do not contain a usable DA_Strate1 SurfaceWorld (definition_loaded=%d type=%d height=%d settings_strates=%d)."),
|
||||
SurfaceDefinition != nullptr ? 1 : 0,
|
||||
SurfaceDefinition != nullptr ? static_cast<int32>(SurfaceDefinition->GeneratorType) : INDEX_NONE,
|
||||
SurfaceDefinition != nullptr ? SurfaceDefinition->StrateHeightInChunks : INDEX_NONE,
|
||||
@@ -14953,9 +14952,24 @@ bool CreateLoggedOwnerSurfaceSettingsCopy(
|
||||
return false;
|
||||
}
|
||||
OutSettings = TStrongObjectPtr<UVoxelSettings>(SettingsCopy);
|
||||
if (bCompactTracePlan)
|
||||
{
|
||||
SurfaceDefinition = DuplicateObject<UVoxelStrateDefinition>(SurfaceDefinition,
|
||||
GetTransientPackage(), TEXT("VoxelForgeCompactSurfaceTraceDefinition"));
|
||||
if (SurfaceDefinition == nullptr)
|
||||
{
|
||||
OutError = TEXT("Could not make a transient DA_Strate1 copy for the compact common-plan trace.");
|
||||
return false;
|
||||
}
|
||||
// L14's historical fixed-length SurfaceWorld route search cannot place the
|
||||
// new trace fixture even at 16 chunks. Use the same simple, walkable FlatPlain
|
||||
// plan in both host revisions so the streaming comparison reaches AVoxelWorld.
|
||||
SurfaceDefinition->GeneratorType = ECaveGeneratorType::FlatPlain;
|
||||
SurfaceDefinition->StrateHeightInChunks = 16;
|
||||
}
|
||||
OutSurfaceDefinition = TStrongObjectPtr<UVoxelStrateDefinition>(SurfaceDefinition);
|
||||
SettingsCopy->Seed = Seed;
|
||||
SettingsCopy->TotalStrates = Source->TotalStrates;
|
||||
SettingsCopy->TotalStrates = 1;
|
||||
SettingsCopy->StratePool.Reset();
|
||||
SettingsCopy->FixedStrates.Reset();
|
||||
SettingsCopy->FixedStrates.Add(0,
|
||||
@@ -14965,8 +14979,10 @@ bool CreateLoggedOwnerSurfaceSettingsCopy(
|
||||
SettingsCopy->bUseWorldAssemblyManifestOverride = false;
|
||||
const int32 BottomChunkZ = 1 - SurfaceDefinition->StrateHeightInChunks;
|
||||
UE_LOG(LogTemp, Display,
|
||||
TEXT("[VoxelForgeCoreTestLayout] source=owner_asset_transient_copy definition=DA_Strate1 seed=%d strata=1 bounds=[0,%d] height_chunks=%d gap=%d imported_override=cleared"),
|
||||
Seed, BottomChunkZ, SurfaceDefinition->StrateHeightInChunks, SettingsCopy->InterStrateGapChunks);
|
||||
TEXT("[VoxelForgeCoreTestLayout] source=owner_asset_transient_copy definition=DA_Strate1 generator=%d seed=%d strata=1 bounds=[0,%d] height_chunks=%d compact_trace=%d gap=%d imported_override=cleared"),
|
||||
static_cast<int32>(SurfaceDefinition->GeneratorType), Seed, BottomChunkZ,
|
||||
SurfaceDefinition->StrateHeightInChunks,
|
||||
bCompactTracePlan ? 1 : 0, SettingsCopy->InterStrateGapChunks);
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -16542,7 +16558,15 @@ bool RunCoreFloatingIslandActorIntegrationTest(
|
||||
}
|
||||
float StagedWalkSpeedCmPerSecond = 0.0f;
|
||||
float StagedSprintSpeedCmPerSecond = 0.0f;
|
||||
if (!ReadStagedPlayerSpeeds(
|
||||
if (Arguments.bCoreWorldStreamTraceOnly)
|
||||
{
|
||||
StagedWalkSpeedCmPerSecond = 600.0f;
|
||||
StagedSprintSpeedCmPerSecond = 6000.0f;
|
||||
UE_LOG(LogTemp, Display,
|
||||
TEXT("[VoxelForgePawnSpeedFixture] source=trace_fixture_defaults walk_cm_s=%.3f sprint_cm_s=%.3f"),
|
||||
StagedWalkSpeedCmPerSecond, StagedSprintSpeedCmPerSecond);
|
||||
}
|
||||
else if (!ReadStagedPlayerSpeeds(
|
||||
StagedWalkSpeedCmPerSecond, StagedSprintSpeedCmPerSecond, OutError))
|
||||
{
|
||||
return false;
|
||||
@@ -17764,8 +17788,16 @@ bool RunCoreWorldActorIntegrationTest(const FExploreArguments& Arguments, FStrin
|
||||
|
||||
float StagedWalkSpeedCmPerSecond = 0.0f;
|
||||
float StagedSprintSpeedCmPerSecond = 0.0f;
|
||||
if (!ReadStagedPlayerSpeeds(
|
||||
StagedWalkSpeedCmPerSecond, StagedSprintSpeedCmPerSecond, OutError))
|
||||
if (Arguments.bCoreWorldStreamTraceOnly)
|
||||
{
|
||||
StagedWalkSpeedCmPerSecond = 600.0f;
|
||||
StagedSprintSpeedCmPerSecond = 6000.0f;
|
||||
UE_LOG(LogTemp, Display,
|
||||
TEXT("[VoxelForgePawnSpeedFixture] source=trace_fixture_defaults walk_cm_s=%.3f sprint_cm_s=%.3f"),
|
||||
StagedWalkSpeedCmPerSecond, StagedSprintSpeedCmPerSecond);
|
||||
}
|
||||
else if (!ReadStagedPlayerSpeeds(
|
||||
StagedWalkSpeedCmPerSecond, StagedSprintSpeedCmPerSecond, OutError))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
@@ -17773,8 +17805,26 @@ bool RunCoreWorldActorIntegrationTest(const FExploreArguments& Arguments, FStrin
|
||||
const int32 OwnerSeed = ResolveCoreTestWorldSeed(AuthoredSettings);
|
||||
TStrongObjectPtr<UVoxelSettings> OwnerSurfaceSettings;
|
||||
TStrongObjectPtr<UVoxelStrateDefinition> OwnerSurfaceDefinition;
|
||||
if (!CreateLoggedOwnerSurfaceSettingsCopy(AuthoredSettings, OwnerSeed,
|
||||
OwnerSurfaceSettings, OwnerSurfaceDefinition, OutError))
|
||||
TArray<TStrongObjectPtr<UVoxelStrateDefinition>> OwnerPlanDefinitions;
|
||||
if (Arguments.bOwnerFourStratePlan)
|
||||
{
|
||||
UVoxelSettings* PlanSettings = DuplicateObject<UVoxelSettings>(
|
||||
AuthoredSettings, GetTransientPackage(), TEXT("VoxelForgeOwnerFourStrateTraceSettings"));
|
||||
if (PlanSettings == nullptr)
|
||||
{
|
||||
OutError = TEXT("Could not duplicate owner settings for the transient four-strate Core trace.");
|
||||
return false;
|
||||
}
|
||||
PlanSettings->Seed = OwnerSeed;
|
||||
if (!ApplyOwnerFourStratePlan(PlanSettings, OwnerPlanDefinitions, true, OutError))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
OwnerSurfaceSettings = TStrongObjectPtr<UVoxelSettings>(PlanSettings);
|
||||
}
|
||||
else if (!CreateLoggedOwnerSurfaceSettingsCopy(AuthoredSettings, OwnerSeed,
|
||||
OwnerSurfaceSettings, OwnerSurfaceDefinition, OutError,
|
||||
Arguments.bCoreWorldStreamTraceOnly))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user