Add support for spline corridor junctions and clip intervals in runtime scene definition

This commit is contained in:
2026-05-13 13:22:08 +02:00
parent e680d7118e
commit eb6f39e1d7

View File

@@ -91,6 +91,7 @@ import {
type SplineCorridorBoxCollider type SplineCorridorBoxCollider
} from "../spline-corridor/spline-corridor-colliders"; } from "../spline-corridor/spline-corridor-colliders";
import { resolveSplineCorridorJunctionClipIntervals } from "../spline-corridor/spline-corridor-junctions"; import { resolveSplineCorridorJunctionClipIntervals } from "../spline-corridor/spline-corridor-junctions";
import type { SplineCorridorPathClipIntervalMap } from "../spline-corridor/spline-corridor-clips";
import { import {
cloneWorldSettings, cloneWorldSettings,
type WorldSettings type WorldSettings
@@ -544,6 +545,9 @@ export interface RuntimePath {
totalLength: number; totalLength: number;
} }
export interface RuntimeSplineCorridorJunction
extends SplineCorridorJunction {}
export interface RuntimeFoliageDefinition { export interface RuntimeFoliageDefinition {
terrains: Terrain[]; terrains: Terrain[];
layers: FoliageLayerRegistry; layers: FoliageLayerRegistry;
@@ -584,6 +588,8 @@ export interface RuntimeSceneDefinition {
foliage: RuntimeFoliageDefinition; foliage: RuntimeFoliageDefinition;
modelInstances: RuntimeModelInstance[]; modelInstances: RuntimeModelInstance[];
paths: RuntimePath[]; paths: RuntimePath[];
splineCorridorJunctions: RuntimeSplineCorridorJunction[];
splineCorridorClipIntervalsByPath: SplineCorridorPathClipIntervalMap;
npcDefinitions: RuntimeNpcDefinition[]; npcDefinitions: RuntimeNpcDefinition[];
entities: RuntimeEntityCollection; entities: RuntimeEntityCollection;
interactionLinks: InteractionLink[]; interactionLinks: InteractionLink[];
@@ -2047,9 +2053,19 @@ export function buildRuntimeSceneFromDocument(
const paths = getScenePaths(document.paths) const paths = getScenePaths(document.paths)
.filter((path) => path.enabled) .filter((path) => path.enabled)
.map((path) => buildRuntimePath(path, enabledTerrains, document)); .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({ const splineCorridorColliders = deriveSplineCorridorBoxColliders({
paths, paths,
terrains: enabledTerrains terrains: enabledTerrains,
clipIntervalsByPath: splineCorridorClipIntervalsByPath
}); });
const collections = buildRuntimeSceneCollections( const collections = buildRuntimeSceneCollections(
document, document,
@@ -2189,6 +2205,8 @@ export function buildRuntimeSceneFromDocument(
foliage, foliage,
modelInstances, modelInstances,
paths, paths,
splineCorridorJunctions,
splineCorridorClipIntervalsByPath,
npcDefinitions: collections.npcDefinitions, npcDefinitions: collections.npcDefinitions,
entities: collections.entities, entities: collections.entities,
interactionLinks, interactionLinks,