From eb6f39e1d7f49756eef8e859c0a62bd7f2fca44c Mon Sep 17 00:00:00 2001 From: Victor Giers Date: Wed, 13 May 2026 13:22:08 +0200 Subject: [PATCH] Add support for spline corridor junctions and clip intervals in runtime scene definition --- src/runtime-three/runtime-scene-build.ts | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/src/runtime-three/runtime-scene-build.ts b/src/runtime-three/runtime-scene-build.ts index 705cce9e..dc7e1664 100644 --- a/src/runtime-three/runtime-scene-build.ts +++ b/src/runtime-three/runtime-scene-build.ts @@ -91,6 +91,7 @@ import { type SplineCorridorBoxCollider } from "../spline-corridor/spline-corridor-colliders"; import { resolveSplineCorridorJunctionClipIntervals } from "../spline-corridor/spline-corridor-junctions"; +import type { SplineCorridorPathClipIntervalMap } from "../spline-corridor/spline-corridor-clips"; import { cloneWorldSettings, type WorldSettings @@ -544,6 +545,9 @@ export interface RuntimePath { totalLength: number; } +export interface RuntimeSplineCorridorJunction + extends SplineCorridorJunction {} + export interface RuntimeFoliageDefinition { terrains: Terrain[]; layers: FoliageLayerRegistry; @@ -584,6 +588,8 @@ export interface RuntimeSceneDefinition { foliage: RuntimeFoliageDefinition; modelInstances: RuntimeModelInstance[]; paths: RuntimePath[]; + splineCorridorJunctions: RuntimeSplineCorridorJunction[]; + splineCorridorClipIntervalsByPath: SplineCorridorPathClipIntervalMap; npcDefinitions: RuntimeNpcDefinition[]; entities: RuntimeEntityCollection; interactionLinks: InteractionLink[]; @@ -2047,9 +2053,19 @@ export function buildRuntimeSceneFromDocument( const paths = getScenePaths(document.paths) .filter((path) => path.enabled) .map((path) => buildRuntimePath(path, enabledTerrains, document)); + const splineCorridorJunctions = getSplineCorridorJunctions( + document.splineCorridorJunctions + ).filter((junction) => junction.enabled); + const splineCorridorClipIntervalsByPath = + resolveSplineCorridorJunctionClipIntervals({ + paths: getScenePaths(document.paths), + junctions: splineCorridorJunctions, + terrains: enabledTerrains + }); const splineCorridorColliders = deriveSplineCorridorBoxColliders({ paths, - terrains: enabledTerrains + terrains: enabledTerrains, + clipIntervalsByPath: splineCorridorClipIntervalsByPath }); const collections = buildRuntimeSceneCollections( document, @@ -2189,6 +2205,8 @@ export function buildRuntimeSceneFromDocument( foliage, modelInstances, paths, + splineCorridorJunctions, + splineCorridorClipIntervalsByPath, npcDefinitions: collections.npcDefinitions, entities: collections.entities, interactionLinks,