diff --git a/src/runtime-three/runtime-project-scheduler.ts b/src/runtime-three/runtime-project-scheduler.ts index 1ad1888e..192cc88c 100644 --- a/src/runtime-three/runtime-project-scheduler.ts +++ b/src/runtime-three/runtime-project-scheduler.ts @@ -72,6 +72,8 @@ export interface RuntimeProjectSchedulePathDefinition { loop: boolean; curveMode?: ScenePathCurveMode; sampledResolution?: number; + glueToTerrain?: boolean; + terrainOffset?: number; points: RuntimeProjectSchedulePathPoint[]; segments: RuntimeProjectSchedulePathSegment[]; totalLength: number; diff --git a/src/runtime-three/runtime-scene-build.ts b/src/runtime-three/runtime-scene-build.ts index 15b45f14..1234189d 100644 --- a/src/runtime-three/runtime-scene-build.ts +++ b/src/runtime-three/runtime-scene-build.ts @@ -1998,7 +1998,7 @@ export function buildRuntimeSceneFromDocument( const modelInstances = enabledModelInstances.map(buildRuntimeModelInstance); const paths = getScenePaths(document.paths) .filter((path) => path.enabled) - .map(buildRuntimePath); + .map((path) => buildRuntimePath(path, enabledTerrains)); const collections = buildRuntimeSceneCollections( document, options.runtimeClock ?? null, diff --git a/tests/unit/path-inspector.integration.test.tsx b/tests/unit/path-inspector.integration.test.tsx index a8c1e891..ca978f3f 100644 --- a/tests/unit/path-inspector.integration.test.tsx +++ b/tests/unit/path-inspector.integration.test.tsx @@ -134,6 +134,8 @@ describe("Path inspector", () => { expect(screen.getByTestId("path-loop")).not.toBeChecked(); expect(screen.getByTestId("path-curve-mode")).toHaveValue("linear"); expect(screen.getByTestId("path-sampled-resolution")).toHaveValue(12); + expect(screen.getByTestId("path-glue-to-terrain")).not.toBeChecked(); + expect(screen.getByTestId("path-terrain-offset")).toHaveValue(0); expect(screen.getByTestId("path-point-0-x")).toHaveValue(-1); expect(screen.getByTestId("path-point-1-x")).toHaveValue(1); @@ -154,6 +156,12 @@ describe("Path inspector", () => { value: "16" } }); + fireEvent.click(screen.getByTestId("path-glue-to-terrain")); + fireEvent.change(screen.getByTestId("path-terrain-offset"), { + target: { + value: "0.25" + } + }); fireEvent.change(screen.getByTestId("path-point-1-z"), { target: { value: "2" @@ -169,7 +177,9 @@ describe("Path inspector", () => { name: "Patrol Route", loop: true, curveMode: "catmullRom", - sampledResolution: 16 + sampledResolution: 16, + glueToTerrain: true, + terrainOffset: 0.25 }); expect(updatedPath?.points).toHaveLength(3); expect(updatedPath?.points[1]?.position).toEqual({