diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index 2a7b5226f9..b40706e1bb 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -16,6 +16,8 @@ on: - packages/misskey-js/** - packages/misskey-bubble-game/** - packages/misskey-reversi/** + - packages/misskey-world/** + - packages/frontend-misskey-world-engine/** - packages/shared/eslint.config.js - .github/workflows/lint.yml pull_request: @@ -30,6 +32,8 @@ on: - packages/misskey-js/** - packages/misskey-bubble-game/** - packages/misskey-reversi/** + - packages/misskey-world/** + - packages/frontend-misskey-world-engine/** - packages/shared/eslint.config.js - .github/workflows/lint.yml jobs: @@ -65,6 +69,8 @@ jobs: - misskey-js - misskey-bubble-game - misskey-reversi + - misskey-world + - frontend-misskey-world-engine env: eslint-cache-version: v1 eslint-cache-path: ${{ github.workspace }}/node_modules/.cache/eslint-${{ matrix.workspace }} diff --git a/Dockerfile b/Dockerfile index 0e6b8ac1f3..94353a4a1a 100644 --- a/Dockerfile +++ b/Dockerfile @@ -30,6 +30,8 @@ COPY --link ["packages/sw/package.json", "./packages/sw/"] COPY --link ["packages/misskey-js/package.json", "./packages/misskey-js/"] COPY --link ["packages/misskey-reversi/package.json", "./packages/misskey-reversi/"] COPY --link ["packages/misskey-bubble-game/package.json", "./packages/misskey-bubble-game/"] +COPY --link ["packages/misskey-world/package.json", "./packages/misskey-world/"] +COPY --link ["packages/frontend-misskey-world-engine/package.json", "./packages/frontend-misskey-world-engine/"] ARG NODE_ENV=production @@ -61,6 +63,8 @@ COPY --link ["packages/backend/package.json", "./packages/backend/"] COPY --link ["packages/misskey-js/package.json", "./packages/misskey-js/"] COPY --link ["packages/misskey-reversi/package.json", "./packages/misskey-reversi/"] COPY --link ["packages/misskey-bubble-game/package.json", "./packages/misskey-bubble-game/"] +COPY --link ["packages/misskey-world/package.json", "./packages/misskey-world/"] +COPY --link ["packages/frontend-misskey-world-engine/package.json", "./packages/frontend-misskey-world-engine/"] ARG NODE_ENV=production @@ -99,12 +103,18 @@ COPY --chown=misskey:misskey --from=target-builder /misskey/packages/backend/nod COPY --chown=misskey:misskey --from=target-builder /misskey/packages/misskey-js/node_modules ./packages/misskey-js/node_modules COPY --chown=misskey:misskey --from=target-builder /misskey/packages/misskey-reversi/node_modules ./packages/misskey-reversi/node_modules COPY --chown=misskey:misskey --from=target-builder /misskey/packages/misskey-bubble-game/node_modules ./packages/misskey-bubble-game/node_modules +COPY --chown=misskey:misskey --from=target-builder /misskey/packages/misskey-world/node_modules ./packages/misskey-world/node_modules +COPY --chown=misskey:misskey --from=target-builder /misskey/packages/frontend-misskey-world-engine/node_modules ./packages/frontend-misskey-world-engine/node_modules + COPY --chown=misskey:misskey --from=native-builder /misskey/built ./built COPY --chown=misskey:misskey --from=native-builder /misskey/packages/misskey-js/built ./packages/misskey-js/built COPY --chown=misskey:misskey --from=native-builder /misskey/packages/misskey-reversi/built ./packages/misskey-reversi/built COPY --chown=misskey:misskey --from=native-builder /misskey/packages/misskey-bubble-game/built ./packages/misskey-bubble-game/built COPY --chown=misskey:misskey --from=native-builder /misskey/packages/backend/built ./packages/backend/built COPY --chown=misskey:misskey --from=native-builder /misskey/packages/i18n/built ./packages/i18n/built +COPY --chown=misskey:misskey --from=target-builder /misskey/packages/misskey-world/built ./packages/misskey-world/built +COPY --chown=misskey:misskey --from=target-builder /misskey/packages/frontend-misskey-world-engine/built ./packages/frontend-misskey-world-engine/built + COPY --chown=misskey:misskey . ./ ENV LD_PRELOAD=/usr/local/lib/libjemalloc.so diff --git a/package.json b/package.json index 5ae306e914..ecfedd1add 100644 --- a/package.json +++ b/package.json @@ -12,7 +12,9 @@ "packages/i18n", "packages/misskey-reversi", "packages/misskey-bubble-game", + "packages/misskey-world", "packages/icons-subsetter", + "packages/frontend-misskey-world-engine", "packages/frontend-shared", "packages/frontend-builder", "packages/sw", diff --git a/packages/frontend-misskey-world-engine/README.md b/packages/frontend-misskey-world-engine/README.md new file mode 100644 index 0000000000..4e5738370f --- /dev/null +++ b/packages/frontend-misskey-world-engine/README.md @@ -0,0 +1,5 @@ +# frontend用Misskey Worldエンジン + +エンジンはWeb Worker内で動作し、ほぼすべてのMisskey Webの機能は使えないため、意図しないそれらへの参照/依存が原理的に発生しないように別パッケージとする + +ただしヘッドレス動作することは(今のところ)意図していない diff --git a/packages/frontend-misskey-world-engine/eslint.config.js b/packages/frontend-misskey-world-engine/eslint.config.js new file mode 100644 index 0000000000..bce383b1a6 --- /dev/null +++ b/packages/frontend-misskey-world-engine/eslint.config.js @@ -0,0 +1,28 @@ +import tsParser from '@typescript-eslint/parser'; +import sharedConfig from '../shared/eslint.config.js'; + +// eslint-disable-next-line import/no-default-export +export default [ + ...sharedConfig, + { + ignores: [ + '**/node_modules', + 'built', + 'coverage', + 'jest.config.ts', + 'test', + 'test-d', + ], + }, + { + files: ['**/*.ts', '**/*.tsx'], + languageOptions: { + parserOptions: { + parser: tsParser, + project: ['./tsconfig.json'], + sourceType: 'module', + tsconfigRootDir: import.meta.dirname, + }, + }, + }, +]; diff --git a/packages/frontend-misskey-world-engine/package.json b/packages/frontend-misskey-world-engine/package.json new file mode 100644 index 0000000000..d7c204138a --- /dev/null +++ b/packages/frontend-misskey-world-engine/package.json @@ -0,0 +1,29 @@ +{ + "type": "module", + "name": "frontend-misskey-world-engine", + "private": true, + "scripts": { + "eslint": "eslint './**/*.{js,jsx,ts,tsx}'", + "typecheck": "tsgo --noEmit", + "lint": "pnpm typecheck && pnpm eslint" + }, + "devDependencies": { + "@types/seedrandom": "3.0.8", + "@typescript-eslint/eslint-plugin": "8.59.2", + "@typescript-eslint/parser": "8.59.2", + "esbuild": "0.28.0", + "execa": "9.6.1", + "nodemon": "3.1.14" + }, + "files": [ + "built" + ], + "dependencies": { + "@babylonjs/core": "9.9.0", + "@babylonjs/inspector": "9.9.0", + "@babylonjs/loaders": "9.9.0", + "@babylonjs/materials": "9.9.0", + "eventemitter3": "5.0.4", + "seedrandom": "3.0.5" + } +} diff --git a/packages/frontend/src/world/EngineBase.ts b/packages/frontend-misskey-world-engine/src/EngineBase.ts similarity index 80% rename from packages/frontend/src/world/EngineBase.ts rename to packages/frontend-misskey-world-engine/src/EngineBase.ts index 39093b71e2..9df7c84e34 100644 --- a/packages/frontend/src/world/EngineBase.ts +++ b/packages/frontend-misskey-world-engine/src/EngineBase.ts @@ -8,6 +8,7 @@ import EventEmitter from 'eventemitter3'; export type EngineBaseEvents = { 'loadingProgress': (ctx: { progress: number }) => void; + 'contextlost': (ctx: { reason: string; message: string; }) => void; }; export abstract class EngineBase extends EventEmitter<{ @@ -38,6 +39,18 @@ export abstract class EngineBase extends EventEmit this.fps = options.fps; this.engine = options.engine; + // doNotHandleContextLostがtrueだとそもそも呼ばれない + //babylonEngine.onContextLostObservable.add(() => { + // os.alert({ + // type: 'error', + // title: i18n.ts.somethingHappened, + // text: i18n.ts._miWorld.crushed_description, + // }); + //}); + this.engine._device.lost.then((info) => { // TODO: babylonEngineの内部プロパティに依存しない方法をforumで聞く + this.ev('contextlost', { reason: info.reason, message: info.message }); // transferableじゃないデータが含まれている可能性も考慮してinfoそのままは送らない + }); + this.scene = new BABYLON.Scene(this.engine); } diff --git a/packages/frontend-misskey-world-engine/src/clone.ts b/packages/frontend-misskey-world-engine/src/clone.ts new file mode 100644 index 0000000000..ea8eea14b5 --- /dev/null +++ b/packages/frontend-misskey-world-engine/src/clone.ts @@ -0,0 +1,25 @@ +/* + * SPDX-FileCopyrightText: syuilo and misskey-project + * SPDX-License-Identifier: AGPL-3.0-only + */ + +// structredCloneが遅いため +// SEE: http://var.blog.jp/archives/86038606.html +// あと、Vue RefをIndexedDBに保存しようとしてstructredCloneを使ったらエラーになった +// https://github.com/misskey-dev/misskey/pull/8098#issuecomment-1114144045 + +export type Cloneable = string | number | boolean | null | undefined | { [key: string]: Cloneable } | { [key: number]: Cloneable } | { [key: symbol]: Cloneable } | Cloneable[]; + +export function deepClone(x: T): T { + if (typeof x === 'object') { + if (x === null) return x; + if (Array.isArray(x)) return x.map(deepClone) as T; + const obj = {} as Record; + for (const [k, v] of Object.entries(x)) { + obj[k] = v === undefined ? undefined : deepClone(v); + } + return obj as T; + } else { + return x; + } +} diff --git a/packages/frontend/src/world/engine.ts b/packages/frontend-misskey-world-engine/src/engine.ts similarity index 99% rename from packages/frontend/src/world/engine.ts rename to packages/frontend-misskey-world-engine/src/engine.ts index aea723df22..a81b2c5fd6 100644 --- a/packages/frontend/src/world/engine.ts +++ b/packages/frontend-misskey-world-engine/src/engine.ts @@ -12,8 +12,6 @@ import Hls from 'hls.js'; import { RecyvlingTextGrid, Timer, WORLD_SCALE, camelToKebab, cm, createPlaneUvMapper, normalizeUvToSquare, randomRange } from './utility.js'; import { TIME_MAP } from './utility.js'; import { EngineBase } from './EngineBase.js'; -import { genId } from '@/utility/id.js'; -import { deepClone } from '@/utility/clone.js'; const SNAPSHOT_RENDERING = false; // 実験的 const USE_GLOW = true; // ドローコールが増えて重い diff --git a/packages/frontend-misskey-world-engine/src/id.ts b/packages/frontend-misskey-world-engine/src/id.ts new file mode 100644 index 0000000000..63a7f7d74c --- /dev/null +++ b/packages/frontend-misskey-world-engine/src/id.ts @@ -0,0 +1,25 @@ +/* + * SPDX-FileCopyrightText: syuilo and misskey-project + * SPDX-License-Identifier: AGPL-3.0-only + */ + +// ランダムな文字列が生成できればなんでも良い(時系列でソートできるなら尚良)が、とりあえずaidの実装を拝借 + +const TIME2000 = 946684800000; +let counter = Math.floor(Math.random() * 10000); + +function getTime(time: number): string { + time = time - TIME2000; + if (time < 0) time = 0; + + return time.toString(36).padStart(8, '0'); +} + +function getNoise(): string { + return counter.toString(36).padStart(2, '0').slice(-2); +} + +export function genId(): string { + counter++; + return getTime(Date.now()) + getNoise(); +} diff --git a/packages/frontend/src/world/room/ObjectContainer.ts b/packages/frontend-misskey-world-engine/src/room/ObjectContainer.ts similarity index 100% rename from packages/frontend/src/world/room/ObjectContainer.ts rename to packages/frontend-misskey-world-engine/src/room/ObjectContainer.ts diff --git a/packages/frontend/src/world/room/engine.ts b/packages/frontend-misskey-world-engine/src/room/engine.ts similarity index 99% rename from packages/frontend/src/world/room/engine.ts rename to packages/frontend-misskey-world-engine/src/room/engine.ts index be56911d6d..80f6f17156 100644 --- a/packages/frontend/src/world/room/engine.ts +++ b/packages/frontend-misskey-world-engine/src/room/engine.ts @@ -389,7 +389,7 @@ export class RoomEngine extends EngineBase<{ if (_DEV_) { // SR状態確認用 const box = BABYLON.MeshBuilder.CreateBox('', { size: cm(10) }, this.scene); - // eslint-disable-next-line no-restricted-globals + setInterval(() => { box.position = new BABYLON.Vector3(0, Math.random() * cm(10), 0); }, 10); @@ -1157,7 +1157,7 @@ export class RoomEngine extends EngineBase<{ this.envManager.turnOnRoomLight(); if (!forInit) { // workerで実行される可能性がある - // eslint-disable-next-line no-restricted-globals + setTimeout(() => { this.sr.enableSnapshotRendering(); // このメソッドは参照カウント方式な点に留意 }, 10); @@ -1168,7 +1168,7 @@ export class RoomEngine extends EngineBase<{ this.sr.disableSnapshotRendering(); // このメソッドは参照カウント方式な点に留意 this.envManager.turnOffRoomLight(); // workerで実行される可能性がある - // eslint-disable-next-line no-restricted-globals + setTimeout(() => { this.sr.enableSnapshotRendering(); // このメソッドは参照カウント方式な点に留意 }, 10); @@ -1453,7 +1453,7 @@ export class RoomEngine extends EngineBase<{ this.sr.disableSnapshotRendering(); this.engine.resize(true); // workerで実行される可能性がある - // eslint-disable-next-line no-restricted-globals + setTimeout(() => { this.sr.enableSnapshotRendering(); }, 1); diff --git a/packages/frontend/src/world/room/env.ts b/packages/frontend-misskey-world-engine/src/room/env.ts similarity index 99% rename from packages/frontend/src/world/room/env.ts rename to packages/frontend-misskey-world-engine/src/room/env.ts index bfbc8ff9b1..57cfe2f1a8 100644 --- a/packages/frontend/src/world/room/env.ts +++ b/packages/frontend-misskey-world-engine/src/room/env.ts @@ -1,4 +1,4 @@ -/* eslint-disable id-denylist */ + /* * SPDX-FileCopyrightText: syuilo and misskey-project * SPDX-License-Identifier: AGPL-3.0-only diff --git a/packages/frontend-misskey-world-engine/src/room/nonWorker.ts b/packages/frontend-misskey-world-engine/src/room/nonWorker.ts new file mode 100644 index 0000000000..7972c15615 --- /dev/null +++ b/packages/frontend-misskey-world-engine/src/room/nonWorker.ts @@ -0,0 +1,31 @@ +/* + * SPDX-FileCopyrightText: syuilo and misskey-project + * SPDX-License-Identifier: AGPL-3.0-only + */ + +import * as BABYLON from '@babylonjs/core'; +import { RoomEngine } from './engine.js'; +import type { RoomState } from './engine.js'; +import type { RoomAttachments } from './utility.js'; + +//BABYLON.RegisterStandardEngineExtensions(); +//BABYLON.RegisterEnginesExtensionsEngineRawTexture(); +//BABYLON.RegisterCollisionCoordinator(); + +export async function createRoomEngine(params: { + roomState: RoomState; roomAttachments: RoomAttachments; canvas: HTMLCanvasElement; options: { antialias: boolean; resolution: number }; +}) { + const babylonEngine = new BABYLON.WebGPUEngine(params.canvas, { doNotHandleContextLost: true, powerPreference: 'high-performance', antialias: params.options.antialias }); + babylonEngine.compatibilityMode = false; + babylonEngine.enableOfflineSupport = false; + await babylonEngine.initAsync(); + if (params.options.resolution === 2) babylonEngine.setHardwareScalingLevel(0.5); + if (params.options.resolution === 0.5) babylonEngine.setHardwareScalingLevel(2); + + const engine = new RoomEngine(params.roomState, params.roomAttachments, { + engine: babylonEngine, + ...params.options, + }); + + return engine; +} diff --git a/packages/frontend/src/world/room/object-defs.ts b/packages/frontend-misskey-world-engine/src/room/object-defs.ts similarity index 99% rename from packages/frontend/src/world/room/object-defs.ts rename to packages/frontend-misskey-world-engine/src/room/object-defs.ts index 0fea8470c0..b658024f42 100644 --- a/packages/frontend/src/world/room/object-defs.ts +++ b/packages/frontend-misskey-world-engine/src/room/object-defs.ts @@ -114,7 +114,6 @@ import { wireNet } from './objects/wireNet.js'; import { woodRingFloorLamp } from './objects/woodRingFloorLamp.js'; import { woodRingsPendantLight } from './objects/woodRingsPendantLight.js'; import { woodSoundAbsorbingPanel } from './objects/woodSoundAbsorbingPanel.js'; -import type { ObjectDef } from './object.js'; export const OBJECT_DEFS = [ a4Case, diff --git a/packages/frontend/src/world/room/object.ts b/packages/frontend-misskey-world-engine/src/room/object.ts similarity index 71% rename from packages/frontend/src/world/room/object.ts rename to packages/frontend-misskey-world-engine/src/room/object.ts index 310e2157e9..b5b546478d 100644 --- a/packages/frontend/src/world/room/object.ts +++ b/packages/frontend-misskey-world-engine/src/room/object.ts @@ -8,20 +8,6 @@ import { createPlaneUvMapper } from '../utility.js'; import type { Timer } from '../utility.js'; import type { ModelManager, RoomAttachments } from './utility.js'; -// babylonのドメイン知識は持たない -export type RoomStateObject = { - id: string; - type: string; - position: [number, number, number]; - rotation: [number, number, number]; - options: RawOptions; - - /** - * 別のオブジェクトのID - */ - sticky?: string | null; -}; - export type RoomObjectInstance = { onInited?: () => void; onOptionsUpdated?: (kv: [K, V]) => void; @@ -33,60 +19,6 @@ export type RoomObjectInstance = { dispose: () => void; }; -type NumberOptionSchema = { - type: 'number'; - min?: number; - max?: number; - step?: number; -}; - -type BooleanOptionSchema = { - type: 'boolean'; -}; - -type StringOptionSchema = { - type: 'string'; -}; - -type ColorOptionSchema = { - type: 'color'; -}; - -type MaterialOptionSchema = { - type: 'material'; -}; - -type LightOptionSchema = { - type: 'light'; -}; - -type EnumOptionSchema = { - type: 'enum'; - enum: { - value: string | number; - }[]; -}; - -type RangeOptionSchema = { - type: 'range'; - min: number; - max: number; - step?: number; -}; - -type ImageOptionSchema = { - type: 'image'; - presets: { - value: string; - }[]; -}; - -type SeedOptionSchema = { - type: 'seed'; -}; - -type OptionsSchema = Record; - export type RawOptions = Record & { readonly __brand: unique symbol; }; @@ -96,20 +28,7 @@ export type ConvertedOptions = Record & { }; type RawImageValue = { type: Presets | null | '_custom_'; driveFileId?: string | null; fit?: 'cover' | 'contain' | 'stretch'; }; -type GetRawOptionsSchemaValues = { - [K in keyof T]: - T[K] extends NumberOptionSchema ? number : - T[K] extends BooleanOptionSchema ? boolean : - T[K] extends StringOptionSchema ? string : - T[K] extends ColorOptionSchema ? [number, number, number] : - T[K] extends MaterialOptionSchema ? { color: [number, number, number]; metallic: number; roughness: number; } : - T[K] extends LightOptionSchema ? { color: [number, number, number]; brightness: number; } : - T[K] extends EnumOptionSchema ? T[K]['enum'][number]['value'] : - T[K] extends RangeOptionSchema ? number : - T[K] extends ImageOptionSchema ? RawImageValue : - T[K] extends SeedOptionSchema ? number : - never; -}; + type ConvertedImageValue = { type: Presets | null | '_custom_'; custom?: { url: string; } | null; fit?: 'cover' | 'contain' | 'stretch'; }; type GetConvertedOptionsSchemaValues = { [K in keyof T]: @@ -146,19 +65,6 @@ export type SnapshotRenderingHelperWrapper = { fixParticleSystem: (ps: BABYLON.ParticleSystem) => void; }; -export type ObjectSchemaDef = { - id: string; - options: { - schema: string extends keyof OpSc ? OptionsSchema : OpSc; - default: string extends keyof OpSc ? RawOptions : GetRawOptionsSchemaValues; // 関数にした方が使用側でdeepCloneの必要がなくて綺麗かもしれない - }; - placement: 'top' | 'side' | 'bottom' | 'wall' | 'ceiling' | 'floor'; - hasCollisions?: boolean; - hasTexture?: boolean; - canPreMeshesMerging?: boolean; // TODO: 除外するメッシュ名を指定できるようにする - isChair?: boolean; -}; - export type ObjectDef = Schema & { path?: (options: string extends keyof Schema['options']['schema'] ? ConvertedOptions : Readonly>) => string; createInstance: (args: { @@ -187,14 +93,6 @@ export function defineObject>(schema: return { ...schema, ...def }; } -export function defineObjectClass>(baseDef: Partial>): { - extend: (childDef: Partial>) => ObjectDef; -} { - return { - extend: (childDef) => ({ ...baseDef, ...childDef }) as ObjectDef, - }; -} - export function convertRawOptions(schema: OpSc, raw: RawOptions, attachments: RoomAttachments): ConvertedOptions { const converted = {} as ConvertedOptions; for (const record of Object.entries(schema)) { diff --git a/packages/frontend/src/world/room/objects/a4Case.ts b/packages/frontend-misskey-world-engine/src/room/objects/a4Case.ts similarity index 100% rename from packages/frontend/src/world/room/objects/a4Case.ts rename to packages/frontend-misskey-world-engine/src/room/objects/a4Case.ts diff --git a/packages/frontend/src/world/room/objects/aircon.ts b/packages/frontend-misskey-world-engine/src/room/objects/aircon.ts similarity index 100% rename from packages/frontend/src/world/room/objects/aircon.ts rename to packages/frontend-misskey-world-engine/src/room/objects/aircon.ts diff --git a/packages/frontend/src/world/room/objects/allInOnePc.ts b/packages/frontend-misskey-world-engine/src/room/objects/allInOnePc.ts similarity index 97% rename from packages/frontend/src/world/room/objects/allInOnePc.ts rename to packages/frontend-misskey-world-engine/src/room/objects/allInOnePc.ts index d4d1721ca2..42011a9ccb 100644 --- a/packages/frontend/src/world/room/objects/allInOnePc.ts +++ b/packages/frontend-misskey-world-engine/src/room/objects/allInOnePc.ts @@ -5,7 +5,7 @@ import * as BABYLON from '@babylonjs/core'; import { createTextureManager, defineObject } from '../object.js'; -import { cm, WORLD_SCALE } from '../../utility.js'; +import { cm, WORLD_SCALE } from '../../../../../frontend-misskey-world-engine/src/utility.js'; import { getLightRangeFactorByGraphicsQuality } from '../utility.js'; import { allInOnePc_schema } from './allInOnePc.schema.js'; diff --git a/packages/frontend/src/world/room/objects/aquarium.ts b/packages/frontend-misskey-world-engine/src/room/objects/aquarium.ts similarity index 95% rename from packages/frontend/src/world/room/objects/aquarium.ts rename to packages/frontend-misskey-world-engine/src/room/objects/aquarium.ts index f36f3c86df..7e19938d8a 100644 --- a/packages/frontend/src/world/room/objects/aquarium.ts +++ b/packages/frontend-misskey-world-engine/src/room/objects/aquarium.ts @@ -5,7 +5,7 @@ import * as BABYLON from '@babylonjs/core'; import { defineObject } from '../object.js'; -import { cm } from '../../utility.js'; +import { cm } from '../../../../../frontend-misskey-world-engine/src/utility.js'; import { aquarium_schema } from './aquarium.schema.js'; export const aquarium = defineObject(aquarium_schema, { diff --git a/packages/frontend/src/world/room/objects/aromaReedDiffuser.ts b/packages/frontend-misskey-world-engine/src/room/objects/aromaReedDiffuser.ts similarity index 100% rename from packages/frontend/src/world/room/objects/aromaReedDiffuser.ts rename to packages/frontend-misskey-world-engine/src/room/objects/aromaReedDiffuser.ts diff --git a/packages/frontend/src/world/room/objects/banknote.ts b/packages/frontend-misskey-world-engine/src/room/objects/banknote.ts similarity index 100% rename from packages/frontend/src/world/room/objects/banknote.ts rename to packages/frontend-misskey-world-engine/src/room/objects/banknote.ts diff --git a/packages/frontend/src/world/room/objects/beamLamp.ts b/packages/frontend-misskey-world-engine/src/room/objects/beamLamp.ts similarity index 92% rename from packages/frontend/src/world/room/objects/beamLamp.ts rename to packages/frontend-misskey-world-engine/src/room/objects/beamLamp.ts index 10016e5b1a..607e460122 100644 --- a/packages/frontend/src/world/room/objects/beamLamp.ts +++ b/packages/frontend-misskey-world-engine/src/room/objects/beamLamp.ts @@ -5,7 +5,7 @@ import * as BABYLON from '@babylonjs/core'; import { defineObject } from '../object.js'; -import { cm, WORLD_SCALE } from '../../utility.js'; +import { cm, WORLD_SCALE } from '../../../../../frontend-misskey-world-engine/src/utility.js'; import { getLightRangeFactorByGraphicsQuality } from '../utility.js'; import { beamLamp_schema } from './beamLamp.schema.js'; diff --git a/packages/frontend/src/world/room/objects/bed.ts b/packages/frontend-misskey-world-engine/src/room/objects/bed.ts similarity index 100% rename from packages/frontend/src/world/room/objects/bed.ts rename to packages/frontend-misskey-world-engine/src/room/objects/bed.ts diff --git a/packages/frontend/src/world/room/objects/blind.ts b/packages/frontend-misskey-world-engine/src/room/objects/blind.ts similarity index 96% rename from packages/frontend/src/world/room/objects/blind.ts rename to packages/frontend-misskey-world-engine/src/room/objects/blind.ts index c42bea1631..55f148e4a8 100644 --- a/packages/frontend/src/world/room/objects/blind.ts +++ b/packages/frontend-misskey-world-engine/src/room/objects/blind.ts @@ -5,7 +5,7 @@ import * as BABYLON from '@babylonjs/core'; import { defineObject } from '../object.js'; -import { cm, remap } from '../../utility.js'; +import { cm, remap } from '../../../../../frontend-misskey-world-engine/src/utility.js'; import { createOverridedStates } from '../utility.js'; import { blind_schema } from './blind.schema.js'; diff --git a/packages/frontend/src/world/room/objects/book.ts b/packages/frontend-misskey-world-engine/src/room/objects/book.ts similarity index 100% rename from packages/frontend/src/world/room/objects/book.ts rename to packages/frontend-misskey-world-engine/src/room/objects/book.ts diff --git a/packages/frontend/src/world/room/objects/books.ts b/packages/frontend-misskey-world-engine/src/room/objects/books.ts similarity index 95% rename from packages/frontend/src/world/room/objects/books.ts rename to packages/frontend-misskey-world-engine/src/room/objects/books.ts index b4df6019e1..f8d06eee8d 100644 --- a/packages/frontend/src/world/room/objects/books.ts +++ b/packages/frontend-misskey-world-engine/src/room/objects/books.ts @@ -5,7 +5,7 @@ import * as BABYLON from '@babylonjs/core'; import { defineObject } from '../object.js'; -import { cm } from '../../utility.js'; +import { cm } from '../../../../../frontend-misskey-world-engine/src/utility.js'; import { books_schema } from './books.schema.js'; export const books = defineObject(books_schema, { diff --git a/packages/frontend/src/world/room/objects/boxWallShelf.ts b/packages/frontend-misskey-world-engine/src/room/objects/boxWallShelf.ts similarity index 100% rename from packages/frontend/src/world/room/objects/boxWallShelf.ts rename to packages/frontend-misskey-world-engine/src/room/objects/boxWallShelf.ts diff --git a/packages/frontend/src/world/room/objects/cactusS.ts b/packages/frontend-misskey-world-engine/src/room/objects/cactusS.ts similarity index 100% rename from packages/frontend/src/world/room/objects/cactusS.ts rename to packages/frontend-misskey-world-engine/src/room/objects/cactusS.ts diff --git a/packages/frontend/src/world/room/objects/cardboardBox.ts b/packages/frontend-misskey-world-engine/src/room/objects/cardboardBox.ts similarity index 100% rename from packages/frontend/src/world/room/objects/cardboardBox.ts rename to packages/frontend-misskey-world-engine/src/room/objects/cardboardBox.ts diff --git a/packages/frontend/src/world/room/objects/ceilingFanLight.ts b/packages/frontend-misskey-world-engine/src/room/objects/ceilingFanLight.ts similarity index 100% rename from packages/frontend/src/world/room/objects/ceilingFanLight.ts rename to packages/frontend-misskey-world-engine/src/room/objects/ceilingFanLight.ts diff --git a/packages/frontend/src/world/room/objects/chair.ts b/packages/frontend-misskey-world-engine/src/room/objects/chair.ts similarity index 100% rename from packages/frontend/src/world/room/objects/chair.ts rename to packages/frontend-misskey-world-engine/src/room/objects/chair.ts diff --git a/packages/frontend/src/world/room/objects/clippedPicture.ts b/packages/frontend-misskey-world-engine/src/room/objects/clippedPicture.ts similarity index 96% rename from packages/frontend/src/world/room/objects/clippedPicture.ts rename to packages/frontend-misskey-world-engine/src/room/objects/clippedPicture.ts index eea1bd04ff..61942aefa9 100644 --- a/packages/frontend/src/world/room/objects/clippedPicture.ts +++ b/packages/frontend-misskey-world-engine/src/room/objects/clippedPicture.ts @@ -5,7 +5,7 @@ import * as BABYLON from '@babylonjs/core'; import { createTextureManager, defineObject } from '../object.js'; -import { remap } from '../../utility.js'; +import { remap } from '../../../../../frontend-misskey-world-engine/src/utility.js'; import { clippedPicture_schema } from './clippedPicture.schema.js'; export const clippedPicture = defineObject(clippedPicture_schema, { diff --git a/packages/frontend/src/world/room/objects/coffeeCup.ts b/packages/frontend-misskey-world-engine/src/room/objects/coffeeCup.ts similarity index 100% rename from packages/frontend/src/world/room/objects/coffeeCup.ts rename to packages/frontend-misskey-world-engine/src/room/objects/coffeeCup.ts diff --git a/packages/frontend/src/world/room/objects/colorBox.ts b/packages/frontend-misskey-world-engine/src/room/objects/colorBox.ts similarity index 100% rename from packages/frontend/src/world/room/objects/colorBox.ts rename to packages/frontend-misskey-world-engine/src/room/objects/colorBox.ts diff --git a/packages/frontend/src/world/room/objects/cuboid.ts b/packages/frontend-misskey-world-engine/src/room/objects/cuboid.ts similarity index 100% rename from packages/frontend/src/world/room/objects/cuboid.ts rename to packages/frontend-misskey-world-engine/src/room/objects/cuboid.ts diff --git a/packages/frontend/src/world/room/objects/cupNoodle.ts b/packages/frontend-misskey-world-engine/src/room/objects/cupNoodle.ts similarity index 88% rename from packages/frontend/src/world/room/objects/cupNoodle.ts rename to packages/frontend-misskey-world-engine/src/room/objects/cupNoodle.ts index fe63323486..bd01a16c02 100644 --- a/packages/frontend/src/world/room/objects/cupNoodle.ts +++ b/packages/frontend-misskey-world-engine/src/room/objects/cupNoodle.ts @@ -5,7 +5,7 @@ import * as BABYLON from '@babylonjs/core'; import { defineObject } from '../object.js'; -import { cm } from '../../utility.js'; +import { cm } from '../../../../../frontend-misskey-world-engine/src/utility.js'; import { yuge } from '../utility.js'; import { cupNoodle_schema } from './cupNoodle.schema.js'; diff --git a/packages/frontend/src/world/room/objects/curtain.ts b/packages/frontend-misskey-world-engine/src/room/objects/curtain.ts similarity index 100% rename from packages/frontend/src/world/room/objects/curtain.ts rename to packages/frontend-misskey-world-engine/src/room/objects/curtain.ts diff --git a/packages/frontend/src/world/room/objects/custardPudding.ts b/packages/frontend-misskey-world-engine/src/room/objects/custardPudding.ts similarity index 100% rename from packages/frontend/src/world/room/objects/custardPudding.ts rename to packages/frontend-misskey-world-engine/src/room/objects/custardPudding.ts diff --git a/packages/frontend/src/world/room/objects/debugHipoly.ts b/packages/frontend-misskey-world-engine/src/room/objects/debugHipoly.ts similarity index 100% rename from packages/frontend/src/world/room/objects/debugHipoly.ts rename to packages/frontend-misskey-world-engine/src/room/objects/debugHipoly.ts diff --git a/packages/frontend/src/world/room/objects/debugMetal.ts b/packages/frontend-misskey-world-engine/src/room/objects/debugMetal.ts similarity index 100% rename from packages/frontend/src/world/room/objects/debugMetal.ts rename to packages/frontend-misskey-world-engine/src/room/objects/debugMetal.ts diff --git a/packages/frontend/src/world/room/objects/descriptionPlate.ts b/packages/frontend-misskey-world-engine/src/room/objects/descriptionPlate.ts similarity index 100% rename from packages/frontend/src/world/room/objects/descriptionPlate.ts rename to packages/frontend-misskey-world-engine/src/room/objects/descriptionPlate.ts diff --git a/packages/frontend/src/world/room/objects/desk.ts b/packages/frontend-misskey-world-engine/src/room/objects/desk.ts similarity index 100% rename from packages/frontend/src/world/room/objects/desk.ts rename to packages/frontend-misskey-world-engine/src/room/objects/desk.ts diff --git a/packages/frontend/src/world/room/objects/desktopPc.ts b/packages/frontend-misskey-world-engine/src/room/objects/desktopPc.ts similarity index 97% rename from packages/frontend/src/world/room/objects/desktopPc.ts rename to packages/frontend-misskey-world-engine/src/room/objects/desktopPc.ts index fad40a2603..e1fd33f675 100644 --- a/packages/frontend/src/world/room/objects/desktopPc.ts +++ b/packages/frontend-misskey-world-engine/src/room/objects/desktopPc.ts @@ -5,7 +5,7 @@ import * as BABYLON from '@babylonjs/core'; import { defineObject } from '../object.js'; -import { cm, WORLD_SCALE } from '../../utility.js'; +import { cm, WORLD_SCALE } from '../../../../../frontend-misskey-world-engine/src/utility.js'; import { getLightRangeFactorByGraphicsQuality } from '../utility.js'; import { desktopPc_schema } from './desktopPc.schema.js'; diff --git a/packages/frontend/src/world/room/objects/djMixer.ts b/packages/frontend-misskey-world-engine/src/room/objects/djMixer.ts similarity index 100% rename from packages/frontend/src/world/room/objects/djMixer.ts rename to packages/frontend-misskey-world-engine/src/room/objects/djMixer.ts diff --git a/packages/frontend/src/world/room/objects/djPlayer.ts b/packages/frontend-misskey-world-engine/src/room/objects/djPlayer.ts similarity index 94% rename from packages/frontend/src/world/room/objects/djPlayer.ts rename to packages/frontend-misskey-world-engine/src/room/objects/djPlayer.ts index 9829ad7ffb..1c5b3208ee 100644 --- a/packages/frontend/src/world/room/objects/djPlayer.ts +++ b/packages/frontend-misskey-world-engine/src/room/objects/djPlayer.ts @@ -5,7 +5,7 @@ import * as BABYLON from '@babylonjs/core'; import { createTextureManager, defineObject } from '../object.js'; -import { normalizeUvToSquare } from '../../utility.js'; +import { normalizeUvToSquare } from '../../../../../frontend-misskey-world-engine/src/utility.js'; import { djPlayer_schema } from './djPlayer.schema.js'; export const djPlayer = defineObject(djPlayer_schema, { diff --git a/packages/frontend/src/world/room/objects/ductRailSpotLights.ts b/packages/frontend-misskey-world-engine/src/room/objects/ductRailSpotLights.ts similarity index 100% rename from packages/frontend/src/world/room/objects/ductRailSpotLights.ts rename to packages/frontend-misskey-world-engine/src/room/objects/ductRailSpotLights.ts diff --git a/packages/frontend/src/world/room/objects/ductTape.ts b/packages/frontend-misskey-world-engine/src/room/objects/ductTape.ts similarity index 100% rename from packages/frontend/src/world/room/objects/ductTape.ts rename to packages/frontend-misskey-world-engine/src/room/objects/ductTape.ts diff --git a/packages/frontend/src/world/room/objects/electronicDisplayBoard.ts b/packages/frontend-misskey-world-engine/src/room/objects/electronicDisplayBoard.ts similarity index 97% rename from packages/frontend/src/world/room/objects/electronicDisplayBoard.ts rename to packages/frontend-misskey-world-engine/src/room/objects/electronicDisplayBoard.ts index 20ec7d5f46..13281dcdef 100644 --- a/packages/frontend/src/world/room/objects/electronicDisplayBoard.ts +++ b/packages/frontend-misskey-world-engine/src/room/objects/electronicDisplayBoard.ts @@ -5,7 +5,7 @@ import * as BABYLON from '@babylonjs/core'; import { defineObject } from '../object.js'; -import { RecyvlingTextGrid } from '../../utility.js'; +import { RecyvlingTextGrid } from '../../../../../frontend-misskey-world-engine/src/utility.js'; import { electronicDisplayBoard_schema } from './electronicDisplayBoard.schema.js'; export const electronicDisplayBoard = defineObject(electronicDisplayBoard_schema, { diff --git a/packages/frontend/src/world/room/objects/emptyBento.ts b/packages/frontend-misskey-world-engine/src/room/objects/emptyBento.ts similarity index 100% rename from packages/frontend/src/world/room/objects/emptyBento.ts rename to packages/frontend-misskey-world-engine/src/room/objects/emptyBento.ts diff --git a/packages/frontend/src/world/room/objects/energyDrink.ts b/packages/frontend-misskey-world-engine/src/room/objects/energyDrink.ts similarity index 100% rename from packages/frontend/src/world/room/objects/energyDrink.ts rename to packages/frontend-misskey-world-engine/src/room/objects/energyDrink.ts diff --git a/packages/frontend/src/world/room/objects/envelope.ts b/packages/frontend-misskey-world-engine/src/room/objects/envelope.ts similarity index 100% rename from packages/frontend/src/world/room/objects/envelope.ts rename to packages/frontend-misskey-world-engine/src/room/objects/envelope.ts diff --git a/packages/frontend/src/world/room/objects/facialTissue.ts b/packages/frontend-misskey-world-engine/src/room/objects/facialTissue.ts similarity index 100% rename from packages/frontend/src/world/room/objects/facialTissue.ts rename to packages/frontend-misskey-world-engine/src/room/objects/facialTissue.ts diff --git a/packages/frontend/src/world/room/objects/glassCylinderPotPlant.ts b/packages/frontend-misskey-world-engine/src/room/objects/glassCylinderPotPlant.ts similarity index 100% rename from packages/frontend/src/world/room/objects/glassCylinderPotPlant.ts rename to packages/frontend-misskey-world-engine/src/room/objects/glassCylinderPotPlant.ts diff --git a/packages/frontend/src/world/room/objects/handheldGameConsole.ts b/packages/frontend-misskey-world-engine/src/room/objects/handheldGameConsole.ts similarity index 100% rename from packages/frontend/src/world/room/objects/handheldGameConsole.ts rename to packages/frontend-misskey-world-engine/src/room/objects/handheldGameConsole.ts diff --git a/packages/frontend/src/world/room/objects/hangingDuctRail.ts b/packages/frontend-misskey-world-engine/src/room/objects/hangingDuctRail.ts similarity index 100% rename from packages/frontend/src/world/room/objects/hangingDuctRail.ts rename to packages/frontend-misskey-world-engine/src/room/objects/hangingDuctRail.ts diff --git a/packages/frontend/src/world/room/objects/hangingTShirt.ts b/packages/frontend-misskey-world-engine/src/room/objects/hangingTShirt.ts similarity index 100% rename from packages/frontend/src/world/room/objects/hangingTShirt.ts rename to packages/frontend-misskey-world-engine/src/room/objects/hangingTShirt.ts diff --git a/packages/frontend/src/world/room/objects/icosahedron.ts b/packages/frontend-misskey-world-engine/src/room/objects/icosahedron.ts similarity index 100% rename from packages/frontend/src/world/room/objects/icosahedron.ts rename to packages/frontend-misskey-world-engine/src/room/objects/icosahedron.ts diff --git a/packages/frontend/src/world/room/objects/ironFrameShelf.ts b/packages/frontend-misskey-world-engine/src/room/objects/ironFrameShelf.ts similarity index 100% rename from packages/frontend/src/world/room/objects/ironFrameShelf.ts rename to packages/frontend-misskey-world-engine/src/room/objects/ironFrameShelf.ts diff --git a/packages/frontend/src/world/room/objects/ironFrameTable.ts b/packages/frontend-misskey-world-engine/src/room/objects/ironFrameTable.ts similarity index 100% rename from packages/frontend/src/world/room/objects/ironFrameTable.ts rename to packages/frontend-misskey-world-engine/src/room/objects/ironFrameTable.ts diff --git a/packages/frontend/src/world/room/objects/issyoubin.ts b/packages/frontend-misskey-world-engine/src/room/objects/issyoubin.ts similarity index 100% rename from packages/frontend/src/world/room/objects/issyoubin.ts rename to packages/frontend-misskey-world-engine/src/room/objects/issyoubin.ts diff --git a/packages/frontend/src/world/room/objects/keyboard.ts b/packages/frontend-misskey-world-engine/src/room/objects/keyboard.ts similarity index 100% rename from packages/frontend/src/world/room/objects/keyboard.ts rename to packages/frontend-misskey-world-engine/src/room/objects/keyboard.ts diff --git a/packages/frontend/src/world/room/objects/laptopPc.ts b/packages/frontend-misskey-world-engine/src/room/objects/laptopPc.ts similarity index 97% rename from packages/frontend/src/world/room/objects/laptopPc.ts rename to packages/frontend-misskey-world-engine/src/room/objects/laptopPc.ts index f60489555c..d38811b63d 100644 --- a/packages/frontend/src/world/room/objects/laptopPc.ts +++ b/packages/frontend-misskey-world-engine/src/room/objects/laptopPc.ts @@ -5,7 +5,7 @@ import * as BABYLON from '@babylonjs/core'; import { createTextureManager, defineObject } from '../object.js'; -import { cm, WORLD_SCALE } from '../../utility.js'; +import { cm, WORLD_SCALE } from '../../../../../frontend-misskey-world-engine/src/utility.js'; import { getLightRangeFactorByGraphicsQuality } from '../utility.js'; import { laptopPc_schema } from './laptopPc.schema.js'; diff --git a/packages/frontend/src/world/room/objects/largeMousepad.ts b/packages/frontend-misskey-world-engine/src/room/objects/largeMousepad.ts similarity index 100% rename from packages/frontend/src/world/room/objects/largeMousepad.ts rename to packages/frontend-misskey-world-engine/src/room/objects/largeMousepad.ts diff --git a/packages/frontend/src/world/room/objects/lavaLamp.ts b/packages/frontend-misskey-world-engine/src/room/objects/lavaLamp.ts similarity index 98% rename from packages/frontend/src/world/room/objects/lavaLamp.ts rename to packages/frontend-misskey-world-engine/src/room/objects/lavaLamp.ts index fb42f6f982..6ce6880d18 100644 --- a/packages/frontend/src/world/room/objects/lavaLamp.ts +++ b/packages/frontend-misskey-world-engine/src/room/objects/lavaLamp.ts @@ -4,7 +4,7 @@ */ import * as BABYLON from '@babylonjs/core'; import { defineObject } from '../object.js'; -import { cm, WORLD_SCALE } from '../../utility.js'; +import { cm, WORLD_SCALE } from '../../../../../frontend-misskey-world-engine/src/utility.js'; import { getLightRangeFactorByGraphicsQuality } from '../utility.js'; import { lavaLamp_schema } from './lavaLamp.schema.js'; diff --git a/packages/frontend/src/world/room/objects/letterCase.ts b/packages/frontend-misskey-world-engine/src/room/objects/letterCase.ts similarity index 100% rename from packages/frontend/src/world/room/objects/letterCase.ts rename to packages/frontend-misskey-world-engine/src/room/objects/letterCase.ts diff --git a/packages/frontend/src/world/room/objects/lowPartitionBar.ts b/packages/frontend-misskey-world-engine/src/room/objects/lowPartitionBar.ts similarity index 100% rename from packages/frontend/src/world/room/objects/lowPartitionBar.ts rename to packages/frontend-misskey-world-engine/src/room/objects/lowPartitionBar.ts diff --git a/packages/frontend/src/world/room/objects/miObjet.ts b/packages/frontend-misskey-world-engine/src/room/objects/miObjet.ts similarity index 100% rename from packages/frontend/src/world/room/objects/miObjet.ts rename to packages/frontend-misskey-world-engine/src/room/objects/miObjet.ts diff --git a/packages/frontend/src/world/room/objects/miPlate.ts b/packages/frontend-misskey-world-engine/src/room/objects/miPlate.ts similarity index 100% rename from packages/frontend/src/world/room/objects/miPlate.ts rename to packages/frontend-misskey-world-engine/src/room/objects/miPlate.ts diff --git a/packages/frontend/src/world/room/objects/miPlateDisplayed.ts b/packages/frontend-misskey-world-engine/src/room/objects/miPlateDisplayed.ts similarity index 100% rename from packages/frontend/src/world/room/objects/miPlateDisplayed.ts rename to packages/frontend-misskey-world-engine/src/room/objects/miPlateDisplayed.ts diff --git a/packages/frontend/src/world/room/objects/milk.ts b/packages/frontend-misskey-world-engine/src/room/objects/milk.ts similarity index 100% rename from packages/frontend/src/world/room/objects/milk.ts rename to packages/frontend-misskey-world-engine/src/room/objects/milk.ts diff --git a/packages/frontend/src/world/room/objects/mixer.ts b/packages/frontend-misskey-world-engine/src/room/objects/mixer.ts similarity index 100% rename from packages/frontend/src/world/room/objects/mixer.ts rename to packages/frontend-misskey-world-engine/src/room/objects/mixer.ts diff --git a/packages/frontend/src/world/room/objects/monitor.ts b/packages/frontend-misskey-world-engine/src/room/objects/monitor.ts similarity index 96% rename from packages/frontend/src/world/room/objects/monitor.ts rename to packages/frontend-misskey-world-engine/src/room/objects/monitor.ts index 7bf2b6b595..b297c8b948 100644 --- a/packages/frontend/src/world/room/objects/monitor.ts +++ b/packages/frontend-misskey-world-engine/src/room/objects/monitor.ts @@ -5,7 +5,7 @@ import * as BABYLON from '@babylonjs/core'; import { createTextureManager, defineObject } from '../object.js'; -import { cm, WORLD_SCALE, normalizeUvToSquare } from '../../utility.js'; +import { cm, WORLD_SCALE, normalizeUvToSquare } from '../../../../../frontend-misskey-world-engine/src/utility.js'; import { getLightRangeFactorByGraphicsQuality } from '../utility.js'; import { monitor_schema } from './monitor.schema.js'; diff --git a/packages/frontend/src/world/room/objects/monitorSpeaker.ts b/packages/frontend-misskey-world-engine/src/room/objects/monitorSpeaker.ts similarity index 100% rename from packages/frontend/src/world/room/objects/monitorSpeaker.ts rename to packages/frontend-misskey-world-engine/src/room/objects/monitorSpeaker.ts diff --git a/packages/frontend/src/world/room/objects/monstera.ts b/packages/frontend-misskey-world-engine/src/room/objects/monstera.ts similarity index 100% rename from packages/frontend/src/world/room/objects/monstera.ts rename to packages/frontend-misskey-world-engine/src/room/objects/monstera.ts diff --git a/packages/frontend/src/world/room/objects/mug.ts b/packages/frontend-misskey-world-engine/src/room/objects/mug.ts similarity index 88% rename from packages/frontend/src/world/room/objects/mug.ts rename to packages/frontend-misskey-world-engine/src/room/objects/mug.ts index c5cb05af21..1ae03c0a21 100644 --- a/packages/frontend/src/world/room/objects/mug.ts +++ b/packages/frontend-misskey-world-engine/src/room/objects/mug.ts @@ -5,7 +5,7 @@ import * as BABYLON from '@babylonjs/core'; import { defineObject } from '../object.js'; -import { cm } from '../../utility.js'; +import { cm } from '../../../../../frontend-misskey-world-engine/src/utility.js'; import { yuge } from '../utility.js'; import { mug_schema } from './mug.schema.js'; diff --git a/packages/frontend/src/world/room/objects/newtonsCradle.ts b/packages/frontend-misskey-world-engine/src/room/objects/newtonsCradle.ts similarity index 100% rename from packages/frontend/src/world/room/objects/newtonsCradle.ts rename to packages/frontend-misskey-world-engine/src/room/objects/newtonsCradle.ts diff --git a/packages/frontend/src/world/room/objects/openedCardboardBox.ts b/packages/frontend-misskey-world-engine/src/room/objects/openedCardboardBox.ts similarity index 100% rename from packages/frontend/src/world/room/objects/openedCardboardBox.ts rename to packages/frontend-misskey-world-engine/src/room/objects/openedCardboardBox.ts diff --git a/packages/frontend/src/world/room/objects/pachira.ts b/packages/frontend-misskey-world-engine/src/room/objects/pachira.ts similarity index 100% rename from packages/frontend/src/world/room/objects/pachira.ts rename to packages/frontend-misskey-world-engine/src/room/objects/pachira.ts diff --git a/packages/frontend/src/world/room/objects/petBottle.ts b/packages/frontend-misskey-world-engine/src/room/objects/petBottle.ts similarity index 100% rename from packages/frontend/src/world/room/objects/petBottle.ts rename to packages/frontend-misskey-world-engine/src/room/objects/petBottle.ts diff --git a/packages/frontend/src/world/room/objects/piano.ts b/packages/frontend-misskey-world-engine/src/room/objects/piano.ts similarity index 100% rename from packages/frontend/src/world/room/objects/piano.ts rename to packages/frontend-misskey-world-engine/src/room/objects/piano.ts diff --git a/packages/frontend/src/world/room/objects/pictureFrame.ts b/packages/frontend-misskey-world-engine/src/room/objects/pictureFrame.ts similarity index 100% rename from packages/frontend/src/world/room/objects/pictureFrame.ts rename to packages/frontend-misskey-world-engine/src/room/objects/pictureFrame.ts diff --git a/packages/frontend/src/world/room/objects/pizza.ts b/packages/frontend-misskey-world-engine/src/room/objects/pizza.ts similarity index 100% rename from packages/frontend/src/world/room/objects/pizza.ts rename to packages/frontend-misskey-world-engine/src/room/objects/pizza.ts diff --git a/packages/frontend/src/world/room/objects/plant.ts b/packages/frontend-misskey-world-engine/src/room/objects/plant.ts similarity index 100% rename from packages/frontend/src/world/room/objects/plant.ts rename to packages/frontend-misskey-world-engine/src/room/objects/plant.ts diff --git a/packages/frontend/src/world/room/objects/plant2.ts b/packages/frontend-misskey-world-engine/src/room/objects/plant2.ts similarity index 100% rename from packages/frontend/src/world/room/objects/plant2.ts rename to packages/frontend-misskey-world-engine/src/room/objects/plant2.ts diff --git a/packages/frontend/src/world/room/objects/poster.ts b/packages/frontend-misskey-world-engine/src/room/objects/poster.ts similarity index 100% rename from packages/frontend/src/world/room/objects/poster.ts rename to packages/frontend-misskey-world-engine/src/room/objects/poster.ts diff --git a/packages/frontend/src/world/room/objects/powerStrip.ts b/packages/frontend-misskey-world-engine/src/room/objects/powerStrip.ts similarity index 100% rename from packages/frontend/src/world/room/objects/powerStrip.ts rename to packages/frontend-misskey-world-engine/src/room/objects/powerStrip.ts diff --git a/packages/frontend/src/world/room/objects/radiometer.ts b/packages/frontend-misskey-world-engine/src/room/objects/radiometer.ts similarity index 100% rename from packages/frontend/src/world/room/objects/radiometer.ts rename to packages/frontend-misskey-world-engine/src/room/objects/radiometer.ts diff --git a/packages/frontend/src/world/room/objects/randomBooks.ts b/packages/frontend-misskey-world-engine/src/room/objects/randomBooks.ts similarity index 100% rename from packages/frontend/src/world/room/objects/randomBooks.ts rename to packages/frontend-misskey-world-engine/src/room/objects/randomBooks.ts diff --git a/packages/frontend/src/world/room/objects/recordPlayer.ts b/packages/frontend-misskey-world-engine/src/room/objects/recordPlayer.ts similarity index 100% rename from packages/frontend/src/world/room/objects/recordPlayer.ts rename to packages/frontend-misskey-world-engine/src/room/objects/recordPlayer.ts diff --git a/packages/frontend/src/world/room/objects/rolledUpPoster.ts b/packages/frontend-misskey-world-engine/src/room/objects/rolledUpPoster.ts similarity index 100% rename from packages/frontend/src/world/room/objects/rolledUpPoster.ts rename to packages/frontend-misskey-world-engine/src/room/objects/rolledUpPoster.ts diff --git a/packages/frontend/src/world/room/objects/roundRug.ts b/packages/frontend-misskey-world-engine/src/room/objects/roundRug.ts similarity index 100% rename from packages/frontend/src/world/room/objects/roundRug.ts rename to packages/frontend-misskey-world-engine/src/room/objects/roundRug.ts diff --git a/packages/frontend/src/world/room/objects/router.ts b/packages/frontend-misskey-world-engine/src/room/objects/router.ts similarity index 100% rename from packages/frontend/src/world/room/objects/router.ts rename to packages/frontend-misskey-world-engine/src/room/objects/router.ts diff --git a/packages/frontend/src/world/room/objects/siphon.ts b/packages/frontend-misskey-world-engine/src/room/objects/siphon.ts similarity index 100% rename from packages/frontend/src/world/room/objects/siphon.ts rename to packages/frontend-misskey-world-engine/src/room/objects/siphon.ts diff --git a/packages/frontend/src/world/room/objects/snakeplant.ts b/packages/frontend-misskey-world-engine/src/room/objects/snakeplant.ts similarity index 100% rename from packages/frontend/src/world/room/objects/snakeplant.ts rename to packages/frontend-misskey-world-engine/src/room/objects/snakeplant.ts diff --git a/packages/frontend/src/world/room/objects/sofa.ts b/packages/frontend-misskey-world-engine/src/room/objects/sofa.ts similarity index 100% rename from packages/frontend/src/world/room/objects/sofa.ts rename to packages/frontend-misskey-world-engine/src/room/objects/sofa.ts diff --git a/packages/frontend/src/world/room/objects/speaker.ts b/packages/frontend-misskey-world-engine/src/room/objects/speaker.ts similarity index 100% rename from packages/frontend/src/world/room/objects/speaker.ts rename to packages/frontend-misskey-world-engine/src/room/objects/speaker.ts diff --git a/packages/frontend/src/world/room/objects/speakerStand.ts b/packages/frontend-misskey-world-engine/src/room/objects/speakerStand.ts similarity index 100% rename from packages/frontend/src/world/room/objects/speakerStand.ts rename to packages/frontend-misskey-world-engine/src/room/objects/speakerStand.ts diff --git a/packages/frontend/src/world/room/objects/spotLight.ts b/packages/frontend-misskey-world-engine/src/room/objects/spotLight.ts similarity index 100% rename from packages/frontend/src/world/room/objects/spotLight.ts rename to packages/frontend-misskey-world-engine/src/room/objects/spotLight.ts diff --git a/packages/frontend/src/world/room/objects/sprayer.ts b/packages/frontend-misskey-world-engine/src/room/objects/sprayer.ts similarity index 100% rename from packages/frontend/src/world/room/objects/sprayer.ts rename to packages/frontend-misskey-world-engine/src/room/objects/sprayer.ts diff --git a/packages/frontend/src/world/room/objects/stanchionPole.ts b/packages/frontend-misskey-world-engine/src/room/objects/stanchionPole.ts similarity index 100% rename from packages/frontend/src/world/room/objects/stanchionPole.ts rename to packages/frontend-misskey-world-engine/src/room/objects/stanchionPole.ts diff --git a/packages/frontend/src/world/room/objects/steelRack.ts b/packages/frontend-misskey-world-engine/src/room/objects/steelRack.ts similarity index 100% rename from packages/frontend/src/world/room/objects/steelRack.ts rename to packages/frontend-misskey-world-engine/src/room/objects/steelRack.ts diff --git a/packages/frontend/src/world/room/objects/stormGlass.ts b/packages/frontend-misskey-world-engine/src/room/objects/stormGlass.ts similarity index 100% rename from packages/frontend/src/world/room/objects/stormGlass.ts rename to packages/frontend-misskey-world-engine/src/room/objects/stormGlass.ts diff --git a/packages/frontend/src/world/room/objects/tableSalt.ts b/packages/frontend-misskey-world-engine/src/room/objects/tableSalt.ts similarity index 100% rename from packages/frontend/src/world/room/objects/tableSalt.ts rename to packages/frontend-misskey-world-engine/src/room/objects/tableSalt.ts diff --git a/packages/frontend/src/world/room/objects/tabletopCalendar.ts b/packages/frontend-misskey-world-engine/src/room/objects/tabletopCalendar.ts similarity index 100% rename from packages/frontend/src/world/room/objects/tabletopCalendar.ts rename to packages/frontend-misskey-world-engine/src/room/objects/tabletopCalendar.ts diff --git a/packages/frontend/src/world/room/objects/tabletopDigitalClock.ts b/packages/frontend-misskey-world-engine/src/room/objects/tabletopDigitalClock.ts similarity index 100% rename from packages/frontend/src/world/room/objects/tabletopDigitalClock.ts rename to packages/frontend-misskey-world-engine/src/room/objects/tabletopDigitalClock.ts diff --git a/packages/frontend/src/world/room/objects/tabletopFlag.ts b/packages/frontend-misskey-world-engine/src/room/objects/tabletopFlag.ts similarity index 100% rename from packages/frontend/src/world/room/objects/tabletopFlag.ts rename to packages/frontend-misskey-world-engine/src/room/objects/tabletopFlag.ts diff --git a/packages/frontend/src/world/room/objects/tabletopGlassPictureFrame.ts b/packages/frontend-misskey-world-engine/src/room/objects/tabletopGlassPictureFrame.ts similarity index 100% rename from packages/frontend/src/world/room/objects/tabletopGlassPictureFrame.ts rename to packages/frontend-misskey-world-engine/src/room/objects/tabletopGlassPictureFrame.ts diff --git a/packages/frontend/src/world/room/objects/tabletopIronFrameStand.ts b/packages/frontend-misskey-world-engine/src/room/objects/tabletopIronFrameStand.ts similarity index 100% rename from packages/frontend/src/world/room/objects/tabletopIronFrameStand.ts rename to packages/frontend-misskey-world-engine/src/room/objects/tabletopIronFrameStand.ts diff --git a/packages/frontend/src/world/room/objects/tabletopLcdButtonsController.ts b/packages/frontend-misskey-world-engine/src/room/objects/tabletopLcdButtonsController.ts similarity index 95% rename from packages/frontend/src/world/room/objects/tabletopLcdButtonsController.ts rename to packages/frontend-misskey-world-engine/src/room/objects/tabletopLcdButtonsController.ts index 05a3f5b32b..752ca37fb6 100644 --- a/packages/frontend/src/world/room/objects/tabletopLcdButtonsController.ts +++ b/packages/frontend-misskey-world-engine/src/room/objects/tabletopLcdButtonsController.ts @@ -5,7 +5,7 @@ import * as BABYLON from '@babylonjs/core'; import { createTextureManager, defineObject } from '../object.js'; -import { normalizeUvToSquare } from '../../utility.js'; +import { normalizeUvToSquare } from '../../../../../frontend-misskey-world-engine/src/utility.js'; import { tabletopLcdButtonsController_schema } from './tabletopLcdButtonsController.schema.js'; export const tabletopLcdButtonsController = defineObject(tabletopLcdButtonsController_schema, { diff --git a/packages/frontend/src/world/room/objects/tabletopPictureFrame.ts b/packages/frontend-misskey-world-engine/src/room/objects/tabletopPictureFrame.ts similarity index 100% rename from packages/frontend/src/world/room/objects/tabletopPictureFrame.ts rename to packages/frontend-misskey-world-engine/src/room/objects/tabletopPictureFrame.ts diff --git a/packages/frontend/src/world/room/objects/tapestry.ts b/packages/frontend-misskey-world-engine/src/room/objects/tapestry.ts similarity index 100% rename from packages/frontend/src/world/room/objects/tapestry.ts rename to packages/frontend-misskey-world-engine/src/room/objects/tapestry.ts diff --git a/packages/frontend/src/world/room/objects/tetrapod.ts b/packages/frontend-misskey-world-engine/src/room/objects/tetrapod.ts similarity index 100% rename from packages/frontend/src/world/room/objects/tetrapod.ts rename to packages/frontend-misskey-world-engine/src/room/objects/tetrapod.ts diff --git a/packages/frontend/src/world/room/objects/tv.ts b/packages/frontend-misskey-world-engine/src/room/objects/tv.ts similarity index 100% rename from packages/frontend/src/world/room/objects/tv.ts rename to packages/frontend-misskey-world-engine/src/room/objects/tv.ts diff --git a/packages/frontend/src/world/room/objects/twistedCubeObjet.ts b/packages/frontend-misskey-world-engine/src/room/objects/twistedCubeObjet.ts similarity index 100% rename from packages/frontend/src/world/room/objects/twistedCubeObjet.ts rename to packages/frontend-misskey-world-engine/src/room/objects/twistedCubeObjet.ts diff --git a/packages/frontend/src/world/room/objects/usedTissue.ts b/packages/frontend-misskey-world-engine/src/room/objects/usedTissue.ts similarity index 100% rename from packages/frontend/src/world/room/objects/usedTissue.ts rename to packages/frontend-misskey-world-engine/src/room/objects/usedTissue.ts diff --git a/packages/frontend/src/world/room/objects/wallCanvas.ts b/packages/frontend-misskey-world-engine/src/room/objects/wallCanvas.ts similarity index 100% rename from packages/frontend/src/world/room/objects/wallCanvas.ts rename to packages/frontend-misskey-world-engine/src/room/objects/wallCanvas.ts diff --git a/packages/frontend/src/world/room/objects/wallClock.ts b/packages/frontend-misskey-world-engine/src/room/objects/wallClock.ts similarity index 100% rename from packages/frontend/src/world/room/objects/wallClock.ts rename to packages/frontend-misskey-world-engine/src/room/objects/wallClock.ts diff --git a/packages/frontend/src/world/room/objects/wallGlassPictureFrame.ts b/packages/frontend-misskey-world-engine/src/room/objects/wallGlassPictureFrame.ts similarity index 100% rename from packages/frontend/src/world/room/objects/wallGlassPictureFrame.ts rename to packages/frontend-misskey-world-engine/src/room/objects/wallGlassPictureFrame.ts diff --git a/packages/frontend/src/world/room/objects/wallMirror.ts b/packages/frontend-misskey-world-engine/src/room/objects/wallMirror.ts similarity index 100% rename from packages/frontend/src/world/room/objects/wallMirror.ts rename to packages/frontend-misskey-world-engine/src/room/objects/wallMirror.ts diff --git a/packages/frontend/src/world/room/objects/wallMountSpotLight.ts b/packages/frontend-misskey-world-engine/src/room/objects/wallMountSpotLight.ts similarity index 100% rename from packages/frontend/src/world/room/objects/wallMountSpotLight.ts rename to packages/frontend-misskey-world-engine/src/room/objects/wallMountSpotLight.ts diff --git a/packages/frontend/src/world/room/objects/wallShelf.ts b/packages/frontend-misskey-world-engine/src/room/objects/wallShelf.ts similarity index 100% rename from packages/frontend/src/world/room/objects/wallShelf.ts rename to packages/frontend-misskey-world-engine/src/room/objects/wallShelf.ts diff --git a/packages/frontend/src/world/room/objects/wireBasket.ts b/packages/frontend-misskey-world-engine/src/room/objects/wireBasket.ts similarity index 100% rename from packages/frontend/src/world/room/objects/wireBasket.ts rename to packages/frontend-misskey-world-engine/src/room/objects/wireBasket.ts diff --git a/packages/frontend/src/world/room/objects/wireNet.ts b/packages/frontend-misskey-world-engine/src/room/objects/wireNet.ts similarity index 100% rename from packages/frontend/src/world/room/objects/wireNet.ts rename to packages/frontend-misskey-world-engine/src/room/objects/wireNet.ts diff --git a/packages/frontend/src/world/room/objects/woodRingFloorLamp.ts b/packages/frontend-misskey-world-engine/src/room/objects/woodRingFloorLamp.ts similarity index 100% rename from packages/frontend/src/world/room/objects/woodRingFloorLamp.ts rename to packages/frontend-misskey-world-engine/src/room/objects/woodRingFloorLamp.ts diff --git a/packages/frontend/src/world/room/objects/woodRingsPendantLight.ts b/packages/frontend-misskey-world-engine/src/room/objects/woodRingsPendantLight.ts similarity index 100% rename from packages/frontend/src/world/room/objects/woodRingsPendantLight.ts rename to packages/frontend-misskey-world-engine/src/room/objects/woodRingsPendantLight.ts diff --git a/packages/frontend/src/world/room/objects/woodSoundAbsorbingPanel.ts b/packages/frontend-misskey-world-engine/src/room/objects/woodSoundAbsorbingPanel.ts similarity index 100% rename from packages/frontend/src/world/room/objects/woodSoundAbsorbingPanel.ts rename to packages/frontend-misskey-world-engine/src/room/objects/woodSoundAbsorbingPanel.ts diff --git a/packages/frontend/src/world/room/previewEngine.ts b/packages/frontend-misskey-world-engine/src/room/previewEngine.ts similarity index 99% rename from packages/frontend/src/world/room/previewEngine.ts rename to packages/frontend-misskey-world-engine/src/room/previewEngine.ts index a5c007e3c7..f933906a28 100644 --- a/packages/frontend/src/world/room/previewEngine.ts +++ b/packages/frontend-misskey-world-engine/src/room/previewEngine.ts @@ -162,7 +162,7 @@ export class RoomObjectPreviewEngine extends EngineBase<{ if (_DEV_) { // SR状態確認用 const box = BABYLON.MeshBuilder.CreateBox('', { size: cm(10) }, this.scene); - // eslint-disable-next-line no-restricted-globals + setInterval(() => { box.position = new BABYLON.Vector3(0, Math.random() * cm(10), 0); }, 10); @@ -312,7 +312,7 @@ export class RoomObjectPreviewEngine extends EngineBase<{ this.sr.disableSnapshotRendering(); this.engine.resize(true); // workerで実行される可能性がある - // eslint-disable-next-line no-restricted-globals + setTimeout(() => { this.sr.enableSnapshotRendering(); }, 1); diff --git a/packages/frontend-misskey-world-engine/src/room/previewEngineNonWorker.ts b/packages/frontend-misskey-world-engine/src/room/previewEngineNonWorker.ts new file mode 100644 index 0000000000..0edda90900 --- /dev/null +++ b/packages/frontend-misskey-world-engine/src/room/previewEngineNonWorker.ts @@ -0,0 +1,29 @@ +/* + * SPDX-FileCopyrightText: syuilo and misskey-project + * SPDX-License-Identifier: AGPL-3.0-only + */ + +import * as BABYLON from '@babylonjs/core'; +import { RoomObjectPreviewEngine } from './previewEngine.js'; + +//BABYLON.RegisterStandardEngineExtensions(); +//BABYLON.RegisterEnginesExtensionsEngineRawTexture(); +//BABYLON.RegisterCollisionCoordinator(); + +export async function createRoomPreviewEngine(params: { + canvas: HTMLCanvasElement; options: { graphicsQuality: number; resolution: number; fps: number | null }; +}) { + const babylonEngine = new BABYLON.WebGPUEngine(params.canvas, { doNotHandleContextLost: true, powerPreference: 'low-power', antialias: true }); + babylonEngine.compatibilityMode = false; + babylonEngine.enableOfflineSupport = false; + await babylonEngine.initAsync(); + if (params.options.resolution === 2) babylonEngine.setHardwareScalingLevel(0.5); + if (params.options.resolution === 0.5) babylonEngine.setHardwareScalingLevel(2); + + const engine = new RoomObjectPreviewEngine({ + engine: babylonEngine, + ...params.options, + }); + + return engine; +} diff --git a/packages/frontend/src/world/room/previewEngineWorker.ts b/packages/frontend-misskey-world-engine/src/room/previewEngineWorker.ts similarity index 89% rename from packages/frontend/src/world/room/previewEngineWorker.ts rename to packages/frontend-misskey-world-engine/src/room/previewEngineWorker.ts index 190b30f870..88e635b66e 100644 --- a/packages/frontend/src/world/room/previewEngineWorker.ts +++ b/packages/frontend-misskey-world-engine/src/room/previewEngineWorker.ts @@ -24,9 +24,6 @@ onmessage = async (event) => { babylonEngine.compatibilityMode = false; babylonEngine.enableOfflineSupport = false; await babylonEngine.initAsync(); - babylonEngine._device.lost.then((info) => { // TODO: babylonEngineの内部プロパティに依存しない方法をforumで聞く - self.postMessage({ type: 'contextlost', info: { reason: info.reason, message: info.message } }); // transferableじゃないデータが含まれている可能性も考慮してinfoそのままは送らない - }); if (event.data.options.resolution === 2) babylonEngine.setHardwareScalingLevel(0.5); if (event.data.options.resolution === 0.5) babylonEngine.setHardwareScalingLevel(2); diff --git a/packages/frontend/src/world/room/utility.ts b/packages/frontend-misskey-world-engine/src/room/utility.ts similarity index 100% rename from packages/frontend/src/world/room/utility.ts rename to packages/frontend-misskey-world-engine/src/room/utility.ts diff --git a/packages/frontend/src/world/room/worker.ts b/packages/frontend-misskey-world-engine/src/room/worker.ts similarity index 90% rename from packages/frontend/src/world/room/worker.ts rename to packages/frontend-misskey-world-engine/src/room/worker.ts index dbdb9a3812..b9b3b615ad 100644 --- a/packages/frontend/src/world/room/worker.ts +++ b/packages/frontend-misskey-world-engine/src/room/worker.ts @@ -28,9 +28,6 @@ onmessage = async (event) => { babylonEngine.compatibilityMode = false; babylonEngine.enableOfflineSupport = false; await babylonEngine.initAsync(); - babylonEngine._device.lost.then((info) => { // TODO: babylonEngineの内部プロパティに依存しない方法をforumで聞く - self.postMessage({ type: 'contextlost', info: { reason: info.reason, message: info.message } }); // transferableじゃないデータが含まれている可能性も考慮してinfoそのままは送らない - }); if (event.data.options.resolution === 2) babylonEngine.setHardwareScalingLevel(0.5); if (event.data.options.resolution === 0.5) babylonEngine.setHardwareScalingLevel(2); diff --git a/packages/frontend/src/world/utility.ts b/packages/frontend-misskey-world-engine/src/utility.ts similarity index 100% rename from packages/frontend/src/world/utility.ts rename to packages/frontend-misskey-world-engine/src/utility.ts diff --git a/packages/frontend-misskey-world-engine/tsconfig.json b/packages/frontend-misskey-world-engine/tsconfig.json new file mode 100644 index 0000000000..18da8e4a25 --- /dev/null +++ b/packages/frontend-misskey-world-engine/tsconfig.json @@ -0,0 +1,42 @@ +{ + "$schema": "https://json.schemastore.org/tsconfig", + "compilerOptions": { + "target": "ES2022", + "module": "nodenext", + "moduleResolution": "nodenext", + "declaration": true, + "declarationMap": true, + "sourceMap": false, + "outDir": "./built", + "removeComments": true, + "resolveJsonModule": true, + "strict": true, + "strictFunctionTypes": true, + "strictNullChecks": true, + "experimentalDecorators": true, + "noImplicitReturns": true, + "esModuleInterop": true, + "verbatimModuleSyntax": true, + "rootDir": "./src", + "paths": { + "@/*": ["./*"], + "@@/*": ["./*"] + }, + "typeRoots": [ + "./@types", + "./node_modules/@types" + ], + "lib": [ + "esnext", + "dom" + ] + }, + "include": [ + "@types/**/*.ts", + "src/**/*" + ], + "exclude": [ + "node_modules", + "test/**/*" + ] +} diff --git a/packages/frontend/package.json b/packages/frontend/package.json index 81ab5aa14a..2d0c19b7f7 100644 --- a/packages/frontend/package.json +++ b/packages/frontend/package.json @@ -17,10 +17,6 @@ }, "dependencies": { "@analytics/google-analytics": "1.1.0", - "@babylonjs/core": "9.9.0", - "@babylonjs/inspector": "9.9.0", - "@babylonjs/loaders": "9.9.0", - "@babylonjs/materials": "9.9.0", "@mcaptcha/core-glue": "0.1.0-alpha-5", "@misskey-dev/browser-image-resizer": "2024.1.0", "@misskey-dev/emoji-data": "17.0.3", @@ -61,6 +57,8 @@ "misskey-bubble-game": "workspace:*", "misskey-js": "workspace:*", "misskey-reversi": "workspace:*", + "misskey-world": "workspace:*", + "frontend-misskey-world-engine": "workspace:*", "photoswipe": "5.4.4", "punycode.js": "2.3.1", "qr-code-styling": "1.9.2", diff --git a/packages/frontend/src/world/engineControllerBase.ts b/packages/frontend/src/world/engineControllerBase.ts index a1c213f6f9..f9de3a6d1e 100644 --- a/packages/frontend/src/world/engineControllerBase.ts +++ b/packages/frontend/src/world/engineControllerBase.ts @@ -4,9 +4,8 @@ */ import { reactive, ref, shallowRef, triggerRef, watch } from 'vue'; -import * as BABYLON from '@babylonjs/core'; import { EventEmitter } from 'eventemitter3'; -import type { EngineBase, EngineBaseEvents } from './EngineBase.js'; +import type { EngineBase, EngineBaseEvents } from 'frontend-misskey-world-engine/src/EngineBase.js'; import * as os from '@/os.js'; import { i18n } from '@/i18n.js'; @@ -40,7 +39,7 @@ export abstract class EngineControllerBase Promise; - createEngine: (babylonEngine: BABYLON.WebGPUEngine) => Promise; + createEngine: () => Promise; }) { this.canvas = canvas; @@ -54,6 +53,10 @@ export abstract class EngineControllerBase { + this.onContextLost({ reason, message }); + }); + if (this.options.workerMode) { const offscreen = canvas.transferControlToOffscreen(); this.worker = await params.createWorker(offscreen); @@ -78,45 +81,19 @@ export abstract class EngineControllerBase { - // os.alert({ - // type: 'error', - // title: i18n.ts.somethingHappened, - // text: i18n.ts._miWorld.crushed_description, - // }); - //}); - babylonEngine._device.lost.then((info) => { // TODO: babylonEngineの内部プロパティに依存しない方法をforumで聞く - this.onContextLost(info); - }); - if (this.options.resolution === 2) babylonEngine.setHardwareScalingLevel(0.5); - if (this.options.resolution === 0.5) babylonEngine.setHardwareScalingLevel(2); - - this.engine = await params.createEngine(babylonEngine); - - this.engine.on('ev', ({ type, ctx }) => { + this.engine!.on('ev', ({ type, ctx }) => { engineEvents.emit(type, ctx); }); - await this.engine.init(); + await this.engine!.init(); this.initializeProgress.value = 1; this.isReady.value = true; @@ -124,7 +101,7 @@ export abstract class EngineControllerBase { import('@babylonjs/inspector').then(({ ShowInspector }) => { - ShowInspector(this.engine.scene); + ShowInspector(this.engine!.scene); }); }; } diff --git a/packages/frontend/src/world/room/controller.ts b/packages/frontend/src/world/room/controller.ts index cb24c217d6..08107f8943 100644 --- a/packages/frontend/src/world/room/controller.ts +++ b/packages/frontend/src/world/room/controller.ts @@ -4,7 +4,7 @@ */ import { ref, shallowRef } from 'vue'; -import { cm } from '../utility.js'; +import { cm } from '../../../../frontend-misskey-world-engine/src/utility.js'; import { EngineControllerBase } from '../EngineControllerBase.js'; import type { ShallowRef } from 'vue'; import type { RoomEngine, RoomState } from './engine.js'; @@ -49,18 +49,16 @@ export class RoomController extends EngineControllerBase { public async init(canvas: HTMLCanvasElement, attachments: RoomAttachments) { const { engineEvents } = await this._init_(canvas, { createWorker: (offscreen) => new Promise((resolve) => { - import('./worker?worker').then(({ default: RoomWorker }) => { + import('frontend-misskey-world-engine/src/room/worker?worker').then(({ default: RoomWorker }) => { const worker = new RoomWorker(); worker.postMessage({ type: 'init', canvas: offscreen, options: this.options, roomState: this.roomState.value, roomAttachments: attachments }, [offscreen]); resolve(worker); }); }), - createEngine: (babylonEngine) => new Promise((resolve) => { - import('./engine.js').then(({ RoomEngine }) => { - resolve(new RoomEngine(this.roomState.value, attachments, { - engine: babylonEngine, - ...this.options, - })); + createEngine: () => new Promise((resolve) => { + import('frontend-misskey-world-engine/src/room/nonWorker.js').then(({ createRoomEngine }) => { + const engine = createRoomEngine({ canvas, options: this.options, roomState: this.roomState.value, roomAttachments: attachments }); + resolve(engine); }); }), }); diff --git a/packages/frontend/src/world/room/previewEngineController.ts b/packages/frontend/src/world/room/previewEngineController.ts index 5777d3e4c5..dd936cabd1 100644 --- a/packages/frontend/src/world/room/previewEngineController.ts +++ b/packages/frontend/src/world/room/previewEngineController.ts @@ -26,18 +26,16 @@ export class PreviewEngineController extends EngineControllerBase new Promise((resolve) => { - import('./previewEngineWorker?worker').then(({ default: PreviewEngineWorker }) => { + import('misskey-world-engine/src/room/previewEngineWorker?worker').then(({ default: PreviewEngineWorker }) => { const worker = new PreviewEngineWorker(); worker.postMessage({ type: 'init', canvas: offscreen, options: this.options }, [offscreen]); resolve(worker); }); }), - createEngine: (babylonEngine) => new Promise((resolve) => { - import('./previewEngine.js').then(({ RoomObjectPreviewEngine }) => { - resolve(new RoomObjectPreviewEngine({ - engine: babylonEngine, - ...this.options, - })); + createEngine: () => new Promise((resolve) => { + import('misskey-world-engine/src/room/previewEngineNonWorker.js').then(({ createRoomPreviewEngine }) => { + const engine = createRoomPreviewEngine({ canvas, options: this.options }); + resolve(engine); }); }), }); diff --git a/packages/frontend/tsconfig.json b/packages/frontend/tsconfig.json index e80d981bd2..c118bd55d5 100644 --- a/packages/frontend/tsconfig.json +++ b/packages/frontend/tsconfig.json @@ -25,7 +25,8 @@ "skipLibCheck": true, "paths": { "@/*": ["./src/*"], - "@@/*": ["../frontend-shared/*"] + "@@/*": ["../frontend-shared/*"], + "misskey-world-engine/*": ["../frontend-misskey-world-engine/*"], }, "typeRoots": [ "./@types", diff --git a/packages/frontend/vite.config.ts b/packages/frontend/vite.config.ts index 0e3eef6d01..480d2b4881 100644 --- a/packages/frontend/vite.config.ts +++ b/packages/frontend/vite.config.ts @@ -135,6 +135,7 @@ export function getConfig(): UserConfig { alias: { '@/': __dirname + '/src/', '@@/': __dirname + '/../frontend-shared/', + 'misskey-world-engine/': __dirname + '/../frontend-misskey-world-engine/', '/client-assets/': __dirname + '/assets/', '/static-assets/': __dirname + '/../backend/assets/', '/fluent-emoji/': '@misskey-dev/emoji-assets/fluent-emoji/', @@ -218,7 +219,7 @@ export function getConfig(): UserConfig { // https://vitejs.dev/guide/dep-pre-bundling.html#monorepos-and-linked-dependencies commonjsOptions: { - include: [/misskey-js/, /misskey-reversi/, /misskey-bubble-game/, /node_modules/], + include: [/misskey-js/, /misskey-reversi/, /misskey-bubble-game/, /misskey-world/, /frontend-misskey-world-engine/, /node_modules/], }, }, diff --git a/packages/misskey-world/build.js b/packages/misskey-world/build.js new file mode 100644 index 0000000000..2e606f276f --- /dev/null +++ b/packages/misskey-world/build.js @@ -0,0 +1,107 @@ +import fs from 'node:fs'; +import { fileURLToPath } from 'node:url'; +import { dirname } from 'node:path'; +import * as esbuild from 'esbuild'; +import { build } from 'esbuild'; +import { execa } from 'execa'; + +const _filename = fileURLToPath(import.meta.url); +const _dirname = dirname(_filename); +const _package = JSON.parse(fs.readFileSync(_dirname + '/package.json', 'utf-8')); + +const entryPoints = fs.globSync('./src/**/**.{ts,tsx}'); + +/** @type {import('esbuild').BuildOptions} */ +const options = { + entryPoints, + minify: process.env.NODE_ENV === 'production', + outdir: './built', + target: 'es2022', + platform: 'browser', + format: 'esm', + sourcemap: 'linked', +}; + +const args = process.argv.slice(2).map(arg => arg.toLowerCase()); + +// built配下をすべて削除する +if (!args.includes('--no-clean')) { + fs.rmSync('./built', { recursive: true, force: true }); +} + +if (args.includes('--watch')) { + await watchSrc(); +} else { + await buildSrc(); +} + +async function buildSrc() { + console.log(`[${_package.name}] start building...`); + + await build(options) + .then(() => { + console.log(`[${_package.name}] build succeeded.`); + }) + .catch((err) => { + process.stderr.write(err.stderr); + process.exit(1); + }); + + if (process.env.NODE_ENV === 'production') { + console.log(`[${_package.name}] skip building d.ts because NODE_ENV is production.`); + } else { + await buildDts(); + } + + console.log(`[${_package.name}] finish building.`); +} + +function buildDts() { + return execa( + 'tsgo', + [ + '--project', 'tsconfig.json', + '--outDir', 'built', + '--declaration', 'true', + '--emitDeclarationOnly', 'true', + ], + { + stdout: process.stdout, + stderr: process.stderr, + }, + ); +} + +async function watchSrc() { + const plugins = [{ + name: 'gen-dts', + setup(build) { + build.onStart(() => { + console.log(`[${_package.name}] detect changed...`); + }); + build.onEnd(async result => { + if (result.errors.length > 0) { + console.error(`[${_package.name}] watch build failed:`, result); + return; + } + await buildDts(); + }); + }, + }]; + + console.log(`[${_package.name}] start watching...`); + + const context = await esbuild.context({ ...options, plugins }); + await context.watch(); + + await new Promise((resolve, reject) => { + process.on('SIGHUP', resolve); + process.on('SIGINT', resolve); + process.on('SIGTERM', resolve); + process.on('uncaughtException', reject); + process.on('exit', resolve); + }).finally(async () => { + await context.dispose(); + console.log(`[${_package.name}] finish watching.`); + }); +} diff --git a/packages/misskey-world/eslint.config.js b/packages/misskey-world/eslint.config.js new file mode 100644 index 0000000000..bce383b1a6 --- /dev/null +++ b/packages/misskey-world/eslint.config.js @@ -0,0 +1,28 @@ +import tsParser from '@typescript-eslint/parser'; +import sharedConfig from '../shared/eslint.config.js'; + +// eslint-disable-next-line import/no-default-export +export default [ + ...sharedConfig, + { + ignores: [ + '**/node_modules', + 'built', + 'coverage', + 'jest.config.ts', + 'test', + 'test-d', + ], + }, + { + files: ['**/*.ts', '**/*.tsx'], + languageOptions: { + parserOptions: { + parser: tsParser, + project: ['./tsconfig.json'], + sourceType: 'module', + tsconfigRootDir: import.meta.dirname, + }, + }, + }, +]; diff --git a/packages/misskey-world/package.json b/packages/misskey-world/package.json new file mode 100644 index 0000000000..3c0eebc137 --- /dev/null +++ b/packages/misskey-world/package.json @@ -0,0 +1,42 @@ +{ + "type": "module", + "name": "misskey-world", + "version": "0.0.1", + "main": "./built/index.js", + "types": "./built/index.d.ts", + "exports": { + ".": { + "import": "./built/index.js", + "types": "./built/index.d.ts", + "default": "./built/index.js" + }, + "./*": { + "import": "./built/*", + "types": "./built/*", + "default": "./built/*" + } + }, + "scripts": { + "build": "node ./build.js", + "watch": "nodemon -w package.json -e json --exec \"node ./build.js --watch\"", + "eslint": "eslint './**/*.{js,jsx,ts,tsx}'", + "typecheck": "tsgo --noEmit", + "lint": "pnpm typecheck && pnpm eslint" + }, + "devDependencies": { + "@types/node": "24.12.2", + "@types/seedrandom": "3.0.8", + "@typescript-eslint/eslint-plugin": "8.59.2", + "@typescript-eslint/parser": "8.59.2", + "esbuild": "0.28.0", + "execa": "9.6.1", + "nodemon": "3.1.14" + }, + "files": [ + "built" + ], + "dependencies": { + "eventemitter3": "5.0.4", + "seedrandom": "3.0.5" + } +} diff --git a/packages/frontend/src/world/room/object-schema-defs.ts b/packages/misskey-world/src/room/object-schema-defs.ts similarity index 100% rename from packages/frontend/src/world/room/object-schema-defs.ts rename to packages/misskey-world/src/room/object-schema-defs.ts diff --git a/packages/misskey-world/src/room/object.ts b/packages/misskey-world/src/room/object.ts new file mode 100644 index 0000000000..0cfdaab786 --- /dev/null +++ b/packages/misskey-world/src/room/object.ts @@ -0,0 +1,120 @@ +/* + * SPDX-FileCopyrightText: syuilo and misskey-project + * SPDX-License-Identifier: AGPL-3.0-only + */ + +// babylonのドメイン知識は持たない +export type RoomStateObject = { + id: string; + type: string; + position: [number, number, number]; + rotation: [number, number, number]; + options: RawOptions; + + /** + * 別のオブジェクトのID + */ + sticky?: string | null; +}; + +export type RoomObjectInstance = { + onInited?: () => void; + onOptionsUpdated?: (kv: [K, V]) => void; + interactions: Record void; + }>; + primaryInteraction?: string | null; + resetTemporaryState?: () => void; + dispose: () => void; +}; + +export type NumberOptionSchema = { + type: 'number'; + min?: number; + max?: number; + step?: number; +}; + +export type BooleanOptionSchema = { + type: 'boolean'; +}; + +export type StringOptionSchema = { + type: 'string'; +}; + +export type ColorOptionSchema = { + type: 'color'; +}; + +export type MaterialOptionSchema = { + type: 'material'; +}; + +export type LightOptionSchema = { + type: 'light'; +}; + +export type EnumOptionSchema = { + type: 'enum'; + enum: { + value: string | number; + }[]; +}; + +export type RangeOptionSchema = { + type: 'range'; + min: number; + max: number; + step?: number; +}; + +export type ImageOptionSchema = { + type: 'image'; + presets: { + value: string; + }[]; +}; + +export type SeedOptionSchema = { + type: 'seed'; +}; + +export type OptionsSchema = Record; + +export type RawOptions = Record & { + readonly __brand: unique symbol; +}; + +type RawImageValue = { type: Presets | null | '_custom_'; driveFileId?: string | null; fit?: 'cover' | 'contain' | 'stretch'; }; +export type GetRawOptionsSchemaValues = { + [K in keyof T]: + T[K] extends NumberOptionSchema ? number : + T[K] extends BooleanOptionSchema ? boolean : + T[K] extends StringOptionSchema ? string : + T[K] extends ColorOptionSchema ? [number, number, number] : + T[K] extends MaterialOptionSchema ? { color: [number, number, number]; metallic: number; roughness: number; } : + T[K] extends LightOptionSchema ? { color: [number, number, number]; brightness: number; } : + T[K] extends EnumOptionSchema ? T[K]['enum'][number]['value'] : + T[K] extends RangeOptionSchema ? number : + T[K] extends ImageOptionSchema ? RawImageValue : + T[K] extends SeedOptionSchema ? number : + never; +}; + +export type ObjectSchemaDef = { + id: string; + options: { + schema: string extends keyof OpSc ? OptionsSchema : OpSc; + default: string extends keyof OpSc ? RawOptions : GetRawOptionsSchemaValues; // 関数にした方が使用側でdeepCloneの必要がなくて綺麗かもしれない + }; + placement: 'top' | 'side' | 'bottom' | 'wall' | 'ceiling' | 'floor'; + hasCollisions?: boolean; + hasTexture?: boolean; + canPreMeshesMerging?: boolean; // TODO: 除外するメッシュ名を指定できるようにする + isChair?: boolean; +}; + +export function defineObjectSchema(def: ObjectSchemaDef): ObjectSchemaDef { + return def; +} diff --git a/packages/frontend/src/world/room/objects/a4Case.schema.ts b/packages/misskey-world/src/room/objects/a4Case.schema.ts similarity index 100% rename from packages/frontend/src/world/room/objects/a4Case.schema.ts rename to packages/misskey-world/src/room/objects/a4Case.schema.ts diff --git a/packages/frontend/src/world/room/objects/aircon.schema.ts b/packages/misskey-world/src/room/objects/aircon.schema.ts similarity index 100% rename from packages/frontend/src/world/room/objects/aircon.schema.ts rename to packages/misskey-world/src/room/objects/aircon.schema.ts diff --git a/packages/frontend/src/world/room/objects/allInOnePc.schema.ts b/packages/misskey-world/src/room/objects/allInOnePc.schema.ts similarity index 100% rename from packages/frontend/src/world/room/objects/allInOnePc.schema.ts rename to packages/misskey-world/src/room/objects/allInOnePc.schema.ts diff --git a/packages/frontend/src/world/room/objects/aquarium.schema.ts b/packages/misskey-world/src/room/objects/aquarium.schema.ts similarity index 100% rename from packages/frontend/src/world/room/objects/aquarium.schema.ts rename to packages/misskey-world/src/room/objects/aquarium.schema.ts diff --git a/packages/frontend/src/world/room/objects/aromaReedDiffuser.schema.ts b/packages/misskey-world/src/room/objects/aromaReedDiffuser.schema.ts similarity index 100% rename from packages/frontend/src/world/room/objects/aromaReedDiffuser.schema.ts rename to packages/misskey-world/src/room/objects/aromaReedDiffuser.schema.ts diff --git a/packages/frontend/src/world/room/objects/banknote.schema.ts b/packages/misskey-world/src/room/objects/banknote.schema.ts similarity index 100% rename from packages/frontend/src/world/room/objects/banknote.schema.ts rename to packages/misskey-world/src/room/objects/banknote.schema.ts diff --git a/packages/frontend/src/world/room/objects/beamLamp.schema.ts b/packages/misskey-world/src/room/objects/beamLamp.schema.ts similarity index 100% rename from packages/frontend/src/world/room/objects/beamLamp.schema.ts rename to packages/misskey-world/src/room/objects/beamLamp.schema.ts diff --git a/packages/frontend/src/world/room/objects/bed.schema.ts b/packages/misskey-world/src/room/objects/bed.schema.ts similarity index 100% rename from packages/frontend/src/world/room/objects/bed.schema.ts rename to packages/misskey-world/src/room/objects/bed.schema.ts diff --git a/packages/frontend/src/world/room/objects/blind.schema.ts b/packages/misskey-world/src/room/objects/blind.schema.ts similarity index 100% rename from packages/frontend/src/world/room/objects/blind.schema.ts rename to packages/misskey-world/src/room/objects/blind.schema.ts diff --git a/packages/frontend/src/world/room/objects/book.schema.ts b/packages/misskey-world/src/room/objects/book.schema.ts similarity index 100% rename from packages/frontend/src/world/room/objects/book.schema.ts rename to packages/misskey-world/src/room/objects/book.schema.ts diff --git a/packages/frontend/src/world/room/objects/books.schema.ts b/packages/misskey-world/src/room/objects/books.schema.ts similarity index 100% rename from packages/frontend/src/world/room/objects/books.schema.ts rename to packages/misskey-world/src/room/objects/books.schema.ts diff --git a/packages/frontend/src/world/room/objects/boxWallShelf.schema.ts b/packages/misskey-world/src/room/objects/boxWallShelf.schema.ts similarity index 100% rename from packages/frontend/src/world/room/objects/boxWallShelf.schema.ts rename to packages/misskey-world/src/room/objects/boxWallShelf.schema.ts diff --git a/packages/frontend/src/world/room/objects/cactusS.schema.ts b/packages/misskey-world/src/room/objects/cactusS.schema.ts similarity index 100% rename from packages/frontend/src/world/room/objects/cactusS.schema.ts rename to packages/misskey-world/src/room/objects/cactusS.schema.ts diff --git a/packages/frontend/src/world/room/objects/cardboardBox.schema.ts b/packages/misskey-world/src/room/objects/cardboardBox.schema.ts similarity index 100% rename from packages/frontend/src/world/room/objects/cardboardBox.schema.ts rename to packages/misskey-world/src/room/objects/cardboardBox.schema.ts diff --git a/packages/frontend/src/world/room/objects/ceilingFanLight.schema.ts b/packages/misskey-world/src/room/objects/ceilingFanLight.schema.ts similarity index 100% rename from packages/frontend/src/world/room/objects/ceilingFanLight.schema.ts rename to packages/misskey-world/src/room/objects/ceilingFanLight.schema.ts diff --git a/packages/frontend/src/world/room/objects/chair.schema.ts b/packages/misskey-world/src/room/objects/chair.schema.ts similarity index 100% rename from packages/frontend/src/world/room/objects/chair.schema.ts rename to packages/misskey-world/src/room/objects/chair.schema.ts diff --git a/packages/frontend/src/world/room/objects/clippedPicture.schema.ts b/packages/misskey-world/src/room/objects/clippedPicture.schema.ts similarity index 100% rename from packages/frontend/src/world/room/objects/clippedPicture.schema.ts rename to packages/misskey-world/src/room/objects/clippedPicture.schema.ts diff --git a/packages/frontend/src/world/room/objects/coffeeCup.schema.ts b/packages/misskey-world/src/room/objects/coffeeCup.schema.ts similarity index 100% rename from packages/frontend/src/world/room/objects/coffeeCup.schema.ts rename to packages/misskey-world/src/room/objects/coffeeCup.schema.ts diff --git a/packages/frontend/src/world/room/objects/colorBox.schema.ts b/packages/misskey-world/src/room/objects/colorBox.schema.ts similarity index 100% rename from packages/frontend/src/world/room/objects/colorBox.schema.ts rename to packages/misskey-world/src/room/objects/colorBox.schema.ts diff --git a/packages/frontend/src/world/room/objects/cuboid.schema.ts b/packages/misskey-world/src/room/objects/cuboid.schema.ts similarity index 100% rename from packages/frontend/src/world/room/objects/cuboid.schema.ts rename to packages/misskey-world/src/room/objects/cuboid.schema.ts diff --git a/packages/frontend/src/world/room/objects/cupNoodle.schema.ts b/packages/misskey-world/src/room/objects/cupNoodle.schema.ts similarity index 100% rename from packages/frontend/src/world/room/objects/cupNoodle.schema.ts rename to packages/misskey-world/src/room/objects/cupNoodle.schema.ts diff --git a/packages/frontend/src/world/room/objects/curtain.schema.ts b/packages/misskey-world/src/room/objects/curtain.schema.ts similarity index 100% rename from packages/frontend/src/world/room/objects/curtain.schema.ts rename to packages/misskey-world/src/room/objects/curtain.schema.ts diff --git a/packages/frontend/src/world/room/objects/custardPudding.schema.ts b/packages/misskey-world/src/room/objects/custardPudding.schema.ts similarity index 100% rename from packages/frontend/src/world/room/objects/custardPudding.schema.ts rename to packages/misskey-world/src/room/objects/custardPudding.schema.ts diff --git a/packages/frontend/src/world/room/objects/debugHipoly.schema.ts b/packages/misskey-world/src/room/objects/debugHipoly.schema.ts similarity index 100% rename from packages/frontend/src/world/room/objects/debugHipoly.schema.ts rename to packages/misskey-world/src/room/objects/debugHipoly.schema.ts diff --git a/packages/frontend/src/world/room/objects/debugMetal.schema.ts b/packages/misskey-world/src/room/objects/debugMetal.schema.ts similarity index 100% rename from packages/frontend/src/world/room/objects/debugMetal.schema.ts rename to packages/misskey-world/src/room/objects/debugMetal.schema.ts diff --git a/packages/frontend/src/world/room/objects/descriptionPlate.schema.ts b/packages/misskey-world/src/room/objects/descriptionPlate.schema.ts similarity index 100% rename from packages/frontend/src/world/room/objects/descriptionPlate.schema.ts rename to packages/misskey-world/src/room/objects/descriptionPlate.schema.ts diff --git a/packages/frontend/src/world/room/objects/desk.schema.ts b/packages/misskey-world/src/room/objects/desk.schema.ts similarity index 100% rename from packages/frontend/src/world/room/objects/desk.schema.ts rename to packages/misskey-world/src/room/objects/desk.schema.ts diff --git a/packages/frontend/src/world/room/objects/desktopPc.schema.ts b/packages/misskey-world/src/room/objects/desktopPc.schema.ts similarity index 100% rename from packages/frontend/src/world/room/objects/desktopPc.schema.ts rename to packages/misskey-world/src/room/objects/desktopPc.schema.ts diff --git a/packages/frontend/src/world/room/objects/djMixer.schema.ts b/packages/misskey-world/src/room/objects/djMixer.schema.ts similarity index 100% rename from packages/frontend/src/world/room/objects/djMixer.schema.ts rename to packages/misskey-world/src/room/objects/djMixer.schema.ts diff --git a/packages/frontend/src/world/room/objects/djPlayer.schema.ts b/packages/misskey-world/src/room/objects/djPlayer.schema.ts similarity index 100% rename from packages/frontend/src/world/room/objects/djPlayer.schema.ts rename to packages/misskey-world/src/room/objects/djPlayer.schema.ts diff --git a/packages/frontend/src/world/room/objects/ductRailSpotLights.schema.ts b/packages/misskey-world/src/room/objects/ductRailSpotLights.schema.ts similarity index 100% rename from packages/frontend/src/world/room/objects/ductRailSpotLights.schema.ts rename to packages/misskey-world/src/room/objects/ductRailSpotLights.schema.ts diff --git a/packages/frontend/src/world/room/objects/ductTape.schema.ts b/packages/misskey-world/src/room/objects/ductTape.schema.ts similarity index 100% rename from packages/frontend/src/world/room/objects/ductTape.schema.ts rename to packages/misskey-world/src/room/objects/ductTape.schema.ts diff --git a/packages/frontend/src/world/room/objects/electronicDisplayBoard.schema.ts b/packages/misskey-world/src/room/objects/electronicDisplayBoard.schema.ts similarity index 100% rename from packages/frontend/src/world/room/objects/electronicDisplayBoard.schema.ts rename to packages/misskey-world/src/room/objects/electronicDisplayBoard.schema.ts diff --git a/packages/frontend/src/world/room/objects/emptyBento.schema.ts b/packages/misskey-world/src/room/objects/emptyBento.schema.ts similarity index 100% rename from packages/frontend/src/world/room/objects/emptyBento.schema.ts rename to packages/misskey-world/src/room/objects/emptyBento.schema.ts diff --git a/packages/frontend/src/world/room/objects/energyDrink.schema.ts b/packages/misskey-world/src/room/objects/energyDrink.schema.ts similarity index 100% rename from packages/frontend/src/world/room/objects/energyDrink.schema.ts rename to packages/misskey-world/src/room/objects/energyDrink.schema.ts diff --git a/packages/frontend/src/world/room/objects/envelope.schema.ts b/packages/misskey-world/src/room/objects/envelope.schema.ts similarity index 100% rename from packages/frontend/src/world/room/objects/envelope.schema.ts rename to packages/misskey-world/src/room/objects/envelope.schema.ts diff --git a/packages/frontend/src/world/room/objects/facialTissue.schema.ts b/packages/misskey-world/src/room/objects/facialTissue.schema.ts similarity index 100% rename from packages/frontend/src/world/room/objects/facialTissue.schema.ts rename to packages/misskey-world/src/room/objects/facialTissue.schema.ts diff --git a/packages/frontend/src/world/room/objects/glassCylinderPotPlant.schema.ts b/packages/misskey-world/src/room/objects/glassCylinderPotPlant.schema.ts similarity index 100% rename from packages/frontend/src/world/room/objects/glassCylinderPotPlant.schema.ts rename to packages/misskey-world/src/room/objects/glassCylinderPotPlant.schema.ts diff --git a/packages/frontend/src/world/room/objects/handheldGameConsole.schema.ts b/packages/misskey-world/src/room/objects/handheldGameConsole.schema.ts similarity index 100% rename from packages/frontend/src/world/room/objects/handheldGameConsole.schema.ts rename to packages/misskey-world/src/room/objects/handheldGameConsole.schema.ts diff --git a/packages/frontend/src/world/room/objects/hangingDuctRail.schema.ts b/packages/misskey-world/src/room/objects/hangingDuctRail.schema.ts similarity index 100% rename from packages/frontend/src/world/room/objects/hangingDuctRail.schema.ts rename to packages/misskey-world/src/room/objects/hangingDuctRail.schema.ts diff --git a/packages/frontend/src/world/room/objects/hangingTShirt.schema.ts b/packages/misskey-world/src/room/objects/hangingTShirt.schema.ts similarity index 100% rename from packages/frontend/src/world/room/objects/hangingTShirt.schema.ts rename to packages/misskey-world/src/room/objects/hangingTShirt.schema.ts diff --git a/packages/frontend/src/world/room/objects/icosahedron.schema.ts b/packages/misskey-world/src/room/objects/icosahedron.schema.ts similarity index 100% rename from packages/frontend/src/world/room/objects/icosahedron.schema.ts rename to packages/misskey-world/src/room/objects/icosahedron.schema.ts diff --git a/packages/frontend/src/world/room/objects/ironFrameShelf.schema.ts b/packages/misskey-world/src/room/objects/ironFrameShelf.schema.ts similarity index 100% rename from packages/frontend/src/world/room/objects/ironFrameShelf.schema.ts rename to packages/misskey-world/src/room/objects/ironFrameShelf.schema.ts diff --git a/packages/frontend/src/world/room/objects/ironFrameTable.schema.ts b/packages/misskey-world/src/room/objects/ironFrameTable.schema.ts similarity index 100% rename from packages/frontend/src/world/room/objects/ironFrameTable.schema.ts rename to packages/misskey-world/src/room/objects/ironFrameTable.schema.ts diff --git a/packages/frontend/src/world/room/objects/issyoubin.schema.ts b/packages/misskey-world/src/room/objects/issyoubin.schema.ts similarity index 100% rename from packages/frontend/src/world/room/objects/issyoubin.schema.ts rename to packages/misskey-world/src/room/objects/issyoubin.schema.ts diff --git a/packages/frontend/src/world/room/objects/keyboard.schema.ts b/packages/misskey-world/src/room/objects/keyboard.schema.ts similarity index 100% rename from packages/frontend/src/world/room/objects/keyboard.schema.ts rename to packages/misskey-world/src/room/objects/keyboard.schema.ts diff --git a/packages/frontend/src/world/room/objects/laptopPc.schema.ts b/packages/misskey-world/src/room/objects/laptopPc.schema.ts similarity index 100% rename from packages/frontend/src/world/room/objects/laptopPc.schema.ts rename to packages/misskey-world/src/room/objects/laptopPc.schema.ts diff --git a/packages/frontend/src/world/room/objects/largeMousepad.schema.ts b/packages/misskey-world/src/room/objects/largeMousepad.schema.ts similarity index 100% rename from packages/frontend/src/world/room/objects/largeMousepad.schema.ts rename to packages/misskey-world/src/room/objects/largeMousepad.schema.ts diff --git a/packages/frontend/src/world/room/objects/lavaLamp.schema.ts b/packages/misskey-world/src/room/objects/lavaLamp.schema.ts similarity index 100% rename from packages/frontend/src/world/room/objects/lavaLamp.schema.ts rename to packages/misskey-world/src/room/objects/lavaLamp.schema.ts diff --git a/packages/frontend/src/world/room/objects/letterCase.schema.ts b/packages/misskey-world/src/room/objects/letterCase.schema.ts similarity index 100% rename from packages/frontend/src/world/room/objects/letterCase.schema.ts rename to packages/misskey-world/src/room/objects/letterCase.schema.ts diff --git a/packages/frontend/src/world/room/objects/lowPartitionBar.schema.ts b/packages/misskey-world/src/room/objects/lowPartitionBar.schema.ts similarity index 100% rename from packages/frontend/src/world/room/objects/lowPartitionBar.schema.ts rename to packages/misskey-world/src/room/objects/lowPartitionBar.schema.ts diff --git a/packages/frontend/src/world/room/objects/miObjet.schema.ts b/packages/misskey-world/src/room/objects/miObjet.schema.ts similarity index 100% rename from packages/frontend/src/world/room/objects/miObjet.schema.ts rename to packages/misskey-world/src/room/objects/miObjet.schema.ts diff --git a/packages/frontend/src/world/room/objects/miPlate.schema.ts b/packages/misskey-world/src/room/objects/miPlate.schema.ts similarity index 100% rename from packages/frontend/src/world/room/objects/miPlate.schema.ts rename to packages/misskey-world/src/room/objects/miPlate.schema.ts diff --git a/packages/frontend/src/world/room/objects/miPlateDisplayed.schema.ts b/packages/misskey-world/src/room/objects/miPlateDisplayed.schema.ts similarity index 100% rename from packages/frontend/src/world/room/objects/miPlateDisplayed.schema.ts rename to packages/misskey-world/src/room/objects/miPlateDisplayed.schema.ts diff --git a/packages/frontend/src/world/room/objects/milk.schema.ts b/packages/misskey-world/src/room/objects/milk.schema.ts similarity index 100% rename from packages/frontend/src/world/room/objects/milk.schema.ts rename to packages/misskey-world/src/room/objects/milk.schema.ts diff --git a/packages/frontend/src/world/room/objects/mixer.schema.ts b/packages/misskey-world/src/room/objects/mixer.schema.ts similarity index 100% rename from packages/frontend/src/world/room/objects/mixer.schema.ts rename to packages/misskey-world/src/room/objects/mixer.schema.ts diff --git a/packages/frontend/src/world/room/objects/monitor.schema.ts b/packages/misskey-world/src/room/objects/monitor.schema.ts similarity index 100% rename from packages/frontend/src/world/room/objects/monitor.schema.ts rename to packages/misskey-world/src/room/objects/monitor.schema.ts diff --git a/packages/frontend/src/world/room/objects/monitorSpeaker.schema.ts b/packages/misskey-world/src/room/objects/monitorSpeaker.schema.ts similarity index 100% rename from packages/frontend/src/world/room/objects/monitorSpeaker.schema.ts rename to packages/misskey-world/src/room/objects/monitorSpeaker.schema.ts diff --git a/packages/frontend/src/world/room/objects/monstera.schema.ts b/packages/misskey-world/src/room/objects/monstera.schema.ts similarity index 100% rename from packages/frontend/src/world/room/objects/monstera.schema.ts rename to packages/misskey-world/src/room/objects/monstera.schema.ts diff --git a/packages/frontend/src/world/room/objects/mug.schema.ts b/packages/misskey-world/src/room/objects/mug.schema.ts similarity index 100% rename from packages/frontend/src/world/room/objects/mug.schema.ts rename to packages/misskey-world/src/room/objects/mug.schema.ts diff --git a/packages/frontend/src/world/room/objects/newtonsCradle.schema.ts b/packages/misskey-world/src/room/objects/newtonsCradle.schema.ts similarity index 100% rename from packages/frontend/src/world/room/objects/newtonsCradle.schema.ts rename to packages/misskey-world/src/room/objects/newtonsCradle.schema.ts diff --git a/packages/frontend/src/world/room/objects/openedCardboardBox.schema.ts b/packages/misskey-world/src/room/objects/openedCardboardBox.schema.ts similarity index 100% rename from packages/frontend/src/world/room/objects/openedCardboardBox.schema.ts rename to packages/misskey-world/src/room/objects/openedCardboardBox.schema.ts diff --git a/packages/frontend/src/world/room/objects/pachira.schema.ts b/packages/misskey-world/src/room/objects/pachira.schema.ts similarity index 100% rename from packages/frontend/src/world/room/objects/pachira.schema.ts rename to packages/misskey-world/src/room/objects/pachira.schema.ts diff --git a/packages/frontend/src/world/room/objects/petBottle.schema.ts b/packages/misskey-world/src/room/objects/petBottle.schema.ts similarity index 100% rename from packages/frontend/src/world/room/objects/petBottle.schema.ts rename to packages/misskey-world/src/room/objects/petBottle.schema.ts diff --git a/packages/frontend/src/world/room/objects/piano.schema.ts b/packages/misskey-world/src/room/objects/piano.schema.ts similarity index 100% rename from packages/frontend/src/world/room/objects/piano.schema.ts rename to packages/misskey-world/src/room/objects/piano.schema.ts diff --git a/packages/frontend/src/world/room/objects/pictureFrame.schema.ts b/packages/misskey-world/src/room/objects/pictureFrame.schema.ts similarity index 100% rename from packages/frontend/src/world/room/objects/pictureFrame.schema.ts rename to packages/misskey-world/src/room/objects/pictureFrame.schema.ts diff --git a/packages/frontend/src/world/room/objects/pizza.schema.ts b/packages/misskey-world/src/room/objects/pizza.schema.ts similarity index 100% rename from packages/frontend/src/world/room/objects/pizza.schema.ts rename to packages/misskey-world/src/room/objects/pizza.schema.ts diff --git a/packages/frontend/src/world/room/objects/plant.schema.ts b/packages/misskey-world/src/room/objects/plant.schema.ts similarity index 100% rename from packages/frontend/src/world/room/objects/plant.schema.ts rename to packages/misskey-world/src/room/objects/plant.schema.ts diff --git a/packages/frontend/src/world/room/objects/plant2.schema.ts b/packages/misskey-world/src/room/objects/plant2.schema.ts similarity index 100% rename from packages/frontend/src/world/room/objects/plant2.schema.ts rename to packages/misskey-world/src/room/objects/plant2.schema.ts diff --git a/packages/frontend/src/world/room/objects/poster.schema.ts b/packages/misskey-world/src/room/objects/poster.schema.ts similarity index 100% rename from packages/frontend/src/world/room/objects/poster.schema.ts rename to packages/misskey-world/src/room/objects/poster.schema.ts diff --git a/packages/frontend/src/world/room/objects/powerStrip.schema.ts b/packages/misskey-world/src/room/objects/powerStrip.schema.ts similarity index 100% rename from packages/frontend/src/world/room/objects/powerStrip.schema.ts rename to packages/misskey-world/src/room/objects/powerStrip.schema.ts diff --git a/packages/frontend/src/world/room/objects/radiometer.schema.ts b/packages/misskey-world/src/room/objects/radiometer.schema.ts similarity index 100% rename from packages/frontend/src/world/room/objects/radiometer.schema.ts rename to packages/misskey-world/src/room/objects/radiometer.schema.ts diff --git a/packages/frontend/src/world/room/objects/randomBooks.schema.ts b/packages/misskey-world/src/room/objects/randomBooks.schema.ts similarity index 100% rename from packages/frontend/src/world/room/objects/randomBooks.schema.ts rename to packages/misskey-world/src/room/objects/randomBooks.schema.ts diff --git a/packages/frontend/src/world/room/objects/recordPlayer.schema.ts b/packages/misskey-world/src/room/objects/recordPlayer.schema.ts similarity index 100% rename from packages/frontend/src/world/room/objects/recordPlayer.schema.ts rename to packages/misskey-world/src/room/objects/recordPlayer.schema.ts diff --git a/packages/frontend/src/world/room/objects/rolledUpPoster.schema.ts b/packages/misskey-world/src/room/objects/rolledUpPoster.schema.ts similarity index 100% rename from packages/frontend/src/world/room/objects/rolledUpPoster.schema.ts rename to packages/misskey-world/src/room/objects/rolledUpPoster.schema.ts diff --git a/packages/frontend/src/world/room/objects/roundRug.schema.ts b/packages/misskey-world/src/room/objects/roundRug.schema.ts similarity index 100% rename from packages/frontend/src/world/room/objects/roundRug.schema.ts rename to packages/misskey-world/src/room/objects/roundRug.schema.ts diff --git a/packages/frontend/src/world/room/objects/router.schema.ts b/packages/misskey-world/src/room/objects/router.schema.ts similarity index 100% rename from packages/frontend/src/world/room/objects/router.schema.ts rename to packages/misskey-world/src/room/objects/router.schema.ts diff --git a/packages/frontend/src/world/room/objects/siphon.schema.ts b/packages/misskey-world/src/room/objects/siphon.schema.ts similarity index 100% rename from packages/frontend/src/world/room/objects/siphon.schema.ts rename to packages/misskey-world/src/room/objects/siphon.schema.ts diff --git a/packages/frontend/src/world/room/objects/snakeplant.schema.ts b/packages/misskey-world/src/room/objects/snakeplant.schema.ts similarity index 100% rename from packages/frontend/src/world/room/objects/snakeplant.schema.ts rename to packages/misskey-world/src/room/objects/snakeplant.schema.ts diff --git a/packages/frontend/src/world/room/objects/sofa.schema.ts b/packages/misskey-world/src/room/objects/sofa.schema.ts similarity index 100% rename from packages/frontend/src/world/room/objects/sofa.schema.ts rename to packages/misskey-world/src/room/objects/sofa.schema.ts diff --git a/packages/frontend/src/world/room/objects/speaker.schema.ts b/packages/misskey-world/src/room/objects/speaker.schema.ts similarity index 100% rename from packages/frontend/src/world/room/objects/speaker.schema.ts rename to packages/misskey-world/src/room/objects/speaker.schema.ts diff --git a/packages/frontend/src/world/room/objects/speakerStand.schema.ts b/packages/misskey-world/src/room/objects/speakerStand.schema.ts similarity index 100% rename from packages/frontend/src/world/room/objects/speakerStand.schema.ts rename to packages/misskey-world/src/room/objects/speakerStand.schema.ts diff --git a/packages/frontend/src/world/room/objects/spotLight.schema.ts b/packages/misskey-world/src/room/objects/spotLight.schema.ts similarity index 100% rename from packages/frontend/src/world/room/objects/spotLight.schema.ts rename to packages/misskey-world/src/room/objects/spotLight.schema.ts diff --git a/packages/frontend/src/world/room/objects/sprayer.schema.ts b/packages/misskey-world/src/room/objects/sprayer.schema.ts similarity index 100% rename from packages/frontend/src/world/room/objects/sprayer.schema.ts rename to packages/misskey-world/src/room/objects/sprayer.schema.ts diff --git a/packages/frontend/src/world/room/objects/stanchionPole.schema.ts b/packages/misskey-world/src/room/objects/stanchionPole.schema.ts similarity index 100% rename from packages/frontend/src/world/room/objects/stanchionPole.schema.ts rename to packages/misskey-world/src/room/objects/stanchionPole.schema.ts diff --git a/packages/frontend/src/world/room/objects/steelRack.schema.ts b/packages/misskey-world/src/room/objects/steelRack.schema.ts similarity index 100% rename from packages/frontend/src/world/room/objects/steelRack.schema.ts rename to packages/misskey-world/src/room/objects/steelRack.schema.ts diff --git a/packages/frontend/src/world/room/objects/stormGlass.schema.ts b/packages/misskey-world/src/room/objects/stormGlass.schema.ts similarity index 100% rename from packages/frontend/src/world/room/objects/stormGlass.schema.ts rename to packages/misskey-world/src/room/objects/stormGlass.schema.ts diff --git a/packages/frontend/src/world/room/objects/tableSalt.schema.ts b/packages/misskey-world/src/room/objects/tableSalt.schema.ts similarity index 100% rename from packages/frontend/src/world/room/objects/tableSalt.schema.ts rename to packages/misskey-world/src/room/objects/tableSalt.schema.ts diff --git a/packages/frontend/src/world/room/objects/tabletopCalendar.schema.ts b/packages/misskey-world/src/room/objects/tabletopCalendar.schema.ts similarity index 100% rename from packages/frontend/src/world/room/objects/tabletopCalendar.schema.ts rename to packages/misskey-world/src/room/objects/tabletopCalendar.schema.ts diff --git a/packages/frontend/src/world/room/objects/tabletopDigitalClock.schema.ts b/packages/misskey-world/src/room/objects/tabletopDigitalClock.schema.ts similarity index 100% rename from packages/frontend/src/world/room/objects/tabletopDigitalClock.schema.ts rename to packages/misskey-world/src/room/objects/tabletopDigitalClock.schema.ts diff --git a/packages/frontend/src/world/room/objects/tabletopFlag.schema.ts b/packages/misskey-world/src/room/objects/tabletopFlag.schema.ts similarity index 100% rename from packages/frontend/src/world/room/objects/tabletopFlag.schema.ts rename to packages/misskey-world/src/room/objects/tabletopFlag.schema.ts diff --git a/packages/frontend/src/world/room/objects/tabletopGlassPictureFrame.schema.ts b/packages/misskey-world/src/room/objects/tabletopGlassPictureFrame.schema.ts similarity index 100% rename from packages/frontend/src/world/room/objects/tabletopGlassPictureFrame.schema.ts rename to packages/misskey-world/src/room/objects/tabletopGlassPictureFrame.schema.ts diff --git a/packages/frontend/src/world/room/objects/tabletopIronFrameStand.schema.ts b/packages/misskey-world/src/room/objects/tabletopIronFrameStand.schema.ts similarity index 100% rename from packages/frontend/src/world/room/objects/tabletopIronFrameStand.schema.ts rename to packages/misskey-world/src/room/objects/tabletopIronFrameStand.schema.ts diff --git a/packages/frontend/src/world/room/objects/tabletopLcdButtonsController.schema.ts b/packages/misskey-world/src/room/objects/tabletopLcdButtonsController.schema.ts similarity index 100% rename from packages/frontend/src/world/room/objects/tabletopLcdButtonsController.schema.ts rename to packages/misskey-world/src/room/objects/tabletopLcdButtonsController.schema.ts diff --git a/packages/frontend/src/world/room/objects/tabletopPictureFrame.schema.ts b/packages/misskey-world/src/room/objects/tabletopPictureFrame.schema.ts similarity index 100% rename from packages/frontend/src/world/room/objects/tabletopPictureFrame.schema.ts rename to packages/misskey-world/src/room/objects/tabletopPictureFrame.schema.ts diff --git a/packages/frontend/src/world/room/objects/tapestry.schema.ts b/packages/misskey-world/src/room/objects/tapestry.schema.ts similarity index 100% rename from packages/frontend/src/world/room/objects/tapestry.schema.ts rename to packages/misskey-world/src/room/objects/tapestry.schema.ts diff --git a/packages/frontend/src/world/room/objects/tetrapod.schema.ts b/packages/misskey-world/src/room/objects/tetrapod.schema.ts similarity index 100% rename from packages/frontend/src/world/room/objects/tetrapod.schema.ts rename to packages/misskey-world/src/room/objects/tetrapod.schema.ts diff --git a/packages/frontend/src/world/room/objects/tv.schema.ts b/packages/misskey-world/src/room/objects/tv.schema.ts similarity index 100% rename from packages/frontend/src/world/room/objects/tv.schema.ts rename to packages/misskey-world/src/room/objects/tv.schema.ts diff --git a/packages/frontend/src/world/room/objects/twistedCubeObjet.schema.ts b/packages/misskey-world/src/room/objects/twistedCubeObjet.schema.ts similarity index 100% rename from packages/frontend/src/world/room/objects/twistedCubeObjet.schema.ts rename to packages/misskey-world/src/room/objects/twistedCubeObjet.schema.ts diff --git a/packages/frontend/src/world/room/objects/usedTissue.schema.ts b/packages/misskey-world/src/room/objects/usedTissue.schema.ts similarity index 100% rename from packages/frontend/src/world/room/objects/usedTissue.schema.ts rename to packages/misskey-world/src/room/objects/usedTissue.schema.ts diff --git a/packages/frontend/src/world/room/objects/wallCanvas.schema.ts b/packages/misskey-world/src/room/objects/wallCanvas.schema.ts similarity index 100% rename from packages/frontend/src/world/room/objects/wallCanvas.schema.ts rename to packages/misskey-world/src/room/objects/wallCanvas.schema.ts diff --git a/packages/frontend/src/world/room/objects/wallClock.schema.ts b/packages/misskey-world/src/room/objects/wallClock.schema.ts similarity index 100% rename from packages/frontend/src/world/room/objects/wallClock.schema.ts rename to packages/misskey-world/src/room/objects/wallClock.schema.ts diff --git a/packages/frontend/src/world/room/objects/wallGlassPictureFrame.schema.ts b/packages/misskey-world/src/room/objects/wallGlassPictureFrame.schema.ts similarity index 100% rename from packages/frontend/src/world/room/objects/wallGlassPictureFrame.schema.ts rename to packages/misskey-world/src/room/objects/wallGlassPictureFrame.schema.ts diff --git a/packages/frontend/src/world/room/objects/wallMirror.schema.ts b/packages/misskey-world/src/room/objects/wallMirror.schema.ts similarity index 100% rename from packages/frontend/src/world/room/objects/wallMirror.schema.ts rename to packages/misskey-world/src/room/objects/wallMirror.schema.ts diff --git a/packages/frontend/src/world/room/objects/wallMountSpotLight.schema.ts b/packages/misskey-world/src/room/objects/wallMountSpotLight.schema.ts similarity index 100% rename from packages/frontend/src/world/room/objects/wallMountSpotLight.schema.ts rename to packages/misskey-world/src/room/objects/wallMountSpotLight.schema.ts diff --git a/packages/frontend/src/world/room/objects/wallShelf.schema.ts b/packages/misskey-world/src/room/objects/wallShelf.schema.ts similarity index 100% rename from packages/frontend/src/world/room/objects/wallShelf.schema.ts rename to packages/misskey-world/src/room/objects/wallShelf.schema.ts diff --git a/packages/frontend/src/world/room/objects/wireBasket.schema.ts b/packages/misskey-world/src/room/objects/wireBasket.schema.ts similarity index 100% rename from packages/frontend/src/world/room/objects/wireBasket.schema.ts rename to packages/misskey-world/src/room/objects/wireBasket.schema.ts diff --git a/packages/frontend/src/world/room/objects/wireNet.schema.ts b/packages/misskey-world/src/room/objects/wireNet.schema.ts similarity index 100% rename from packages/frontend/src/world/room/objects/wireNet.schema.ts rename to packages/misskey-world/src/room/objects/wireNet.schema.ts diff --git a/packages/frontend/src/world/room/objects/woodRingFloorLamp.schema.ts b/packages/misskey-world/src/room/objects/woodRingFloorLamp.schema.ts similarity index 100% rename from packages/frontend/src/world/room/objects/woodRingFloorLamp.schema.ts rename to packages/misskey-world/src/room/objects/woodRingFloorLamp.schema.ts diff --git a/packages/frontend/src/world/room/objects/woodRingsPendantLight.schema.ts b/packages/misskey-world/src/room/objects/woodRingsPendantLight.schema.ts similarity index 100% rename from packages/frontend/src/world/room/objects/woodRingsPendantLight.schema.ts rename to packages/misskey-world/src/room/objects/woodRingsPendantLight.schema.ts diff --git a/packages/frontend/src/world/room/objects/woodSoundAbsorbingPanel.schema.ts b/packages/misskey-world/src/room/objects/woodSoundAbsorbingPanel.schema.ts similarity index 100% rename from packages/frontend/src/world/room/objects/woodSoundAbsorbingPanel.schema.ts rename to packages/misskey-world/src/room/objects/woodSoundAbsorbingPanel.schema.ts diff --git a/packages/misskey-world/tsconfig.json b/packages/misskey-world/tsconfig.json new file mode 100644 index 0000000000..0bb0c13c3a --- /dev/null +++ b/packages/misskey-world/tsconfig.json @@ -0,0 +1,34 @@ +{ + "$schema": "https://json.schemastore.org/tsconfig", + "compilerOptions": { + "target": "ES2022", + "module": "nodenext", + "moduleResolution": "nodenext", + "declaration": true, + "declarationMap": true, + "sourceMap": false, + "outDir": "./built", + "removeComments": true, + "strict": true, + "strictFunctionTypes": true, + "strictNullChecks": true, + "experimentalDecorators": true, + "noImplicitReturns": true, + "esModuleInterop": true, + "rootDir": "./src", + "typeRoots": [ + "./node_modules/@types" + ], + "lib": [ + "esnext", + "dom" + ] + }, + "include": [ + "src/**/*" + ], + "exclude": [ + "node_modules", + "test/**/*" + ] +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index df92163f34..edd84db4ce 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -608,18 +608,6 @@ importers: '@analytics/google-analytics': specifier: 1.1.0 version: 1.1.0 - '@babylonjs/core': - specifier: 9.9.0 - version: 9.9.0 - '@babylonjs/inspector': - specifier: 9.9.0 - version: 9.9.0(37580b7f869e99cbbbef9da0435d2619) - '@babylonjs/loaders': - specifier: 9.9.0 - version: 9.9.0(@babylonjs/core@9.9.0)(babylonjs-gltf2interface@9.6.0) - '@babylonjs/materials': - specifier: 9.9.0 - version: 9.9.0(@babylonjs/core@9.9.0) '@mcaptcha/core-glue': specifier: 0.1.0-alpha-5 version: 0.1.0-alpha-5 @@ -695,6 +683,9 @@ importers: exifreader: specifier: 4.38.1 version: 4.38.1 + frontend-misskey-world-engine: + specifier: workspace:* + version: link:../frontend-misskey-world-engine frontend-shared: specifier: workspace:* version: link:../frontend-shared @@ -740,6 +731,9 @@ importers: misskey-reversi: specifier: workspace:* version: link:../misskey-reversi + misskey-world: + specifier: workspace:* + version: link:../misskey-world photoswipe: specifier: 5.4.4 version: 5.4.4 @@ -1176,6 +1170,46 @@ importers: specifier: 3.2.8 version: 3.2.8(typescript@5.9.3) + packages/frontend-misskey-world-engine: + dependencies: + '@babylonjs/core': + specifier: 9.9.0 + version: 9.9.0 + '@babylonjs/inspector': + specifier: 9.9.0 + version: 9.9.0(37580b7f869e99cbbbef9da0435d2619) + '@babylonjs/loaders': + specifier: 9.9.0 + version: 9.9.0(@babylonjs/core@9.9.0)(babylonjs-gltf2interface@9.6.0) + '@babylonjs/materials': + specifier: 9.9.0 + version: 9.9.0(@babylonjs/core@9.9.0) + eventemitter3: + specifier: 5.0.4 + version: 5.0.4 + seedrandom: + specifier: 3.0.5 + version: 3.0.5 + devDependencies: + '@types/seedrandom': + specifier: 3.0.8 + version: 3.0.8 + '@typescript-eslint/eslint-plugin': + specifier: 8.59.2 + version: 8.59.2(@typescript-eslint/parser@8.59.2(eslint@9.39.4)(typescript@5.9.3))(eslint@9.39.4)(typescript@5.9.3) + '@typescript-eslint/parser': + specifier: 8.59.2 + version: 8.59.2(eslint@9.39.4)(typescript@5.9.3) + esbuild: + specifier: 0.28.0 + version: 0.28.0 + execa: + specifier: 9.6.1 + version: 9.6.1 + nodemon: + specifier: 3.1.14 + version: 3.1.14 + packages/frontend-shared: dependencies: '@misskey-dev/emoji-data': @@ -1422,6 +1456,37 @@ importers: specifier: 3.1.14 version: 3.1.14 + packages/misskey-world: + dependencies: + eventemitter3: + specifier: 5.0.4 + version: 5.0.4 + seedrandom: + specifier: 3.0.5 + version: 3.0.5 + devDependencies: + '@types/node': + specifier: 24.12.2 + version: 24.12.2 + '@types/seedrandom': + specifier: 3.0.8 + version: 3.0.8 + '@typescript-eslint/eslint-plugin': + specifier: 8.59.2 + version: 8.59.2(@typescript-eslint/parser@8.59.2(eslint@9.39.4)(typescript@5.9.3))(eslint@9.39.4)(typescript@5.9.3) + '@typescript-eslint/parser': + specifier: 8.59.2 + version: 8.59.2(eslint@9.39.4)(typescript@5.9.3) + esbuild: + specifier: 0.28.0 + version: 0.28.0 + execa: + specifier: 9.6.1 + version: 9.6.1 + nodemon: + specifier: 3.1.14 + version: 3.1.14 + packages/sw: dependencies: esbuild: @@ -10870,8 +10935,8 @@ packages: vue-component-type-helpers@3.2.8: resolution: {integrity: sha512-9689efAXhN/EV86plgkL/XFiJSXhGtWPG6JDboZ+QnjlUWUUQrQ0ILKQtw4iQsuwIwu5k6Aw+JnehDe7161e7A==} - vue-component-type-helpers@3.2.9: - resolution: {integrity: sha512-S3BiWYaLSzHxTpln665ELSrMR9UYmrIDUmhik7nVZxmJjTKL2/a+ew1hvGxksKelivm0ujjWfG1fYOiU/2e8rA==} + vue-component-type-helpers@3.3.0: + resolution: {integrity: sha512-vwR8DDsBysI9NWXa0okPFpCcW+BUC3sPTuLBNo1faMzw4QWMFd+3/lFYFu29ZN0q+8UReXWJHEYesC9dcXYCLg==} vue-demi@0.14.10: resolution: {integrity: sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==} @@ -15450,7 +15515,7 @@ snapshots: storybook: 10.3.6(@testing-library/dom@10.4.0)(bufferutil@4.1.0)(prettier@3.8.3)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(utf-8-validate@6.0.6) type-fest: 2.19.0 vue: 3.5.34(typescript@5.9.3) - vue-component-type-helpers: 3.2.9 + vue-component-type-helpers: 3.3.0 '@stylistic/eslint-plugin@5.10.0(eslint@9.39.4)': dependencies: @@ -22297,7 +22362,7 @@ snapshots: vue-component-type-helpers@3.2.8: {} - vue-component-type-helpers@3.2.9: {} + vue-component-type-helpers@3.3.0: {} vue-demi@0.14.10(vue@3.5.34(typescript@5.9.3)): dependencies: diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 26235cc723..19204ff60d 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -11,6 +11,8 @@ packages: - packages/misskey-js/generator - packages/misskey-reversi - packages/misskey-bubble-game + - packages/misskey-world + - packages/frontend-misskey-world-engine allowBuilds: '@nestjs/core': true '@parcel/watcher': true diff --git a/renovate.json5 b/renovate.json5 index e5ee568d8e..43de730bec 100644 --- a/renovate.json5 +++ b/renovate.json5 @@ -47,6 +47,8 @@ 'packages/misskey-reversi/**/package.json', 'packages/sw/**/package.json', 'packages/icons-subsetter/**/package.json', + 'packages/misskey-world/**/package.json', + 'packages/frontend-misskey-world-engine/**/package.json', ], // prevent wastage of Chromatic snapshots rebaseWhen: 'never', diff --git a/scripts/clean-all.mjs b/scripts/clean-all.mjs index f232be77fd..41b4af2fbc 100644 --- a/scripts/clean-all.mjs +++ b/scripts/clean-all.mjs @@ -38,6 +38,12 @@ const __dirname = import.meta.dirname; fs.rmSync(__dirname + '/../packages/misskey-bubble-game/built', { recursive: true, force: true }); fs.rmSync(__dirname + '/../packages/misskey-bubble-game/node_modules', { recursive: true, force: true }); + fs.rmSync(__dirname + '/../packages/misskey-world/built', { recursive: true, force: true }); + fs.rmSync(__dirname + '/../packages/misskey-world/node_modules', { recursive: true, force: true }); + + fs.rmSync(__dirname + '/../packages/frontend-misskey-world-engine/built', { recursive: true, force: true }); + fs.rmSync(__dirname + '/../packages/frontend-misskey-world-engine/node_modules', { recursive: true, force: true }); + fs.rmSync(__dirname + '/../built', { recursive: true, force: true }); fs.rmSync(__dirname + '/../node_modules', { recursive: true, force: true }); diff --git a/scripts/clean.mjs b/scripts/clean.mjs index a1f444ad4b..10bd709d89 100644 --- a/scripts/clean.mjs +++ b/scripts/clean.mjs @@ -18,5 +18,7 @@ const __dirname = import.meta.dirname; fs.rmSync(__dirname + '/../packages/misskey-js/built', { recursive: true, force: true }); fs.rmSync(__dirname + '/../packages/misskey-reversi/built', { recursive: true, force: true }); fs.rmSync(__dirname + '/../packages/misskey-bubble-game/built', { recursive: true, force: true }); + fs.rmSync(__dirname + '/../packages/misskey-world/built', { recursive: true, force: true }); + fs.rmSync(__dirname + '/../packages/frontend-misskey-world-engine/built', { recursive: true, force: true }); fs.rmSync(__dirname + '/../built', { recursive: true, force: true }); })(); diff --git a/scripts/dev.mjs b/scripts/dev.mjs index 54fba71f0f..dd08e95660 100644 --- a/scripts/dev.mjs +++ b/scripts/dev.mjs @@ -111,3 +111,15 @@ execa('pnpm', ['--filter', 'misskey-bubble-game', 'watch', '--no-clean'], { stdout: process.stdout, stderr: process.stderr, }); + +execa('pnpm', ['--filter', 'misskey-world', 'watch', '--no-clean'], { + cwd: _dirname + '/../', + stdout: process.stdout, + stderr: process.stderr, +}); + +execa('pnpm', ['--filter', 'frontend-misskey-world-engine', 'watch', '--no-clean'], { + cwd: _dirname + '/../', + stdout: process.stdout, + stderr: process.stderr, +});