diff --git a/packages/frontend/assets/room/objects/photoframe/photo-uv.png b/packages/frontend/assets/room/objects/photoframe/photo-uv.png deleted file mode 100644 index 9b94906413..0000000000 Binary files a/packages/frontend/assets/room/objects/photoframe/photo-uv.png and /dev/null differ diff --git a/packages/frontend/assets/room/objects/photoframe/photo.jpg b/packages/frontend/assets/room/objects/photoframe/photo.jpg deleted file mode 100644 index af14f0f36a..0000000000 Binary files a/packages/frontend/assets/room/objects/photoframe/photo.jpg and /dev/null differ diff --git a/packages/frontend/assets/room/objects/photoframe/photoframe.blend b/packages/frontend/assets/room/objects/photoframe/photoframe.blend deleted file mode 100644 index 4224cde45b..0000000000 Binary files a/packages/frontend/assets/room/objects/photoframe/photoframe.blend and /dev/null differ diff --git a/packages/frontend/assets/room/objects/photoframe/photoframe.glb b/packages/frontend/assets/room/objects/photoframe/photoframe.glb deleted file mode 100644 index 4255a77de6..0000000000 Binary files a/packages/frontend/assets/room/objects/photoframe/photoframe.glb and /dev/null differ diff --git a/packages/frontend/assets/room/objects/picture-frame/picture-frame.blend b/packages/frontend/assets/room/objects/picture-frame/picture-frame.blend index 9901727872..33d703ec7b 100644 Binary files a/packages/frontend/assets/room/objects/picture-frame/picture-frame.blend and b/packages/frontend/assets/room/objects/picture-frame/picture-frame.blend differ diff --git a/packages/frontend/assets/room/objects/picture-frame/picture-frame.glb b/packages/frontend/assets/room/objects/picture-frame/picture-frame.glb index adaa1ffe69..bbb6ee48fb 100644 Binary files a/packages/frontend/assets/room/objects/picture-frame/picture-frame.glb and b/packages/frontend/assets/room/objects/picture-frame/picture-frame.glb differ diff --git a/packages/frontend/assets/room/objects/tabletop-picture-frame/tabletop-picture-frame.blend b/packages/frontend/assets/room/objects/tabletop-picture-frame/tabletop-picture-frame.blend index ce1d379dca..3ae45934a6 100644 Binary files a/packages/frontend/assets/room/objects/tabletop-picture-frame/tabletop-picture-frame.blend and b/packages/frontend/assets/room/objects/tabletop-picture-frame/tabletop-picture-frame.blend differ diff --git a/packages/frontend/assets/room/objects/tabletop-picture-frame/tabletop-picture-frame.glb b/packages/frontend/assets/room/objects/tabletop-picture-frame/tabletop-picture-frame.glb index 0154a7ba06..195734f8f3 100644 Binary files a/packages/frontend/assets/room/objects/tabletop-picture-frame/tabletop-picture-frame.glb and b/packages/frontend/assets/room/objects/tabletop-picture-frame/tabletop-picture-frame.glb differ diff --git a/packages/frontend/src/pages/room.vue b/packages/frontend/src/pages/room.vue index 63158deb05..802ada2204 100644 --- a/packages/frontend/src/pages/room.vue +++ b/packages/frontend/src/pages/room.vue @@ -61,6 +61,7 @@ SPDX-License-Identifier: AGPL-3.0-only Edit mode: {{ engine.isEditMode.value ? 'on' : 'off' }} addObject save + showBoundingBox @@ -578,6 +579,11 @@ function removeSelectedObject() { canvas.value!.focus(); } +function showBoundingBox() { + engine.value?.showBoundingBox(); + canvas.value!.focus(); +} + function getHex(c: [number, number, number]) { return `#${c.map(x => Math.round(x * 255).toString(16).padStart(2, '0')).join('')}`; } diff --git a/packages/frontend/src/utility/room/engine.ts b/packages/frontend/src/utility/room/engine.ts index d112a396d2..49f9c720b2 100644 --- a/packages/frontend/src/utility/room/engine.ts +++ b/packages/frontend/src/utility/room/engine.ts @@ -48,8 +48,35 @@ type RoomStateObject = { sticky?: string | null; }; +type SimpleHeyaWallBase = { + material: null | 'wood' | 'concrete'; + color: [number, number, number]; +}; + +type Heya = { + type: 'simple'; + options: { + size: [number, number]; + window: 'none' | 'kosidakamado' | 'demado' | 'hakidasimado'; + wallN: SimpleHeyaWallBase; + wallE: SimpleHeyaWallBase; + wallS: SimpleHeyaWallBase; + wallW: SimpleHeyaWallBase; + flooring: { + material: null | 'wood' | 'concrete'; + color: [number, number, number]; + }; + ceiling: { + material: null | 'wood' | 'concrete'; + color: [number, number, number]; + }; + }; +} | { + type: 'japanese'; +}; + type RoomState = { - roomType: 'default'; + heya: Heya; installedObjects: RoomStateObject[]; }; @@ -865,7 +892,6 @@ export class RoomEngine { // シェイプキー(morph)を考慮してbounding boxを更新するために必要 mesh.refreshBoundingInfo({ applyMorph: true }); - //mesh.showBoundingBox = _DEV_; mesh.metadata = metadata; mesh.checkCollisions = !hasCollisionMesh; @@ -1289,6 +1315,14 @@ export class RoomEngine { } } + public showBoundingBox() { + for (const mesh of this.objectMeshs.values()) { + for (const m of mesh.getChildMeshes()) { + m.showBoundingBox = true; + } + } + } + public resize() { this.engine.resize(); } diff --git a/packages/frontend/src/utility/room/objects/pictureFrame.ts b/packages/frontend/src/utility/room/objects/pictureFrame.ts index d12ab1aad3..7c6dd86f32 100644 --- a/packages/frontend/src/utility/room/objects/pictureFrame.ts +++ b/packages/frontend/src/utility/room/objects/pictureFrame.ts @@ -125,6 +125,7 @@ export const pictureFrame = defineObject({ matMesh.morphTargetManager!.getTargetByName('MatV')!.influence = options.matVThickness * options.height; pictureMesh.morphTargetManager!.getTargetByName('Width')!.influence = options.width * (1 - options.matHThickness); pictureMesh.morphTargetManager!.getTargetByName('Height')!.influence = options.height * (1 - options.matVThickness); + matMesh.isVisible = options.matHThickness > 0 || options.matVThickness > 0; meshUpdated(); applyFit(); diff --git a/packages/frontend/src/utility/room/objects/tabletopPictureFrame.ts b/packages/frontend/src/utility/room/objects/tabletopPictureFrame.ts index 352564e14f..3811b44f74 100644 --- a/packages/frontend/src/utility/room/objects/tabletopPictureFrame.ts +++ b/packages/frontend/src/utility/room/objects/tabletopPictureFrame.ts @@ -130,6 +130,7 @@ export const tabletopPictureFrame = defineObject({ pictureMesh.morphTargetManager!.getTargetByName('Height')!.influence = options.height * (1 - options.matVThickness); pictureMesh.morphTargetManager!.getTargetByName('MatH')!.influence = options.matHThickness * options.width; pictureMesh.morphTargetManager!.getTargetByName('MatV')!.influence = options.matVThickness * options.height; + matMesh.isVisible = options.matHThickness > 0 || options.matVThickness > 0; meshUpdated(); applyFit();