diff --git a/packages/frontend/assets/room/object-thumbs/sofa.png b/packages/frontend/assets/room/object-thumbs/sofa.png new file mode 100644 index 0000000000..cdf2fbdd1f Binary files /dev/null and b/packages/frontend/assets/room/object-thumbs/sofa.png differ diff --git a/packages/frontend/assets/room/objects/cup-noodle/cup-noodle.blend b/packages/frontend/assets/room/objects/cup-noodle/cup-noodle.blend index 7528c3b969..e25fcc5b57 100644 Binary files a/packages/frontend/assets/room/objects/cup-noodle/cup-noodle.blend and b/packages/frontend/assets/room/objects/cup-noodle/cup-noodle.blend differ diff --git a/packages/frontend/assets/room/objects/cup-noodle/cup-noodle.glb b/packages/frontend/assets/room/objects/cup-noodle/cup-noodle.glb index affc41c198..ce15be0345 100644 Binary files a/packages/frontend/assets/room/objects/cup-noodle/cup-noodle.glb and b/packages/frontend/assets/room/objects/cup-noodle/cup-noodle.glb differ diff --git a/packages/frontend/assets/room/objects/sofa/sofa.blend b/packages/frontend/assets/room/objects/sofa/sofa.blend index fb5aa51a2c..b70b9d6e5b 100644 Binary files a/packages/frontend/assets/room/objects/sofa/sofa.blend and b/packages/frontend/assets/room/objects/sofa/sofa.blend differ diff --git a/packages/frontend/assets/room/objects/sofa/sofa.glb b/packages/frontend/assets/room/objects/sofa/sofa.glb index 6ce77d94ac..c74f13c392 100644 Binary files a/packages/frontend/assets/room/objects/sofa/sofa.glb and b/packages/frontend/assets/room/objects/sofa/sofa.glb differ diff --git a/packages/frontend/src/world/room/object-defs.ts b/packages/frontend/src/world/room/object-defs.ts index ff37bd6be6..c4c5a35516 100644 --- a/packages/frontend/src/world/room/object-defs.ts +++ b/packages/frontend/src/world/room/object-defs.ts @@ -69,6 +69,7 @@ import { roundRug } from './objects/roundRug.js'; import { router } from './objects/router.js'; import { siphon } from './objects/siphon.js'; import { snakeplant } from './objects/snakeplant.js'; +import { sofa } from './objects/sofa.js'; import { speaker } from './objects/speaker.js'; import { speakerStand } from './objects/speakerStand.js'; import { sprayer } from './objects/sprayer.js'; @@ -160,6 +161,7 @@ export const OBJECT_DEFS = [ router, siphon, snakeplant, + sofa, speaker, speakerStand, sprayer, diff --git a/packages/frontend/src/world/room/objects/sofa.ts b/packages/frontend/src/world/room/objects/sofa.ts new file mode 100644 index 0000000000..cc477c35aa --- /dev/null +++ b/packages/frontend/src/world/room/objects/sofa.ts @@ -0,0 +1,44 @@ +/* + * SPDX-FileCopyrightText: syuilo and misskey-project + * SPDX-License-Identifier: AGPL-3.0-only + */ + +import * as BABYLON from '@babylonjs/core'; +import { defineObject } from '../object.js'; + +export const sofa = defineObject({ + id: 'sofa', + name: 'Sofa', + options: { + schema: { + bodyColor: { + type: 'color', + label: 'bodyColor', + }, + }, + default: { + bodyColor: [0.4, 0.4, 0.4], + }, + }, + placement: 'floor', + hasCollisions: true, + canPreMeshesMerging: true, + hasTexture: false, + createInstance: ({ options, model }) => { + const bodyMaterial = model.findMaterial('__X_BODY__'); + + const applyBodyColor = () => { + const [r, g, b] = options.bodyColor; + bodyMaterial.albedoColor = new BABYLON.Color3(r, g, b); + }; + + applyBodyColor(); + + return { + onOptionsUpdated: ([k, v]) => { + applyBodyColor(); + }, + interactions: {}, + }; + }, +});