diff --git a/packages/frontend/assets/room/objects/color-box/color-box.blend b/packages/frontend/assets/room/objects/color-box/color-box.blend index 2ed9d22fed..baea82ed88 100644 Binary files a/packages/frontend/assets/room/objects/color-box/color-box.blend and b/packages/frontend/assets/room/objects/color-box/color-box.blend differ diff --git a/packages/frontend/assets/room/objects/color-box/color-box.glb b/packages/frontend/assets/room/objects/color-box/color-box.glb index adba59a839..2afbf55b5c 100644 Binary files a/packages/frontend/assets/room/objects/color-box/color-box.glb and b/packages/frontend/assets/room/objects/color-box/color-box.glb differ diff --git a/packages/frontend/assets/room/objects/color-box/textures/wood-normal.png b/packages/frontend/assets/room/objects/color-box/textures/wood-normal.png new file mode 100644 index 0000000000..4162783675 Binary files /dev/null and b/packages/frontend/assets/room/objects/color-box/textures/wood-normal.png differ diff --git a/packages/frontend/assets/room/objects/color-box/textures/wood.png b/packages/frontend/assets/room/objects/color-box/textures/wood.png new file mode 100644 index 0000000000..dabbf38c15 Binary files /dev/null and b/packages/frontend/assets/room/objects/color-box/textures/wood.png differ diff --git a/packages/frontend/src/utility/room/engine.ts b/packages/frontend/src/utility/room/engine.ts index 2272a60bd5..f160fa8174 100644 --- a/packages/frontend/src/utility/room/engine.ts +++ b/packages/frontend/src/utility/room/engine.ts @@ -212,7 +212,13 @@ export class RoomEngine { constructor(roomState: RoomState, options: { canvas: HTMLCanvasElement; }) { - this.roomState = roomState; + this.roomState = { + ...roomState, + installedObjects: roomState.installedObjects.map(o => ({ + ...o, + options: { ...getObjectDef(o.type).options.default, ...o.options }, + })), + }; this.canvas = options.canvas; registerBuiltInLoaders(); @@ -904,7 +910,7 @@ export class RoomEngine { const objectInstance = def.createInstance({ room: this, root, - options: args.options, // todo: merge with default options + options: args.options, loaderResult: loaderResult, meshUpdated: () => { meshUpdated(this.objectMeshs.get(args.id)!.getChildMeshes() as BABYLON.Mesh[]); diff --git a/packages/frontend/src/utility/room/objects/colorBox.ts b/packages/frontend/src/utility/room/objects/colorBox.ts index a9beb74c04..7f9b0b0374 100644 --- a/packages/frontend/src/utility/room/objects/colorBox.ts +++ b/packages/frontend/src/utility/room/objects/colorBox.ts @@ -3,18 +3,39 @@ * SPDX-License-Identifier: AGPL-3.0-only */ +import * as BABYLON from '@babylonjs/core'; import { defineObject } from '../engine.js'; export const colorBox = defineObject({ id: 'colorBox', name: 'Color Box', options: { - schema: {}, - default: {}, + schema: { + color: { + type: 'color', + label: 'Color', + }, + }, + default: { + color: [1, 1, 1], + }, }, placement: 'floor', - createInstance: () => { + 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: {}, }; },