diff --git a/packages/frontend/assets/room/objects/picture-frame/picture-frame.blend b/packages/frontend/assets/room/objects/picture-frame/picture-frame.blend new file mode 100644 index 0000000000..bc77b1ba5c Binary files /dev/null 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 new file mode 100644 index 0000000000..35555858a7 Binary files /dev/null and b/packages/frontend/assets/room/objects/picture-frame/picture-frame.glb differ diff --git a/packages/frontend/src/utility/room/object-defs.ts b/packages/frontend/src/utility/room/object-defs.ts index 8782fad9cb..4e80ec1244 100644 --- a/packages/frontend/src/utility/room/object-defs.ts +++ b/packages/frontend/src/utility/room/object-defs.ts @@ -40,6 +40,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 { pictureFrame } from './objects/pictureFrame.js'; import { plant } from './objects/plant.js'; import { plant2 } from './objects/plant2.js'; import { powerStrip } from './objects/powerStrip.js'; @@ -94,6 +95,7 @@ export const OBJECT_DEFS = [ pachira, pc, petBottle, + pictureFrame, plant, plant2, powerStrip, diff --git a/packages/frontend/src/utility/room/objects/pictureFrame.ts b/packages/frontend/src/utility/room/objects/pictureFrame.ts new file mode 100644 index 0000000000..a5d5a4ab29 --- /dev/null +++ b/packages/frontend/src/utility/room/objects/pictureFrame.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 '../engine.js'; + +export const pictureFrame = defineObject({ + id: 'pictureFrame', + name: 'Picture Frame', + options: { + schema: { + frameColor: { + type: 'color', + label: 'Frame color', + }, + }, + default: { + frameColor: [0.71, 0.58, 0.39], + }, + }, + placement: 'side', + createInstance: ({ room, root, options, findMaterial }) => { + const frameMaterial = findMaterial('__X_FRAME__'); + + const applyFrameColor = () => { + const [r, g, b] = options.frameColor; + frameMaterial.albedoColor = new BABYLON.Color3(r, g, b); + }; + + applyFrameColor(); + + return { + onInited: () => { + + }, + onOptionsUpdated: ([k, v]) => { + applyFrameColor(); + }, + interactions: {}, + }; + }, +});