mirror of
https://github.com/misskey-dev/misskey.git
synced 2026-08-03 05:46:06 +00:00
49 lines
1.6 KiB
TypeScript
49 lines
1.6 KiB
TypeScript
/*
|
|
* SPDX-FileCopyrightText: syuilo and misskey-project
|
|
* SPDX-License-Identifier: AGPL-3.0-only
|
|
*/
|
|
|
|
import { EngineControllerBase } from './EngineControllerBase.js';
|
|
import type { PlayerProfile } from 'misskey-world-engine/src/PlayerContainer.js';
|
|
import type { AvatarPreviewEngine } from 'misskey-world-engine/src/avatarPreviewEngine.js';
|
|
import type { WorldAvatar } from 'misskey-world/src/types.js';
|
|
|
|
export type AvatarPreviewEngineControllerOptions = {
|
|
workerMode?: boolean;
|
|
graphicsQuality: number;
|
|
fps: number | null;
|
|
resolution: number;
|
|
};
|
|
|
|
// 抽象化レイヤー
|
|
export class AvatarPreviewEngineController extends EngineControllerBase<AvatarPreviewEngine> {
|
|
constructor(options: AvatarPreviewEngineControllerOptions) {
|
|
super({
|
|
...options,
|
|
antialias: true,
|
|
});
|
|
}
|
|
|
|
public async init(canvas: HTMLCanvasElement, profile: PlayerProfile) {
|
|
await this._init_(canvas, {
|
|
createWorker: (offscreen) => new Promise((resolve) => {
|
|
import('misskey-world-engine/src/avatarPreviewEngineWorker?worker').then(({ default: PreviewEngineWorker }) => {
|
|
const worker = new PreviewEngineWorker();
|
|
worker.postMessage({ type: 'init', canvas: offscreen, options: this.options, profile }, [offscreen]);
|
|
resolve(worker);
|
|
});
|
|
}),
|
|
createEngine: () => new Promise((resolve) => {
|
|
import('misskey-world-engine/src/avatarPreviewEngineNonWorker.js').then(({ createAvatarPreviewEngine }) => {
|
|
const engine = createAvatarPreviewEngine({ canvas, options: this.options, profile });
|
|
resolve(engine);
|
|
});
|
|
}),
|
|
});
|
|
}
|
|
|
|
public updateAvatar(avatar: WorldAvatar) {
|
|
this.call('updateAvatar', [avatar]);
|
|
}
|
|
}
|