From 757fb6b6a07b26e5692e87b7c0b32c5163d28b0e Mon Sep 17 00:00:00 2001 From: Victor Giers Date: Wed, 15 Apr 2026 08:04:18 +0200 Subject: [PATCH] Clone face UV state in runtime-host --- src/runtime-three/runtime-host.ts | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/src/runtime-three/runtime-host.ts b/src/runtime-three/runtime-host.ts index e384fc8f..92cc3593 100644 --- a/src/runtime-three/runtime-host.ts +++ b/src/runtime-three/runtime-host.ts @@ -41,6 +41,7 @@ import type { LoadedImageAsset } from "../assets/image-assets"; import type { LoadedAudioAsset } from "../assets/audio-assets"; import type { ProjectAssetRecord } from "../assets/project-assets"; import { + cloneFaceUvState, type Brush, type WhiteboxFaceId } from "../document/brushes"; @@ -159,6 +160,15 @@ interface CachedMaterialTexture { } function createRuntimeGeometryBrush(brush: RuntimeBoxBrushInstance): Brush { + const faces = Object.fromEntries( + Object.entries(brush.faces).map(([faceId, face]) => [ + faceId, + { + materialId: face.materialId, + uv: cloneFaceUvState(face.uv) + } + ]) + ); const base = { id: brush.id, name: undefined, @@ -176,14 +186,14 @@ function createRuntimeGeometryBrush(brush: RuntimeBoxBrushInstance): Brush { ...base, kind: "box", geometry: brush.geometry as Brush["geometry"], - faces: brush.faces as Brush["faces"] + faces: faces as unknown as Brush["faces"] } as Brush; case "wedge": return { ...base, kind: "wedge", geometry: brush.geometry as Brush["geometry"], - faces: brush.faces as Brush["faces"] + faces: faces as unknown as Brush["faces"] } as Brush; case "radialPrism": return { @@ -191,7 +201,7 @@ function createRuntimeGeometryBrush(brush: RuntimeBoxBrushInstance): Brush { kind: "radialPrism", sideCount: brush.sideCount ?? 12, geometry: brush.geometry as Brush["geometry"], - faces: brush.faces as Brush["faces"] + faces: faces as unknown as Brush["faces"] } as Brush; } }