From c6d0855a2e4efa1df45e6f1abcce5942afb44fe4 Mon Sep 17 00:00:00 2001 From: syuilo <4439005+syuilo@users.noreply.github.com> Date: Thu, 28 May 2026 10:15:02 +0900 Subject: [PATCH] wip --- .../src/PlayerContainer.ts | 3 +++ .../src/avatarPreviewEngine.ts | 20 ++++++++++--------- .../pages/rooms/edit-world-avatar-dialog.vue | 15 +++++++++++--- .../world/avatarPreviewEngineController.ts | 5 +++-- 4 files changed, 29 insertions(+), 14 deletions(-) diff --git a/packages/frontend-misskey-world-engine/src/PlayerContainer.ts b/packages/frontend-misskey-world-engine/src/PlayerContainer.ts index 903822e067..41e708dd95 100644 --- a/packages/frontend-misskey-world-engine/src/PlayerContainer.ts +++ b/packages/frontend-misskey-world-engine/src/PlayerContainer.ts @@ -75,6 +75,9 @@ export class PlayerContainer { mat.backFaceCulling = false; mesh.material = mat; } + if (mesh.name.includes('__BODY__')) { + mesh.material.albedoColor = new BABYLON.Color3(this.profile.worldAvatar.body.color[0], this.profile.worldAvatar.body.color[1], this.profile.worldAvatar.body.color[2]); + } } this.registerMeshes(this.subRoot.getChildMeshes()); diff --git a/packages/frontend-misskey-world-engine/src/avatarPreviewEngine.ts b/packages/frontend-misskey-world-engine/src/avatarPreviewEngine.ts index 412ad7893e..49a348d68a 100644 --- a/packages/frontend-misskey-world-engine/src/avatarPreviewEngine.ts +++ b/packages/frontend-misskey-world-engine/src/avatarPreviewEngine.ts @@ -178,19 +178,21 @@ export class AvatarPreviewEngine extends EngineBase<{ // PlayerPreviewEngineć« this.pipeline.addCamera(this.camera); this.sr.enableSnapshotRendering(); - - return { - options: this.avatarOptions, - }; } - public updateObjectOption(key: string, value: any) { - if (this.avatarOptions == null) return; - this.avatarOptions[key] = value; - + public clearPlayer() { + this.sr.disableSnapshotRendering(); if (this.playerContainer != null) { - this.playerContainer.updateAvatarOption(this.avatarOptions); + this.playerContainer.destroy(); + this.playerContainer = null; } + this.sr.enableSnapshotRendering(); + } + + public async updateAvatar(value: WorldAvatar) { + this.profile.worldAvatar = value; + this.clearPlayer(); + await this.load(); } public cameraRotate(vector: { x: number; y: number; }) { diff --git a/packages/frontend/src/pages/rooms/edit-world-avatar-dialog.vue b/packages/frontend/src/pages/rooms/edit-world-avatar-dialog.vue index 144025e5ac..30572a6845 100644 --- a/packages/frontend/src/pages/rooms/edit-world-avatar-dialog.vue +++ b/packages/frontend/src/pages/rooms/edit-world-avatar-dialog.vue @@ -35,6 +35,9 @@ SPDX-License-Identifier: AGPL-3.0-only :leaveToClass="prefer.s.animation ? $style.transition_options_leaveTo : ''" >