diff --git a/packages/frontend/assets/room/objects/aroma-read-diffuser/aroma-read-diffuser.blend b/packages/frontend/assets/room/objects/aroma-reed-diffuser/aroma-reed-diffuser.blend similarity index 100% rename from packages/frontend/assets/room/objects/aroma-read-diffuser/aroma-read-diffuser.blend rename to packages/frontend/assets/room/objects/aroma-reed-diffuser/aroma-reed-diffuser.blend diff --git a/packages/frontend/assets/room/objects/aroma-read-diffuser/aroma-read-diffuser.glb b/packages/frontend/assets/room/objects/aroma-reed-diffuser/aroma-reed-diffuser.glb similarity index 100% rename from packages/frontend/assets/room/objects/aroma-read-diffuser/aroma-read-diffuser.glb rename to packages/frontend/assets/room/objects/aroma-reed-diffuser/aroma-reed-diffuser.glb diff --git a/packages/frontend/assets/room/objects/aroma-read-diffuser/label.af b/packages/frontend/assets/room/objects/aroma-reed-diffuser/label.af similarity index 100% rename from packages/frontend/assets/room/objects/aroma-read-diffuser/label.af rename to packages/frontend/assets/room/objects/aroma-reed-diffuser/label.af diff --git a/packages/frontend/assets/room/objects/aroma-read-diffuser/textures/label.png b/packages/frontend/assets/room/objects/aroma-reed-diffuser/textures/label.png similarity index 100% rename from packages/frontend/assets/room/objects/aroma-read-diffuser/textures/label.png rename to packages/frontend/assets/room/objects/aroma-reed-diffuser/textures/label.png diff --git a/packages/frontend/assets/room/objects/monitor-speaker/monitor-speaker.blend b/packages/frontend/assets/room/objects/monitor-speaker/monitor-speaker.blend new file mode 100644 index 0000000000..54976724b0 Binary files /dev/null and b/packages/frontend/assets/room/objects/monitor-speaker/monitor-speaker.blend differ diff --git a/packages/frontend/assets/room/objects/monitor-speaker/monitor-speaker.glb b/packages/frontend/assets/room/objects/monitor-speaker/monitor-speaker.glb new file mode 100644 index 0000000000..d7719e0d41 Binary files /dev/null and b/packages/frontend/assets/room/objects/monitor-speaker/monitor-speaker.glb differ diff --git a/packages/frontend/assets/room/objects/speaker/speaker.blend b/packages/frontend/assets/room/objects/speaker/speaker.blend index 0479c5f9e4..ef277ada66 100644 Binary files a/packages/frontend/assets/room/objects/speaker/speaker.blend 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 index 378248334d..0b981461e3 100644 Binary files a/packages/frontend/assets/room/objects/speaker/speaker.glb 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 dc10e59030..bd09ab8168 100644 --- a/packages/frontend/src/utility/room/object-defs.ts +++ b/packages/frontend/src/utility/room/object-defs.ts @@ -6,7 +6,7 @@ import { a4Case } from './objects/a4Case.js'; import { aircon } from './objects/aircon.js'; import { aquarium } from './objects/aquarium.js'; -import { aromaReadDiffuser } from './objects/aromaReadDiffuser.js'; +import { aromaReedDiffuser } from './objects/aromaReedDiffuser.js'; import { banknote } from './objects/banknote.js'; import { bed } from './objects/bed.js'; import { blind } from './objects/blind.js'; @@ -27,6 +27,7 @@ import { letterCase } from './objects/letterCase.js'; import { milk } from './objects/milk.js'; import { mixer } from './objects/mixer.js'; import { monitor } from './objects/monitor.js'; +import { monitorSpeaker } from './objects/monitorSpeaker.js'; import { monstera } from './objects/monstera.js'; import { mug } from './objects/mug.js'; import { openedCardboardBox } from './objects/openedCardboardBox.js'; @@ -53,7 +54,7 @@ export const OBJECT_DEFS = [ a4Case, aircon, aquarium, - aromaReadDiffuser, + aromaReedDiffuser, banknote, bed, blind, @@ -74,6 +75,7 @@ export const OBJECT_DEFS = [ milk, mixer, monitor, + monitorSpeaker, monstera, mug, openedCardboardBox, diff --git a/packages/frontend/src/utility/room/objects/aromaReadDiffuser.ts b/packages/frontend/src/utility/room/objects/aromaReedDiffuser.ts similarity index 92% rename from packages/frontend/src/utility/room/objects/aromaReadDiffuser.ts rename to packages/frontend/src/utility/room/objects/aromaReedDiffuser.ts index cca61477d5..d55f330e51 100644 --- a/packages/frontend/src/utility/room/objects/aromaReadDiffuser.ts +++ b/packages/frontend/src/utility/room/objects/aromaReedDiffuser.ts @@ -6,9 +6,9 @@ import * as BABYLON from '@babylonjs/core'; import { defineObject } from '../engine.js'; -export const aromaReadDiffuser = defineObject({ - id: 'aromaReadDiffuser', - name: 'Aroma Read Diffuser', +export const aromaReedDiffuser = defineObject({ + id: 'aromaReedDiffuser', + name: 'Aroma Reed Diffuser', options: { schema: { bottleColor: { diff --git a/packages/frontend/src/utility/room/objects/monitorSpeaker.ts b/packages/frontend/src/utility/room/objects/monitorSpeaker.ts new file mode 100644 index 0000000000..472c86ffd8 --- /dev/null +++ b/packages/frontend/src/utility/room/objects/monitorSpeaker.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 monitorSpeaker = defineObject({ + id: 'monitorSpeaker', + name: 'Monitor 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: {}, + }; + }, +}); diff --git a/packages/frontend/src/utility/room/objects/speaker.ts b/packages/frontend/src/utility/room/objects/speaker.ts index 27952d71ae..403e60b543 100644 --- a/packages/frontend/src/utility/room/objects/speaker.ts +++ b/packages/frontend/src/utility/room/objects/speaker.ts @@ -11,30 +11,45 @@ export const speaker = defineObject({ name: 'Speaker', options: { schema: { - color: { + outerColor: { type: 'color', - label: 'Color', + label: 'Outer Color', + }, + innerColor: { + type: 'color', + label: 'Inner Color', }, }, default: { - color: [0, 0, 0], + outerColor: [0.45, 0.8, 0], + innerColor: [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 outerMesh = root.getChildMeshes().find(m => m.name.includes('__X_COVER__')) as BABYLON.Mesh; + const outerMaterial = outerMesh.material as BABYLON.PBRMaterial; - const applyColor = () => { - const [r, g, b] = options.color; - bodyMaterial.albedoColor = new BABYLON.Color3(r, g, b); + const innerMesh = root.getChildMeshes().find(m => m.name.includes('__X_BODY__')) as BABYLON.Mesh; + const innerMaterial = innerMesh.material as BABYLON.PBRMaterial; + + const applyOuterColor = () => { + const [r, g, b] = options.outerColor; + outerMaterial.albedoColor = new BABYLON.Color3(r, g, b); }; - applyColor(); + const applyInnerColor = () => { + const [r, g, b] = options.innerColor; + innerMaterial.albedoColor = new BABYLON.Color3(r, g, b); + }; + + applyOuterColor(); + applyInnerColor(); return { onOptionsUpdated: ([k, v]) => { - applyColor(); + applyOuterColor(); + applyInnerColor(); }, interactions: {}, };