diff --git a/packages/frontend/assets/room/objects/pc/motherboard-uv.png b/packages/frontend/assets/room/objects/pc-legacy/motherboard-uv.png similarity index 100% rename from packages/frontend/assets/room/objects/pc/motherboard-uv.png rename to packages/frontend/assets/room/objects/pc-legacy/motherboard-uv.png diff --git a/packages/frontend/assets/room/objects/pc/motherboard-uv.psd b/packages/frontend/assets/room/objects/pc-legacy/motherboard-uv.psd similarity index 100% rename from packages/frontend/assets/room/objects/pc/motherboard-uv.psd rename to packages/frontend/assets/room/objects/pc-legacy/motherboard-uv.psd diff --git a/packages/frontend/assets/room/objects/pc/motherboard.jpg b/packages/frontend/assets/room/objects/pc-legacy/motherboard.jpg similarity index 100% rename from packages/frontend/assets/room/objects/pc/motherboard.jpg rename to packages/frontend/assets/room/objects/pc-legacy/motherboard.jpg diff --git a/packages/frontend/assets/room/objects/pc-legacy/pc.blend b/packages/frontend/assets/room/objects/pc-legacy/pc.blend new file mode 100644 index 0000000000..13dfec6ccc Binary files /dev/null and b/packages/frontend/assets/room/objects/pc-legacy/pc.blend differ diff --git a/packages/frontend/assets/room/objects/pc/pc.glb b/packages/frontend/assets/room/objects/pc-legacy/pc.glb similarity index 100% rename from packages/frontend/assets/room/objects/pc/pc.glb rename to packages/frontend/assets/room/objects/pc-legacy/pc.glb diff --git a/packages/frontend/assets/room/objects/pc/pc.blend b/packages/frontend/assets/room/objects/pc/pc.blend index 13dfec6ccc..9c2e3a4a9e 100644 Binary files a/packages/frontend/assets/room/objects/pc/pc.blend and b/packages/frontend/assets/room/objects/pc/pc.blend differ diff --git a/packages/frontend/assets/room/objects/pc/uv.png b/packages/frontend/assets/room/objects/pc/uv.png new file mode 100644 index 0000000000..dfda71d5cb Binary files /dev/null and b/packages/frontend/assets/room/objects/pc/uv.png differ diff --git a/packages/frontend/assets/room/objects/speaker/speaker.blend b/packages/frontend/assets/room/objects/speaker/speaker.blend new file mode 100644 index 0000000000..0479c5f9e4 Binary files /dev/null and b/packages/frontend/assets/room/objects/speaker/speaker.blend differ diff --git a/packages/frontend/assets/room/objects/speaker/speaker.glb b/packages/frontend/assets/room/objects/speaker/speaker.glb new file mode 100644 index 0000000000..378248334d Binary files /dev/null and b/packages/frontend/assets/room/objects/speaker/speaker.glb differ diff --git a/packages/frontend/src/utility/room/object-defs.ts b/packages/frontend/src/utility/room/object-defs.ts index 1c50f321a6..b09d81681d 100644 --- a/packages/frontend/src/utility/room/object-defs.ts +++ b/packages/frontend/src/utility/room/object-defs.ts @@ -34,6 +34,7 @@ import { powerStrip } from './objects/powerStrip.js'; import { rolledUpPoster } from './objects/rolledUpPoster.js'; import { roundRug } from './objects/roundRug.js'; import { snakeplant } from './objects/snakeplant.js'; +import { speaker } from './objects/speaker.js'; import { steelRack } from './objects/steelRack.js'; import { tabletopCalendar } from './objects/tabletopCalendar.js'; import { tabletopDigitalClock } from './objects/tabletopDigitalClock.js'; @@ -74,6 +75,7 @@ export const OBJECT_DEFS = [ rolledUpPoster, roundRug, snakeplant, + speaker, steelRack, tabletopCalendar, tabletopDigitalClock, diff --git a/packages/frontend/src/utility/room/objects/speaker.ts b/packages/frontend/src/utility/room/objects/speaker.ts new file mode 100644 index 0000000000..27952d71ae --- /dev/null +++ b/packages/frontend/src/utility/room/objects/speaker.ts @@ -0,0 +1,42 @@ +/* + * 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 speaker = defineObject({ + id: 'speaker', + name: 'Speaker', + options: { + schema: { + color: { + type: 'color', + label: 'Color', + }, + }, + default: { + color: [0, 0, 0], + }, + }, + placement: 'top', + createInstance: ({ options, root }) => { + const bodyMesh = root.getChildMeshes().find(m => m.name.includes('__X_BODY__')) as BABYLON.Mesh; + const bodyMaterial = bodyMesh.material as BABYLON.PBRMaterial; + + const applyColor = () => { + const [r, g, b] = options.color; + bodyMaterial.albedoColor = new BABYLON.Color3(r, g, b); + }; + + applyColor(); + + return { + onOptionsUpdated: ([k, v]) => { + applyColor(); + }, + interactions: {}, + }; + }, +});