1
0
mirror of https://github.com/misskey-dev/misskey.git synced 2026-05-13 14:05:35 +02:00

ironWoodShelf

This commit is contained in:
syuilo
2026-04-12 21:22:04 +09:00
parent 272c267ea0
commit ebc9a60237
5 changed files with 82 additions and 2 deletions

View File

@@ -308,6 +308,7 @@ class ModelManager {
type ObjectDef<OpSc extends OptionsSchema = OptionsSchema> = {
id: string;
name: string;
path?: string;
options: {
schema: OpSc;
default: GetOptionsSchemaValues<OpSc>;
@@ -1056,7 +1057,8 @@ export class RoomEngine {
const root = new BABYLON.TransformNode(`object_${args.id}_${args.type}`, this.scene);
const loaderResult = await BABYLON.LoadAssetContainerAsync(`/client-assets/room/objects/${camelToKebab(args.type)}/${camelToKebab(args.type)}.glb`, this.scene);
const filePath = def.path != null ? `/client-assets/room/objects/${def.path}.glb` : `/client-assets/room/objects/${camelToKebab(args.type)}/${camelToKebab(args.type)}.glb`;
const loaderResult = await BABYLON.LoadAssetContainerAsync(filePath, this.scene);
// babylonによって自動で追加される右手系変換用ード
const subRoot = loaderResult.meshes[0] as BABYLON.Mesh;
@@ -1903,7 +1905,8 @@ export class RoomObjectPreviewEngine {
const root = new BABYLON.Mesh(`object_${args.type}`, this.scene);
const loaderResult = await BABYLON.LoadAssetContainerAsync(`/client-assets/room/objects/${camelToKebab(args.type)}/${camelToKebab(args.type)}.glb`, this.scene);
const filePath = def.path != null ? `/client-assets/room/objects/${def.path}.glb` : `/client-assets/room/objects/${camelToKebab(args.type)}/${camelToKebab(args.type)}.glb`;
const loaderResult = await BABYLON.LoadAssetContainerAsync(filePath, this.scene);
// babylonによって自動で追加される右手系変換用ード
const subRoot = loaderResult.meshes[0];

View File

@@ -0,0 +1,77 @@
/*
* 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 ironWoodShelfH = defineObject({
id: 'ironWoodShelfH',
name: 'ironWoodShelf H',
path: 'iron-wood-shelf/iron-wood-shelf-h',
options: {
schema: {
frameColor: {
type: 'color',
label: 'Frame color',
},
},
default: {
frameColor: [0.2, 0.2, 0.2],
},
},
placement: 'floor',
createInstance: ({ options, model }) => {
const frameMaterial = model.findMaterial('__X_FRAME__');
const applyFrameColor = () => {
const [r, g, b] = options.frameColor;
frameMaterial.albedoColor = new BABYLON.Color3(r, g, b);
};
applyFrameColor();
return {
onOptionsUpdated: ([k, v]) => {
applyFrameColor();
},
interactions: {},
};
},
});
export const ironWoodShelfV = defineObject({
id: 'ironWoodShelfV',
name: 'ironWoodShelf V',
path: 'iron-wood-shelf/iron-wood-shelf-v',
options: {
schema: {
frameColor: {
type: 'color',
label: 'Frame color',
},
},
default: {
frameColor: [0.2, 0.2, 0.2],
},
},
placement: 'floor',
createInstance: ({ options, model }) => {
const frameMaterial = model.findMaterial('__X_FRAME__');
const applyFrameColor = () => {
const [r, g, b] = options.frameColor;
frameMaterial.albedoColor = new BABYLON.Color3(r, g, b);
};
applyFrameColor();
return {
onOptionsUpdated: ([k, v]) => {
applyFrameColor();
},
interactions: {},
};
},
});