diff --git a/packages/frontend/assets/room/objects/monstera/monstera.blend b/packages/frontend/assets/room/objects/monstera/monstera.blend index 40e16e5136..355b267b6b 100644 Binary files a/packages/frontend/assets/room/objects/monstera/monstera.blend and b/packages/frontend/assets/room/objects/monstera/monstera.blend differ diff --git a/packages/frontend/assets/room/objects/monstera/monstera.glb b/packages/frontend/assets/room/objects/monstera/monstera.glb index ba6621dc7f..ea6618a29a 100644 Binary files a/packages/frontend/assets/room/objects/monstera/monstera.glb and b/packages/frontend/assets/room/objects/monstera/monstera.glb differ diff --git a/packages/frontend/assets/room/objects/snakeplant/snakeplant.blend b/packages/frontend/assets/room/objects/snakeplant/snakeplant.blend index 565b9ea377..d70d185bb4 100644 Binary files a/packages/frontend/assets/room/objects/snakeplant/snakeplant.blend and b/packages/frontend/assets/room/objects/snakeplant/snakeplant.blend differ diff --git a/packages/frontend/assets/room/objects/snakeplant/snakeplant.glb b/packages/frontend/assets/room/objects/snakeplant/snakeplant.glb index 1b9a0575d2..ded43ec401 100644 Binary files a/packages/frontend/assets/room/objects/snakeplant/snakeplant.glb and b/packages/frontend/assets/room/objects/snakeplant/snakeplant.glb differ diff --git a/packages/frontend/src/world/room/objects/monstera.ts b/packages/frontend/src/world/room/objects/monstera.ts index 7b502aa4d1..8897bb1ef1 100644 --- a/packages/frontend/src/world/room/objects/monstera.ts +++ b/packages/frontend/src/world/room/objects/monstera.ts @@ -3,20 +3,43 @@ * SPDX-License-Identifier: AGPL-3.0-only */ +import * as BABYLON from '@babylonjs/core'; import { defineObject } from '../object.js'; export const monstera = defineObject({ id: 'monstera', name: 'Monstera', options: { - schema: {}, - default: {}, + schema: { + potColor: { + type: 'color', + label: 'potColor', + }, + }, + default: { + potColor: [0.5, 0.5, 0.5], + }, }, placement: 'top', hasCollisions: false, hasTexture: true, - createInstance: () => { + canPreMeshesMerging: true, + createInstance: ({ options, model }) => { + const potMaterial = model.findMaterial('__X_POT__'); + + const applyPotColor = () => { + const [r, g, b] = options.potColor; + potMaterial.albedoColor = new BABYLON.Color3(r, g, b); + }; + + applyPotColor(); + return { + onOptionsUpdated: ([k, v]) => { + switch (k) { + case 'potColor': applyPotColor(); break; + } + }, interactions: {}, }; }, diff --git a/packages/frontend/src/world/room/objects/snakeplant.ts b/packages/frontend/src/world/room/objects/snakeplant.ts index be9bacaeed..ea2aa83f46 100644 --- a/packages/frontend/src/world/room/objects/snakeplant.ts +++ b/packages/frontend/src/world/room/objects/snakeplant.ts @@ -3,20 +3,43 @@ * SPDX-License-Identifier: AGPL-3.0-only */ +import * as BABYLON from '@babylonjs/core'; import { defineObject } from '../object.js'; export const snakeplant = defineObject({ id: 'snakeplant', name: 'Snake Plant', options: { - schema: {}, - default: {}, + schema: { + potColor: { + type: 'color', + label: 'potColor', + }, + }, + default: { + potColor: [0.7, 0.7, 0.7], + }, }, placement: 'top', hasCollisions: false, hasTexture: true, - createInstance: () => { + canPreMeshesMerging: true, + createInstance: ({ options, model }) => { + const potMaterial = model.findMaterial('__X_POT__'); + + const applyPotColor = () => { + const [r, g, b] = options.potColor; + potMaterial.albedoColor = new BABYLON.Color3(r, g, b); + }; + + applyPotColor(); + return { + onOptionsUpdated: ([k, v]) => { + switch (k) { + case 'potColor': applyPotColor(); break; + } + }, interactions: {}, }; },