From fe67939a058b2d162c45547d232adf09f133aa58 Mon Sep 17 00:00:00 2001 From: unanmed <1319491857@qq.com> Date: Mon, 30 Mar 2026 19:07:13 +0800 Subject: [PATCH] =?UTF-8?q?refactor:=20=E5=8A=A0=E8=BD=BD=E7=B3=BB?= =?UTF-8?q?=E7=BB=9F=E6=A0=B8=E5=BF=83=E7=A7=BB=E5=8A=A8=E8=87=B3=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E7=AB=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages-user/client-base/package.json | 3 +- packages-user/client-base/src/ins.ts | 5 +- packages-user/client-base/src/load/index.ts | 2 +- packages-user/client-base/src/load/loader.ts | 49 ++++----------- packages-user/client-base/src/load/types.ts | 4 +- packages-user/data-base/package.json | 5 +- packages-user/data-base/src/index.ts | 3 + packages-user/data-base/src/ins.ts | 11 ++++ packages-user/data-base/src/load/index.ts | 3 + packages-user/data-base/src/load/loader.ts | 63 +++++++++++++++++++ .../src/load/processor.ts | 0 packages-user/data-base/src/load/types.ts | 38 +++++++++++ 12 files changed, 139 insertions(+), 47 deletions(-) create mode 100644 packages-user/data-base/src/ins.ts create mode 100644 packages-user/data-base/src/load/index.ts create mode 100644 packages-user/data-base/src/load/loader.ts rename packages-user/{client-base => data-base}/src/load/processor.ts (100%) create mode 100644 packages-user/data-base/src/load/types.ts diff --git a/packages-user/client-base/package.json b/packages-user/client-base/package.json index 8c38f2b..c0e203d 100644 --- a/packages-user/client-base/package.json +++ b/packages-user/client-base/package.json @@ -3,6 +3,7 @@ "dependencies": { "@motajs/audio": "workspace:*", "@motajs/render": "workspace:*", - "@motajs/client-base": "workspace:*" + "@motajs/client-base": "workspace:*", + "@user/data-base": "workspace:*" } } diff --git a/packages-user/client-base/src/ins.ts b/packages-user/client-base/src/ins.ts index 40f84d5..be5714d 100644 --- a/packages-user/client-base/src/ins.ts +++ b/packages-user/client-base/src/ins.ts @@ -8,7 +8,7 @@ import { } from '@motajs/audio'; import { MotaAssetsLoader } from './load/loader'; import { AutotileProcessor, MaterialManager } from './material'; -import { loadProgress } from '@user/data-base'; +import { dataLoader, loadProgress } from '@user/data-base'; //#region 音频实例 @@ -35,9 +35,10 @@ export const autotile = new AutotileProcessor(materials); //#region 加载实例 -/** 全局加载实例 */ +/** 客户端加载实例 */ export const loader = new MotaAssetsLoader( loadProgress, + dataLoader, audioContext, soundPlayer, materials diff --git a/packages-user/client-base/src/load/index.ts b/packages-user/client-base/src/load/index.ts index d7e04ee..3f3b9e6 100644 --- a/packages-user/client-base/src/load/index.ts +++ b/packages-user/client-base/src/load/index.ts @@ -1 +1 @@ -export * from './processor'; +export * from './loader'; diff --git a/packages-user/client-base/src/load/loader.ts b/packages-user/client-base/src/load/loader.ts index 8514063..28d95f2 100644 --- a/packages-user/client-base/src/load/loader.ts +++ b/packages-user/client-base/src/load/loader.ts @@ -17,26 +17,15 @@ import { LoadAudioProcessor, LoadFontProcessor, LoadImageProcessor, - LoadJSONProcessor, LoadTextProcessor, LoadZipProcessor -} from './processor'; +} from '@user/data-base'; import { IMotaAudioContext, ISoundPlayer } from '@motajs/audio'; import { loading } from '@user/data-base'; import { IMaterialManager } from '../material'; import { ITextureSplitter, Texture, TextureRowSplitter } from '@motajs/render'; import { iconNames } from './data'; - -interface LoadTaskStore { - /** 加载任务对象 */ - readonly task: ILoadTask; - /** 当 `onLoaded` 兑现后兑现的 `Promise` */ - readonly loadPromise: Promise; - /** 兑现 `loadPromise` */ - readonly loadResolve: (data: R) => void; - /** 当加载任务完成时执行的函数 */ - readonly onLoaded: CustomLoadFunc; -} +import { IMotaDataLoader } from '@user/data-base'; export class MotaAssetsLoader implements IMotaAssetsLoader { /** 当前是否正在进行加载 */ @@ -54,12 +43,8 @@ export class MotaAssetsLoader implements IMotaAssetsLoader { FontFace >; readonly textProcessor: ILoadTaskProcessor; - readonly jsonProcessor: ILoadTaskProcessor; readonly zipProcessor: ILoadTaskProcessor; - /** 当前已添加的加载任务 */ - private readonly tasks: Set = new Set(); - /** 素材索引 */ private materialsCounter: number = 0; /** 贴图行分割器,用于处理遗留 `icons.png` */ @@ -67,6 +52,7 @@ export class MotaAssetsLoader implements IMotaAssetsLoader { constructor( readonly progress: ILoadProgressTotal, + private readonly dataLoader: IMotaDataLoader, private readonly ac: IMotaAudioContext, private readonly sounds: ISoundPlayer, private readonly materials: IMaterialManager @@ -75,7 +61,6 @@ export class MotaAssetsLoader implements IMotaAssetsLoader { this.audioProcessor = new LoadAudioProcessor(ac); this.fontProcessor = new LoadFontProcessor(); this.textProcessor = new LoadTextProcessor(); - this.jsonProcessor = new LoadJSONProcessor(); this.zipProcessor = new LoadZipProcessor(); this.rowSplitter = new TextureRowSplitter(); } @@ -469,7 +454,7 @@ export class MotaAssetsLoader implements IMotaAssetsLoader { url: `loadList.json`, dataType: LoadDataType.JSON, identifier: '@system-loadList', - processor: this.jsonProcessor, + processor: this.dataLoader.jsonProcessor, progress: { onProgress() {} } }); @@ -505,27 +490,15 @@ export class MotaAssetsLoader implements IMotaAssetsLoader { task: ILoadTask, onLoaded: CustomLoadFunc ): Promise { - this.progress.addTask(task); - const { promise, resolve } = Promise.withResolvers(); - const store: LoadTaskStore = { - task, - onLoaded, - loadPromise: promise, - loadResolve: resolve - }; - this.tasks.add(store); - return promise; + return this.dataLoader.addCustomLoadTask(task, onLoaded); } - load(): Promise { - const tasks = [...this.tasks].map(async task => { - task.task.start(); - const data = await task.task.loaded(); - await task.onLoaded(data); - task.loadResolve(data); - return data; - }); - return Promise.all(tasks); + async load(): Promise { + this.loading = true; + this.loaded = false; + await this.dataLoader.load(); + this.loading = false; + this.loaded = true; } //#endregion diff --git a/packages-user/client-base/src/load/types.ts b/packages-user/client-base/src/load/types.ts index 022a1a4..516c8e1 100644 --- a/packages-user/client-base/src/load/types.ts +++ b/packages-user/client-base/src/load/types.ts @@ -57,8 +57,6 @@ export interface IMotaAssetsLoader { >; /** 文字处理器 */ readonly textProcessor: ILoadTaskProcessor; - /** JSON 处理器 */ - readonly jsonProcessor: ILoadTaskProcessor; /** `zip` 压缩包处理器 */ readonly zipProcessor: ILoadTaskProcessor; @@ -82,5 +80,5 @@ export interface IMotaAssetsLoader { * 开始所有加载任务的加载工作 * @returns 一个 `Promise`,当所有加载任务加载完成后兑现 */ - load(): Promise; + load(): Promise; } diff --git a/packages-user/data-base/package.json b/packages-user/data-base/package.json index d09edf8..0ed09ab 100644 --- a/packages-user/data-base/package.json +++ b/packages-user/data-base/package.json @@ -1,6 +1,7 @@ { "name": "@user/data-base", "dependencies": { - "@motajs/types": "workspace:*" + "@motajs/types": "workspace:*", + "@motajs/loader": "workspace:*" } -} \ No newline at end of file +} diff --git a/packages-user/data-base/src/index.ts b/packages-user/data-base/src/index.ts index 4fb36a8..3db41fc 100644 --- a/packages-user/data-base/src/index.ts +++ b/packages-user/data-base/src/index.ts @@ -1 +1,4 @@ +export * from './load'; + export * from './game'; +export * from './ins'; diff --git a/packages-user/data-base/src/ins.ts b/packages-user/data-base/src/ins.ts new file mode 100644 index 0000000..b388bc2 --- /dev/null +++ b/packages-user/data-base/src/ins.ts @@ -0,0 +1,11 @@ +import { LoadProgressTotal } from '@motajs/loader'; +import { MotaDataLoader } from './load'; + +//#region 加载实例 + +/** 加载进度 */ +export const loadProgress = new LoadProgressTotal(); +/** 数据端加载对象 */ +export const dataLoader = new MotaDataLoader(loadProgress); + +//#endregion diff --git a/packages-user/data-base/src/load/index.ts b/packages-user/data-base/src/load/index.ts new file mode 100644 index 0000000..00b1550 --- /dev/null +++ b/packages-user/data-base/src/load/index.ts @@ -0,0 +1,3 @@ +export * from './loader'; +export * from './processor'; +export * from './types'; diff --git a/packages-user/data-base/src/load/loader.ts b/packages-user/data-base/src/load/loader.ts new file mode 100644 index 0000000..25b300f --- /dev/null +++ b/packages-user/data-base/src/load/loader.ts @@ -0,0 +1,63 @@ +import { + ILoadProgressTotal, + LoadDataType, + ILoadTask, + ILoadTaskProcessor +} from '@motajs/loader'; +import { CustomLoadFunc, IMotaDataLoader } from './types'; +import { LoadJSONProcessor } from './processor'; + +interface LoadTaskStore { + /** 加载任务对象 */ + readonly task: ILoadTask; + /** 当 `onLoaded` 兑现后兑现的 `Promise` */ + readonly loadPromise: Promise; + /** 兑现 `loadPromise` */ + readonly loadResolve: (data: R) => void; + /** 当加载任务完成时执行的函数 */ + readonly onLoaded: CustomLoadFunc; +} + +export class MotaDataLoader implements IMotaDataLoader { + /** 当前已添加的加载任务 */ + private readonly tasks: Set = new Set(); + + readonly jsonProcessor: ILoadTaskProcessor; + + constructor(readonly progress: ILoadProgressTotal) { + this.jsonProcessor = new LoadJSONProcessor(); + } + + //#region 对外接口 + + initSystemLoadTask(): void {} + + addCustomLoadTask( + task: ILoadTask, + onLoaded: CustomLoadFunc + ): Promise { + this.progress.addTask(task); + const { promise, resolve } = Promise.withResolvers(); + const store: LoadTaskStore = { + task, + onLoaded, + loadPromise: promise, + loadResolve: resolve + }; + this.tasks.add(store); + return promise; + } + + async load(): Promise { + const tasks = [...this.tasks].map(async task => { + task.task.start(); + const data = await task.task.loaded(); + await task.onLoaded(data); + task.loadResolve(data); + return data; + }); + await Promise.all(tasks); + } + + //#endregion +} diff --git a/packages-user/client-base/src/load/processor.ts b/packages-user/data-base/src/load/processor.ts similarity index 100% rename from packages-user/client-base/src/load/processor.ts rename to packages-user/data-base/src/load/processor.ts diff --git a/packages-user/data-base/src/load/types.ts b/packages-user/data-base/src/load/types.ts new file mode 100644 index 0000000..b56c3b7 --- /dev/null +++ b/packages-user/data-base/src/load/types.ts @@ -0,0 +1,38 @@ +import { + ILoadProgressTotal, + ILoadTask, + ILoadTaskProcessor, + LoadDataType +} from '@motajs/loader'; + +export type CustomLoadFunc = (data: R) => Promise; + +export interface IMotaDataLoader { + /** 加载进度对象 */ + readonly progress: ILoadProgressTotal; + + /** json 处理器 */ + readonly jsonProcessor: ILoadTaskProcessor; + + /** + * 初始化系统加载任务 + */ + initSystemLoadTask(): void; + + /** + * 添加自定义加载任务 + * @param task 自定义加载任务 + * @param onLoad 当任务加载完成时执行 + * @returns 一个 `Promise`,当添加的任务加载完毕,且 `onLoad` 返回的 `Promise` 兑现后兑现 + */ + addCustomLoadTask( + task: ILoadTask, + onLoad: CustomLoadFunc + ): Promise; + + /** + * 开始所有加载任务的加载工作 + * @returns 一个 `Promise`,当所有加载任务加载完成后兑现 + */ + load(): Promise; +}