diff --git a/packages/frontend/assets/room/objects/piano/piano.blend b/packages/frontend/assets/room/objects/piano/piano.blend index 7653cdf672..1a60e23c7f 100644 Binary files a/packages/frontend/assets/room/objects/piano/piano.blend and b/packages/frontend/assets/room/objects/piano/piano.blend differ diff --git a/packages/frontend/assets/room/objects/piano/piano.glb b/packages/frontend/assets/room/objects/piano/piano.glb index 7242e78ceb..7006aa681d 100644 Binary files a/packages/frontend/assets/room/objects/piano/piano.glb and b/packages/frontend/assets/room/objects/piano/piano.glb differ diff --git a/packages/frontend/src/utility/room/object-defs.ts b/packages/frontend/src/utility/room/object-defs.ts index abf241416c..ce9c7451db 100644 --- a/packages/frontend/src/utility/room/object-defs.ts +++ b/packages/frontend/src/utility/room/object-defs.ts @@ -46,6 +46,7 @@ import { openedCardboardBox } from './objects/openedCardboardBox.js'; import { pachira } from './objects/pachira.js'; import { pc } from './objects/pc.js'; import { petBottle } from './objects/petBottle.js'; +import { piano } from './objects/piano.js'; import { pictureFrame } from './objects/pictureFrame.js'; import { plant } from './objects/plant.js'; import { plant2 } from './objects/plant2.js'; @@ -114,6 +115,7 @@ export const OBJECT_DEFS = [ pachira, pc, petBottle, + piano, pictureFrame, plant, plant2, diff --git a/packages/frontend/src/utility/room/objects/piano.ts b/packages/frontend/src/utility/room/objects/piano.ts new file mode 100644 index 0000000000..2877f08f60 --- /dev/null +++ b/packages/frontend/src/utility/room/objects/piano.ts @@ -0,0 +1,41 @@ +/* + * SPDX-FileCopyrightText: syuilo and misskey-project + * SPDX-License-Identifier: AGPL-3.0-only + */ + +import * as BABYLON from '@babylonjs/core'; +import { defineObject } from '../engine.js'; + +export const piano = defineObject({ + id: 'piano', + name: 'Piano', + options: { + schema: { + bodyColor: { + type: 'color', + label: 'bodyColor', + }, + }, + default: { + bodyColor: [0, 0, 0], + }, + }, + placement: 'floor', + 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: {}, + }; + }, +});