1
0
mirror of https://github.com/misskey-dev/misskey.git synced 2026-05-15 23:15:47 +02:00
This commit is contained in:
syuilo
2026-04-25 04:19:52 +09:00
parent 3263f4bcc0
commit 1cd6d01fdd
13 changed files with 118 additions and 169 deletions

View File

@@ -7,6 +7,7 @@
// TODO: 近くのオブジェクトの端にスナップオプション
// TODO: 近くのオブジェクトの原点に軸を揃えるオプション
// TODO: glbを事前に最適化(なるべくメッシュをマージするなど)するツールもしくはMisskeyビルド時処理。ついでにカタログ用スクショも自動生成したい
// TODO: テクスチャ置き換え時、元のテクスチャをちゃんとdispose
import * as BABYLON from '@babylonjs/core';
import { AxesViewer } from '@babylonjs/core/Debug/axesViewer';
@@ -453,6 +454,7 @@ export class RoomEngine extends EventEmitter<RoomEngineEvents> {
}).then(() => {
loadedCount++;
this.emit('loadingProgress', { progress: loadedCount / objects.length });
console.log(`Loaded object ${o.id} (${o.type})`);
})));
// 不具合のもと

View File

@@ -85,25 +85,20 @@ export const allInOnePc = defineObject({
applyFit();
const applyCustomPicture = () => new Promise<void>((resolve) => {
// テクスチャの読み込みに失敗したときの救済
// TODO: 丁寧な実装に直す
setTimeout(() => {
resolve();
}, 10000);
if (options.customPicture != null) {
const tex = new BABYLON.Texture(options.customPicture, scene, false, false);
tex.wrapU = BABYLON.Texture.MIRROR_ADDRESSMODE;
tex.wrapV = BABYLON.Texture.MIRROR_ADDRESSMODE;
tex.level = 0.5;
screenMaterial.unfreeze();
screenMaterial.emissiveTexture = tex;
tex.onLoadObservable.addOnce(() => {
const tex = new BABYLON.Texture(options.customPicture, scene, false, false, undefined, () => {
screenMaterial.emissiveColor = new BABYLON.Color3(1, 1, 1);
screenMaterial.emissiveTexture = tex;
applyFit();
resolve();
}, (message, exception) => {
console.warn('Failed to load texture:', message, exception);
screenMaterial.emissiveColor = new BABYLON.Color3(0, 1, 0);
screenMaterial.emissiveTexture = null;
resolve();
});
tex.level = 0.5;
} else {
screenMaterial.emissiveTexture = null;
resolve();

View File

@@ -61,25 +61,20 @@ export const djPlayer = defineObject({
applyFit();
const applyCustomPicture = () => new Promise<void>((resolve) => {
// テクスチャの読み込みに失敗したときの救済
// TODO: 丁寧な実装に直す
setTimeout(() => {
resolve();
}, 10000);
if (options.customPicture != null && options.customPicture !== '') {
const tex = new BABYLON.Texture(options.customPicture, scene, false, false);
tex.wrapU = BABYLON.Texture.MIRROR_ADDRESSMODE;
tex.wrapV = BABYLON.Texture.MIRROR_ADDRESSMODE;
tex.level = 0.5;
screenMaterial.unfreeze();
screenMaterial.emissiveTexture = tex;
tex.onLoadObservable.addOnce(() => {
const tex = new BABYLON.Texture(options.customPicture, scene, false, false, undefined, () => {
screenMaterial.emissiveColor = new BABYLON.Color3(1, 1, 1);
screenMaterial.emissiveTexture = tex;
applyFit();
resolve();
}, (message, exception) => {
console.warn('Failed to load texture:', message, exception);
screenMaterial.emissiveColor = new BABYLON.Color3(0, 1, 0);
screenMaterial.emissiveTexture = null;
resolve();
});
tex.level = 0.5;
} else {
screenMaterial.emissiveTexture = defaultScreenTexture;
applyFit();

View File

@@ -95,25 +95,20 @@ export const laptopPc = defineObject({
applyFit();
const applyCustomPicture = () => new Promise<void>((resolve) => {
// テクスチャの読み込みに失敗したときの救済
// TODO: 丁寧な実装に直す
setTimeout(() => {
resolve();
}, 10000);
if (options.customPicture != null) {
const tex = new BABYLON.Texture(options.customPicture, scene, false, false);
tex.wrapU = BABYLON.Texture.MIRROR_ADDRESSMODE;
tex.wrapV = BABYLON.Texture.MIRROR_ADDRESSMODE;
tex.level = 0.5;
screenMaterial.unfreeze();
screenMaterial.emissiveTexture = tex;
tex.onLoadObservable.addOnce(() => {
const tex = new BABYLON.Texture(options.customPicture, scene, false, false, undefined, () => {
screenMaterial.emissiveColor = new BABYLON.Color3(1, 1, 1);
screenMaterial.emissiveTexture = tex;
applyFit();
resolve();
}, (message, exception) => {
console.warn('Failed to load texture:', message, exception);
screenMaterial.emissiveColor = new BABYLON.Color3(0, 1, 0);
screenMaterial.emissiveTexture = null;
resolve();
});
tex.level = 0.5;
} else {
screenMaterial.emissiveTexture = null;
resolve();

View File

@@ -161,25 +161,21 @@ export const pictureFrame = defineObject({
applyDepth();
const applyCustomPicture = () => new Promise<void>((resolve) => {
// テクスチャの読み込みに失敗したときの救済
// TODO: 丁寧な実装に直す
setTimeout(() => {
resolve();
}, 10000);
if (options.customPicture != null) {
const tex = new BABYLON.Texture(options.customPicture, scene, false, false);
tex.wrapU = BABYLON.Texture.MIRROR_ADDRESSMODE;
tex.wrapV = BABYLON.Texture.MIRROR_ADDRESSMODE;
pictureMaterial.unfreeze();
pictureMaterial.albedoColor = new BABYLON.Color3(1, 1, 1);
pictureMaterial.albedoTexture = tex;
tex.onLoadObservable.addOnce(() => {
const tex = new BABYLON.Texture(options.customPicture, scene, false, false, undefined, () => {
pictureMaterial.albedoColor = new BABYLON.Color3(1, 1, 1);
pictureMaterial.albedoTexture = tex;
applyFit();
resolve();
}, (message, exception) => {
console.warn('Failed to load texture:', message, exception);
pictureMaterial.albedoColor = new BABYLON.Color3(0, 1, 0);
pictureMaterial.albedoTexture = null;
resolve();
});
tex.wrapU = BABYLON.Texture.MIRROR_ADDRESSMODE;
tex.wrapV = BABYLON.Texture.MIRROR_ADDRESSMODE;
} else {
pictureMaterial.albedoColor = new BABYLON.Color3(0.5, 0.5, 0.5);
pictureMaterial.albedoTexture = null;

View File

@@ -93,25 +93,21 @@ export const poster = defineObject({
applySize();
const applyCustomPicture = () => new Promise<void>((resolve) => {
// テクスチャの読み込みに失敗したときの救済
// TODO: 丁寧な実装に直す
setTimeout(() => {
resolve();
}, 10000);
if (options.customPicture != null) {
const tex = new BABYLON.Texture(options.customPicture, scene, false, false);
tex.wrapU = BABYLON.Texture.MIRROR_ADDRESSMODE;
tex.wrapV = BABYLON.Texture.MIRROR_ADDRESSMODE;
pictureMaterial.unfreeze();
pictureMaterial.albedoColor = new BABYLON.Color3(1, 1, 1);
pictureMaterial.albedoTexture = tex;
tex.onLoadObservable.addOnce(() => {
const tex = new BABYLON.Texture(options.customPicture, scene, false, false, undefined, () => {
pictureMaterial.albedoColor = new BABYLON.Color3(1, 1, 1);
pictureMaterial.albedoTexture = tex;
applyFit();
resolve();
}, (message, exception) => {
console.warn('Failed to load texture:', message, exception);
pictureMaterial.albedoColor = new BABYLON.Color3(0, 1, 0);
pictureMaterial.albedoTexture = null;
resolve();
});
tex.wrapU = BABYLON.Texture.MIRROR_ADDRESSMODE;
tex.wrapV = BABYLON.Texture.MIRROR_ADDRESSMODE;
} else {
pictureMaterial.albedoColor = new BABYLON.Color3(0.5, 0.5, 0.5);
pictureMaterial.albedoTexture = null;

View File

@@ -52,25 +52,21 @@ export const tabletopFlag = defineObject({
applyFit();
const applyCustomPicture = () => new Promise<void>((resolve) => {
// テクスチャの読み込みに失敗したときの救済
// TODO: 丁寧な実装に直す
setTimeout(() => {
resolve();
}, 10000);
if (options.customPicture != null) {
const tex = new BABYLON.Texture(options.customPicture, scene, false, false);
tex.wrapU = BABYLON.Texture.MIRROR_ADDRESSMODE;
tex.wrapV = BABYLON.Texture.MIRROR_ADDRESSMODE;
flagMaterial.unfreeze();
flagMaterial.albedoColor = new BABYLON.Color3(1, 1, 1);
flagMaterial.albedoTexture = tex;
tex.onLoadObservable.addOnce(() => {
const tex = new BABYLON.Texture(options.customPicture, scene, false, false, undefined, () => {
flagMaterial.albedoColor = new BABYLON.Color3(1, 1, 1);
flagMaterial.albedoTexture = tex;
applyFit();
resolve();
}, (message, exception) => {
console.warn('Failed to load texture:', message, exception);
flagMaterial.albedoColor = new BABYLON.Color3(0, 1, 0);
flagMaterial.albedoTexture = null;
resolve();
});
tex.wrapU = BABYLON.Texture.MIRROR_ADDRESSMODE;
tex.wrapV = BABYLON.Texture.MIRROR_ADDRESSMODE;
} else {
flagMaterial.albedoColor = new BABYLON.Color3(0.5, 0.5, 0.5);
flagMaterial.albedoTexture = null;

View File

@@ -93,25 +93,21 @@ export const tabletopGlassPictureFrame = defineObject({
applySize();
const applyCustomPicture = () => new Promise<void>((resolve) => {
// テクスチャの読み込みに失敗したときの救済
// TODO: 丁寧な実装に直す
setTimeout(() => {
resolve();
}, 10000);
if (options.customPicture != null) {
const tex = new BABYLON.Texture(options.customPicture, scene, false, false);
tex.wrapU = BABYLON.Texture.MIRROR_ADDRESSMODE;
tex.wrapV = BABYLON.Texture.MIRROR_ADDRESSMODE;
pictureMaterial.unfreeze();
pictureMaterial.albedoColor = new BABYLON.Color3(1, 1, 1);
pictureMaterial.albedoTexture = tex;
tex.onLoadObservable.addOnce(() => {
const tex = new BABYLON.Texture(options.customPicture, scene, false, false, undefined, () => {
pictureMaterial.albedoColor = new BABYLON.Color3(1, 1, 1);
pictureMaterial.albedoTexture = tex;
applyFit();
resolve();
}, (message, exception) => {
console.warn('Failed to load texture:', message, exception);
pictureMaterial.albedoColor = new BABYLON.Color3(0, 1, 0);
pictureMaterial.albedoTexture = null;
resolve();
});
tex.wrapU = BABYLON.Texture.MIRROR_ADDRESSMODE;
tex.wrapV = BABYLON.Texture.MIRROR_ADDRESSMODE;
} else {
pictureMaterial.albedoColor = new BABYLON.Color3(0.5, 0.5, 0.5);
pictureMaterial.albedoTexture = null;

View File

@@ -74,26 +74,20 @@ export const tabletopLcdButtonsController = defineObject({
applyFit();
const applyCustomPicture = () => new Promise<void>((resolve) => {
// テクスチャの読み込みに失敗したときの救済
// TODO: 丁寧な実装に直す
setTimeout(() => {
resolve();
}, 10000);
if (options.customPicture != null && options.customPicture !== '') {
const tex = new BABYLON.Texture(options.customPicture, scene, false, false);
tex.wrapU = BABYLON.Texture.MIRROR_ADDRESSMODE;
tex.wrapV = BABYLON.Texture.MIRROR_ADDRESSMODE;
tex.level = 0.5;
screenMaterial.unfreeze();
screenMaterial.emissiveTexture = tex;
screenMaterial.emissiveTexture.level = 2;
tex.onLoadObservable.addOnce(() => {
const tex = new BABYLON.Texture(options.customPicture, scene, false, false, undefined, () => {
screenMaterial.emissiveTexture = tex;
screenMaterial.emissiveTexture.level = 2;
applyFit();
resolve();
}, (message, exception) => {
console.warn('Failed to load texture:', message, exception);
screenMaterial.emissiveColor = new BABYLON.Color3(0, 1, 0);
screenMaterial.emissiveTexture = null;
resolve();
});
tex.level = 0.5;
} else {
screenMaterial.emissiveTexture = defaultScreenTexture;
screenMaterial.emissiveTexture.level = 2;

View File

@@ -166,25 +166,21 @@ export const tabletopPictureFrame = defineObject({
applyDepth();
const applyCustomPicture = () => new Promise<void>((resolve) => {
// テクスチャの読み込みに失敗したときの救済
// TODO: 丁寧な実装に直す
setTimeout(() => {
resolve();
}, 10000);
if (options.customPicture != null) {
const tex = new BABYLON.Texture(options.customPicture, scene, false, false);
tex.wrapU = BABYLON.Texture.MIRROR_ADDRESSMODE;
tex.wrapV = BABYLON.Texture.MIRROR_ADDRESSMODE;
pictureMaterial.unfreeze();
pictureMaterial.albedoColor = new BABYLON.Color3(1, 1, 1);
pictureMaterial.albedoTexture = tex;
tex.onLoadObservable.addOnce(() => {
const tex = new BABYLON.Texture(options.customPicture, scene, false, false, undefined, () => {
pictureMaterial.albedoColor = new BABYLON.Color3(1, 1, 1);
pictureMaterial.albedoTexture = tex;
applyFit();
resolve();
}, (message, exception) => {
console.warn('Failed to load texture:', message, exception);
pictureMaterial.albedoColor = new BABYLON.Color3(0, 1, 0);
pictureMaterial.albedoTexture = null;
resolve();
});
tex.wrapU = BABYLON.Texture.MIRROR_ADDRESSMODE;
tex.wrapV = BABYLON.Texture.MIRROR_ADDRESSMODE;
} else {
pictureMaterial.albedoColor = new BABYLON.Color3(0.5, 0.5, 0.5);
pictureMaterial.albedoTexture = null;

View File

@@ -97,25 +97,21 @@ export const tapestry = defineObject({
applySize();
const applyCustomPicture = () => new Promise<void>((resolve) => {
// テクスチャの読み込みに失敗したときの救済
// TODO: 丁寧な実装に直す
setTimeout(() => {
resolve();
}, 10000);
if (options.customPicture != null) {
const tex = new BABYLON.Texture(options.customPicture, scene, false, false);
tex.wrapU = BABYLON.Texture.MIRROR_ADDRESSMODE;
tex.wrapV = BABYLON.Texture.MIRROR_ADDRESSMODE;
pictureMaterial.unfreeze();
pictureMaterial.albedoColor = new BABYLON.Color3(1, 1, 1);
pictureMaterial.albedoTexture = tex;
tex.onLoadObservable.addOnce(() => {
const tex = new BABYLON.Texture(options.customPicture, scene, false, false, undefined, () => {
pictureMaterial.albedoColor = new BABYLON.Color3(1, 1, 1);
pictureMaterial.albedoTexture = tex;
applyFit();
resolve();
}, (message, exception) => {
console.warn('Failed to load texture:', message, exception);
pictureMaterial.albedoColor = new BABYLON.Color3(0, 1, 0);
pictureMaterial.albedoTexture = null;
resolve();
});
tex.wrapU = BABYLON.Texture.MIRROR_ADDRESSMODE;
tex.wrapV = BABYLON.Texture.MIRROR_ADDRESSMODE;
} else {
pictureMaterial.albedoColor = new BABYLON.Color3(0.5, 0.5, 0.5);
pictureMaterial.albedoTexture = null;

View File

@@ -83,25 +83,21 @@ export const wallCanvas = defineObject({
applySize();
const applyCustomPicture = () => new Promise<void>((resolve) => {
// テクスチャの読み込みに失敗したときの救済
// TODO: 丁寧な実装に直す
setTimeout(() => {
resolve();
}, 10000);
if (options.customPicture != null) {
const tex = new BABYLON.Texture(options.customPicture, scene, false, false);
tex.wrapU = BABYLON.Texture.MIRROR_ADDRESSMODE;
tex.wrapV = BABYLON.Texture.MIRROR_ADDRESSMODE;
canvasMaterial.unfreeze();
canvasMaterial.albedoColor = new BABYLON.Color3(1, 1, 1);
canvasMaterial.albedoTexture = tex;
tex.onLoadObservable.addOnce(() => {
const tex = new BABYLON.Texture(options.customPicture, scene, false, false, undefined, () => {
canvasMaterial.albedoColor = new BABYLON.Color3(1, 1, 1);
canvasMaterial.albedoTexture = tex;
applyFit();
resolve();
}, (message, exception) => {
console.warn('Failed to load texture:', message, exception);
canvasMaterial.albedoColor = new BABYLON.Color3(0, 1, 0);
canvasMaterial.albedoTexture = null;
resolve();
});
tex.wrapU = BABYLON.Texture.MIRROR_ADDRESSMODE;
tex.wrapV = BABYLON.Texture.MIRROR_ADDRESSMODE;
} else {
canvasMaterial.albedoColor = new BABYLON.Color3(0.5, 0.5, 0.5);
canvasMaterial.albedoTexture = null;

View File

@@ -93,25 +93,21 @@ export const wallGlassPictureFrame = defineObject({
applySize();
const applyCustomPicture = () => new Promise<void>((resolve) => {
// テクスチャの読み込みに失敗したときの救済
// TODO: 丁寧な実装に直す
setTimeout(() => {
resolve();
}, 10000);
if (options.customPicture != null) {
const tex = new BABYLON.Texture(options.customPicture, scene, false, false);
tex.wrapU = BABYLON.Texture.MIRROR_ADDRESSMODE;
tex.wrapV = BABYLON.Texture.MIRROR_ADDRESSMODE;
pictureMaterial.unfreeze();
pictureMaterial.albedoColor = new BABYLON.Color3(1, 1, 1);
pictureMaterial.albedoTexture = tex;
tex.onLoadObservable.addOnce(() => {
const tex = new BABYLON.Texture(options.customPicture, scene, false, false, undefined, () => {
pictureMaterial.albedoColor = new BABYLON.Color3(1, 1, 1);
pictureMaterial.albedoTexture = tex;
applyFit();
resolve();
}, (message, exception) => {
console.warn('Failed to load texture:', message, exception);
pictureMaterial.albedoColor = new BABYLON.Color3(0, 1, 0);
pictureMaterial.albedoTexture = null;
resolve();
});
tex.wrapU = BABYLON.Texture.MIRROR_ADDRESSMODE;
tex.wrapV = BABYLON.Texture.MIRROR_ADDRESSMODE;
} else {
pictureMaterial.albedoColor = new BABYLON.Color3(0.5, 0.5, 0.5);
pictureMaterial.albedoTexture = null;