diff --git a/packages/frontend/assets/room/objects/book/book.blend b/packages/frontend/assets/room/objects/book/book.blend index a049bda7e4..7197764a4f 100644 Binary files a/packages/frontend/assets/room/objects/book/book.blend and b/packages/frontend/assets/room/objects/book/book.blend differ diff --git a/packages/frontend/assets/room/objects/book/book.glb b/packages/frontend/assets/room/objects/book/book.glb index 28cf402eb9..27d55606fd 100644 Binary files a/packages/frontend/assets/room/objects/book/book.glb and b/packages/frontend/assets/room/objects/book/book.glb differ diff --git a/packages/frontend/assets/room/objects/book/template.png b/packages/frontend/assets/room/objects/book/template.png new file mode 100644 index 0000000000..cdc6e04779 Binary files /dev/null and b/packages/frontend/assets/room/objects/book/template.png differ diff --git a/packages/frontend/assets/room/objects/random-books/random-books.blend b/packages/frontend/assets/room/objects/random-books/random-books.blend deleted file mode 100644 index 523240e723..0000000000 Binary files a/packages/frontend/assets/room/objects/random-books/random-books.blend and /dev/null differ diff --git a/packages/frontend/assets/room/objects/random-books/texture.png b/packages/frontend/assets/room/objects/random-books/texture.png index 159426ef6d..38cd7d7fd2 100644 Binary files a/packages/frontend/assets/room/objects/random-books/texture.png and b/packages/frontend/assets/room/objects/random-books/texture.png differ diff --git a/packages/frontend/src/utility/room/objects/book.ts b/packages/frontend/src/utility/room/objects/book.ts index 2dadf4e152..2edd2f2472 100644 --- a/packages/frontend/src/utility/room/objects/book.ts +++ b/packages/frontend/src/utility/room/objects/book.ts @@ -15,29 +15,59 @@ export const book = defineObject({ label: 'Variation', enum: [0, 1], }, + width: { + type: 'range', + label: 'Width', + min: 0, + max: 1, + step: 0.01, + }, + height: { + type: 'range', + label: 'Height', + min: 0, + max: 1, + step: 0.01, + }, + thickness: { + type: 'range', + label: 'thickness', + min: 0, + max: 1, + step: 0.01, + }, }, default: { variation: 0, + width: 0.07, + height: 0.07, + thickness: 0.1, }, }, placement: 'top', - createInstance: ({ options, root }) => { + createInstance: ({ options, model }) => { + const bodyMesh = model.findMesh('__X_BODY__'); + + const applySize = () => { + bodyMesh.morphTargetManager!.getTargetByName('Width')!.influence = options.width; + bodyMesh.morphTargetManager!.getTargetByName('Height')!.influence = options.height; + bodyMesh.morphTargetManager!.getTargetByName('Thickness')!.influence = options.thickness; + model.updated(); + }; + + applySize(); + return { onInited: () => { - const mesh = root.getChildMeshes()[1] as BABYLON.Mesh; - mesh.markVerticesDataAsUpdatable(BABYLON.VertexBuffer.UVKind, true); - const index = options.variation ?? 0; - const x = index % 8; - const y = Math.floor(index / 8); - - const uvs = mesh.getVerticesData(BABYLON.VertexBuffer.UVKind)!; - for (let i = 0; i < uvs.length / 2; i++) { - const u = uvs[i * 2]; - const v = uvs[i * 2 + 1]; - uvs[i * 2] = (u / 8) + (x / 8); - uvs[i * 2 + 1] = (v / 8) + (y / 8); + }, + onOptionsUpdated: ([k, v]) => { + switch (k) { + case 'width': + case 'height': + case 'thickness': + applySize(); + break; } - mesh.updateVerticesData(BABYLON.VertexBuffer.UVKind, uvs); }, interactions: {}, }; diff --git a/packages/frontend/src/utility/room/objects/randomBooks.ts b/packages/frontend/src/utility/room/objects/randomBooks.ts index 6b140c865f..1ecfa857e2 100644 --- a/packages/frontend/src/utility/room/objects/randomBooks.ts +++ b/packages/frontend/src/utility/room/objects/randomBooks.ts @@ -16,13 +16,20 @@ export const randomBooks = defineObject({ name: 'randomBooks', options: { schema: { + plainCover: { + type: 'boolean', + label: 'Plain cover', + }, }, default: { + plainCover: false, }, }, placement: 'top', - createInstance: ({ options, model }) => { + createInstance: ({ options, model, scene }) => { const bodyMesh = model.findMesh('__X_BODY__'); + const tex = new BABYLON.Texture('/client-assets/room/objects/random-books/texture.png', scene, false, false); + bodyMesh.material.albedoTexture = tex; const count = 10; @@ -34,7 +41,7 @@ export const randomBooks = defineObject({ mesh.morphTargetManager = bodyMesh.morphTargetManager.clone(); mesh.markVerticesDataAsUpdatable(BABYLON.VertexBuffer.UVKind, true); - const index = Math.floor(Math.random() * 8); + const index = Math.floor(Math.random() * 15); const x = index % 8; const y = Math.floor(index / 8);