diff --git a/packages/frontend/assets/room/objects/book/book.af b/packages/frontend/assets/room/objects/book/book.af new file mode 100644 index 0000000000..d06ac9155d Binary files /dev/null and b/packages/frontend/assets/room/objects/book/book.af differ diff --git a/packages/frontend/assets/room/objects/book/book.blend b/packages/frontend/assets/room/objects/book/book.blend index 0d4899d4ae..95dde5dccf 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 546893da06..dd9114a851 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/textures/book.png b/packages/frontend/assets/room/objects/book/textures/book.png new file mode 100644 index 0000000000..65c306d8ee Binary files /dev/null and b/packages/frontend/assets/room/objects/book/textures/book.png differ diff --git a/packages/frontend/src/pages/room.vue b/packages/frontend/src/pages/room.vue index fde0a882fd..23d743446c 100644 --- a/packages/frontend/src/pages/room.vue +++ b/packages/frontend/src/pages/room.vue @@ -153,6 +153,12 @@ onMounted(() => { type: 'wall-clock', position: [-150, 200, 100], rotation: [0, 0, 0], + }, { + id: 't', + type: 'book', + position: [10, 100, 10], + rotation: [0, 0, 0], + variation: '1', }], }, { canvas: canvas.value!, diff --git a/packages/frontend/src/utility/room/engine.ts b/packages/frontend/src/utility/room/engine.ts index 3a97884c69..ed209584f4 100644 --- a/packages/frontend/src/utility/room/engine.ts +++ b/packages/frontend/src/utility/room/engine.ts @@ -99,6 +99,29 @@ const OBJECTS = { } }, }, + 'book': { + placement: 'top', + onInit: (room, o, obj) => { + const mesh = obj.meshes[2] as BABYLON.Mesh; + console.log(obj.meshes); + mesh.markVerticesDataAsUpdatable(BABYLON.VertexBuffer.UVKind, true); + if (o.variation === '1') { + const index = 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; + uvs[i * 2 + 1] = v / 8; + } + mesh.updateVerticesData(BABYLON.VertexBuffer.UVKind, uvs); + } + }, + }, 'lava-lamp': { placement: 'top', onInit: (room, o, obj) => { @@ -331,7 +354,7 @@ export class RoomEngine { descendantStickyObjectIds: string[]; } | null = null; private highlightedObjectId: string | null = null; - private time: 0 | 1 | 2 = 2; // 0: 昼, 1: 夕, 2: 夜 + private time: 0 | 1 | 2 = 1; // 0: 昼, 1: 夕, 2: 夜 private roomCollisionMeshes: BABYLON.AbstractMesh[] = []; private def: RoomDef; public enableGridSnapping = false;