From 01c84ffb185f4a4005019551fa4091cd4423ec84 Mon Sep 17 00:00:00 2001 From: unanmed <1319491857@qq.com> Date: Tue, 3 Nov 2026 15:18:11 +0800 Subject: [PATCH] =?UTF-8?q?refactor:=20=E5=88=A0=E9=99=A4=20@motajs/client?= =?UTF-8?q?=20@motajs/client-base?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages-user/client-base/package.json | 8 +- packages-user/client-modules/package.json | 3 +- .../client-modules/src/render/utils/saves.ts | 366 +++++++++--------- packages-user/entry-client/package.json | 2 - packages-user/entry-client/src/create.ts | 8 - packages-user/entry-data/src/mota.ts | 10 - packages/client-base/package.json | 3 - packages/client-base/src/index.ts | 2 - packages/client-base/src/types.ts | 8 - packages/client/package.json | 6 - packages/client/src/index.ts | 1 - packages/render/src/assets/composer.ts | 14 +- packages/render/src/index.ts | 2 + .../src/glUtils.ts => render/src/utils.ts} | 0 pnpm-lock.yaml | 27 +- script/build-plugin.ts | 4 - 16 files changed, 200 insertions(+), 264 deletions(-) delete mode 100644 packages/client-base/package.json delete mode 100644 packages/client-base/src/index.ts delete mode 100644 packages/client-base/src/types.ts delete mode 100644 packages/client/package.json delete mode 100644 packages/client/src/index.ts rename packages/{client-base/src/glUtils.ts => render/src/utils.ts} (100%) diff --git a/packages-user/client-base/package.json b/packages-user/client-base/package.json index 3e9b202..41a4923 100644 --- a/packages-user/client-base/package.json +++ b/packages-user/client-base/package.json @@ -3,13 +3,13 @@ "dependencies": { "@motajs/audio": "workspace:*", "@motajs/render": "workspace:*", - "@motajs/client-base": "workspace:*", - "@user/data-base": "workspace:*", - "@user/data-state": "workspace:*", "@motajs/animate": "workspace:*", "@motajs/common": "workspace:*", "@motajs/render-vue": "workspace:*", "@motajs/system": "workspace:*", - "@user/data-common": "workspace:*" + "@user/data-common": "workspace:*", + "@user/data-base": "workspace:*", + "@user/data-system": "workspace:*", + "@user/data-state": "workspace:*" } } diff --git a/packages-user/client-modules/package.json b/packages-user/client-modules/package.json index d90aeca..41fa4f0 100644 --- a/packages-user/client-modules/package.json +++ b/packages-user/client-modules/package.json @@ -1,12 +1,11 @@ { "name": "@user/client-modules", "dependencies": { + "@motajs/audio": "workspace:*", "@motajs/animate": "workspace:*", - "@motajs/client-base": "workspace:*", "@motajs/common": "workspace:*", "@motajs/render": "workspace:*", "@motajs/render-vue": "workspace:*", - "@motajs/types": "workspace:*", "@motajs/system": "workspace:*", "@user/client-base": "workspace:*", "@user/client-system": "workspace:*", diff --git a/packages-user/client-modules/src/render/utils/saves.ts b/packages-user/client-modules/src/render/utils/saves.ts index 4a8a32c..24c7bbd 100644 --- a/packages-user/client-modules/src/render/utils/saves.ts +++ b/packages-user/client-modules/src/render/utils/saves.ts @@ -1,196 +1,198 @@ -import { compressToBase64, decompressFromBase64 } from 'lz-string'; -import { getConfirm, waitbox, IGameUIPropsBase } from '@user/client-base'; -import { IUIController } from '@motajs/system'; -import { SyncSaveFromServerResponse } from '@motajs/client-base'; -import { CENTER_LOC, POP_BOX_WIDTH } from '../../shared'; +// TODO: 需要换用新的接口,且需要做网络存档支持 -export interface SaveData { - name: string; - version: string; - data: Save; -} +// import { compressToBase64, decompressFromBase64 } from 'lz-string'; +// import { getConfirm, waitbox, IGameUIPropsBase } from '@user/client-base'; +// import { IUIController } from '@motajs/system'; +// import { SyncSaveFromServerResponse } from '@motajs/client-base'; +// import { CENTER_LOC, POP_BOX_WIDTH } from '../../shared'; -export interface SaveDataArray { - name: string; - version: string; - data: Save[]; -} +// export interface SaveData { +// name: string; +// version: string; +// data: Save; +// } -export function getSave(index: number) { - return new Promise(res => { - core.getSave(index, data => { - if (!data) { - res(null); - return; - } - const content = { - name: core.firstData.name, - version: core.firstData.version, - data: data instanceof Array ? data.at(-1)! : data - }; - res(content); - }); - }); -} +// export interface SaveDataArray { +// name: string; +// version: string; +// data: Save[]; +// } -export function getAllSaves() { - return new Promise(res => { - core.getAllSaves(saves => { - if (!saves) { - res(null); - return; - } - const content = { - name: core.firstData.name, - version: core.firstData.version, - data: saves - }; - res(content); - }); - }); -} +// export function getSave(index: number) { +// return new Promise(res => { +// core.getSave(index, data => { +// if (!data) { +// res(null); +// return; +// } +// const content = { +// name: core.firstData.name, +// version: core.firstData.version, +// data: data instanceof Array ? data.at(-1)! : data +// }; +// res(content); +// }); +// }); +// } -export async function getSaveData(index: number) { - const data = await getSave(index); - if (!data) return ''; - return compressToBase64(JSON.stringify(data)); -} +// export function getAllSaves() { +// return new Promise(res => { +// core.getAllSaves(saves => { +// if (!saves) { +// res(null); +// return; +// } +// const content = { +// name: core.firstData.name, +// version: core.firstData.version, +// data: saves +// }; +// res(content); +// }); +// }); +// } -export async function getAllSavesData() { - const data = await getAllSaves(); - if (!data) return ''; - return compressToBase64(JSON.stringify(data)); -} +// export async function getSaveData(index: number) { +// const data = await getSave(index); +// if (!data) return ''; +// return compressToBase64(JSON.stringify(data)); +// } -//#region 服务器加载 +// export async function getAllSavesData() { +// const data = await getAllSaves(); +// if (!data) return ''; +// return compressToBase64(JSON.stringify(data)); +// } -const enum FromServerResponse { - Success, - ErrorCannotParse, - ErrorCannotSync, - ErrorUnexpectedCode -} +// //#region 服务器加载 -function parseIdPassword(id: string): [string, string] { - if (id.length === 7) return [id.slice(0, 4), id.slice(4)]; - else return [id.slice(0, 6), id.slice(6)]; -} +// const enum FromServerResponse { +// Success, +// ErrorCannotParse, +// ErrorCannotSync, +// ErrorUnexpectedCode +// } -async function parseResponse(response: SyncSaveFromServerResponse) { - let msg: Save | Save[] | null = null; - try { - msg = JSON.parse(decompressFromBase64(response.msg)); - } catch { - // 无视报错 - } - if (!msg) { - try { - msg = JSON.parse(response.msg); - } catch { - // 无视报错 - } - } - if (msg) { - return msg; - } else { - return FromServerResponse.ErrorCannotParse; - } -} +// function parseIdPassword(id: string): [string, string] { +// if (id.length === 7) return [id.slice(0, 4), id.slice(4)]; +// else return [id.slice(0, 6), id.slice(6)]; +// } -async function syncLoad(id: string, password: string) { - const formData = new FormData(); - formData.append('type', 'load'); - formData.append('name', core.firstData.name); - formData.append('id', id); - formData.append('password', password); +// async function parseResponse(response: SyncSaveFromServerResponse) { +// let msg: Save | Save[] | null = null; +// try { +// msg = JSON.parse(decompressFromBase64(response.msg)); +// } catch { +// // 无视报错 +// } +// if (!msg) { +// try { +// msg = JSON.parse(response.msg); +// } catch { +// // 无视报错 +// } +// } +// if (msg) { +// return msg; +// } else { +// return FromServerResponse.ErrorCannotParse; +// } +// } - try { - const response = await fetch('/games/sync.php', { - method: 'POST', - body: formData - }); +// async function syncLoad(id: string, password: string) { +// const formData = new FormData(); +// formData.append('type', 'load'); +// formData.append('name', core.firstData.name); +// formData.append('id', id); +// formData.append('password', password); - const data = (await response.json()) as SyncSaveFromServerResponse; - if (data.code === 0) { - return parseResponse(data); - } else { - return FromServerResponse.ErrorUnexpectedCode; - } - } catch { - return FromServerResponse.ErrorCannotSync; - } -} +// try { +// const response = await fetch('/games/sync.php', { +// method: 'POST', +// body: formData +// }); -export async function syncFromServer( - controller: IUIController, - identifier: string -): Promise { - if (!/^\d{6}\w{4}$/.test(identifier) && !/^\d{4}\w{3}$/.test(identifier)) { - return void getConfirm( - controller, - '不合法的存档编号+密码!请检查格式!', - CENTER_LOC, - POP_BOX_WIDTH - ); - } - const [id, password] = parseIdPassword(identifier); - const result = await waitbox( - controller, - CENTER_LOC, - POP_BOX_WIDTH, - syncLoad(id, password) - ); - if (typeof result === 'number') { - const map = { - [FromServerResponse.ErrorCannotParse]: '出错啦!\n存档解析失败', - [FromServerResponse.ErrorCannotSync]: - '出错啦!\n无法从服务器同步存档。', - [FromServerResponse.ErrorUnexpectedCode]: - '出错啦!\n无法从服务器同步存档。' - }; - return void getConfirm( - controller, - map[result], - CENTER_LOC, - POP_BOX_WIDTH - ); - } - if (result instanceof Array) { - const confirm = await getConfirm( - controller, - '所有本地存档都将被覆盖,确认?', - CENTER_LOC, - POP_BOX_WIDTH, - { - defaultYes: true - } - ); - if (confirm) { - const max = 5 * (main.savePages || 30); - for (let i = 1; i <= max; i++) { - if (i <= result.length) { - core.setLocalForage('save' + i, result[i - 1]); - } else if (core.saves.ids[i]) { - core.removeLocalForage('save' + i); - } - } - return void getConfirm( - controller, - '同步成功!\n你的本地所有存档均已被覆盖。', - CENTER_LOC, - POP_BOX_WIDTH - ); - } - } else { - const idx = core.saves.saveIndex; - await new Promise(res => { - core.setLocalForage(`save${idx}`, result, res); - }); - return void getConfirm( - controller, - `同步成功!\n单存档已覆盖至存档 ${idx}`, - CENTER_LOC, - POP_BOX_WIDTH - ); - } -} +// const data = (await response.json()) as SyncSaveFromServerResponse; +// if (data.code === 0) { +// return parseResponse(data); +// } else { +// return FromServerResponse.ErrorUnexpectedCode; +// } +// } catch { +// return FromServerResponse.ErrorCannotSync; +// } +// } + +// export async function syncFromServer( +// controller: IUIController, +// identifier: string +// ): Promise { +// if (!/^\d{6}\w{4}$/.test(identifier) && !/^\d{4}\w{3}$/.test(identifier)) { +// return void getConfirm( +// controller, +// '不合法的存档编号+密码!请检查格式!', +// CENTER_LOC, +// POP_BOX_WIDTH +// ); +// } +// const [id, password] = parseIdPassword(identifier); +// const result = await waitbox( +// controller, +// CENTER_LOC, +// POP_BOX_WIDTH, +// syncLoad(id, password) +// ); +// if (typeof result === 'number') { +// const map = { +// [FromServerResponse.ErrorCannotParse]: '出错啦!\n存档解析失败', +// [FromServerResponse.ErrorCannotSync]: +// '出错啦!\n无法从服务器同步存档。', +// [FromServerResponse.ErrorUnexpectedCode]: +// '出错啦!\n无法从服务器同步存档。' +// }; +// return void getConfirm( +// controller, +// map[result], +// CENTER_LOC, +// POP_BOX_WIDTH +// ); +// } +// if (result instanceof Array) { +// const confirm = await getConfirm( +// controller, +// '所有本地存档都将被覆盖,确认?', +// CENTER_LOC, +// POP_BOX_WIDTH, +// { +// defaultYes: true +// } +// ); +// if (confirm) { +// const max = 5 * (main.savePages || 30); +// for (let i = 1; i <= max; i++) { +// if (i <= result.length) { +// core.setLocalForage('save' + i, result[i - 1]); +// } else if (core.saves.ids[i]) { +// core.removeLocalForage('save' + i); +// } +// } +// return void getConfirm( +// controller, +// '同步成功!\n你的本地所有存档均已被覆盖。', +// CENTER_LOC, +// POP_BOX_WIDTH +// ); +// } +// } else { +// const idx = core.saves.saveIndex; +// await new Promise(res => { +// core.setLocalForage(`save${idx}`, result, res); +// }); +// return void getConfirm( +// controller, +// `同步成功!\n单存档已覆盖至存档 ${idx}`, +// CENTER_LOC, +// POP_BOX_WIDTH +// ); +// } +// } diff --git a/packages-user/entry-client/package.json b/packages-user/entry-client/package.json index 4ddab95..be8fcdc 100644 --- a/packages-user/entry-client/package.json +++ b/packages-user/entry-client/package.json @@ -1,8 +1,6 @@ { "name": "@user/entry-client", "dependencies": { - "@motajs/client": "workspace:*", - "@motajs/client-base": "workspace:*", "@motajs/common": "workspace:*", "@motajs/render": "workspace:*", "@motajs/render-vue": "workspace:*", diff --git a/packages-user/entry-client/src/create.ts b/packages-user/entry-client/src/create.ts index 9c6fc3a..a9defda 100644 --- a/packages-user/entry-client/src/create.ts +++ b/packages-user/entry-client/src/create.ts @@ -1,22 +1,14 @@ import { Mota } from '@user/entry-data'; -import * as Client from '@motajs/client'; -import * as ClientBase from '@motajs/client-base'; import * as Render from '@motajs/render'; import * as RenderVue from '@motajs/render-vue'; import * as System from '@motajs/system'; import * as UserClientBase from '@user/client-base'; import * as ClientModules from '@user/client-modules'; -import * as Vue from 'vue'; -import * as Lodash from 'lodash-es'; export function create() { - Mota.register('@motajs/client', Client); - Mota.register('@motajs/client-base', ClientBase); Mota.register('@motajs/render', Render); Mota.register('@motajs/render-vue', RenderVue); Mota.register('@motajs/system', System); Mota.register('@user/client-base', UserClientBase); Mota.register('@user/client-modules', ClientModules); - Mota.register('Vue', Vue); - Mota.register('Lodash', Lodash); } diff --git a/packages-user/entry-data/src/mota.ts b/packages-user/entry-data/src/mota.ts index 3f06c7e..050409f 100644 --- a/packages-user/entry-data/src/mota.ts +++ b/packages-user/entry-data/src/mota.ts @@ -1,5 +1,3 @@ -import type * as Client from '@motajs/client'; -import type * as ClientBase from '@motajs/client-base'; import type * as Common from '@motajs/common'; import type * as Render from '@motajs/render'; import type * as RenderVue from '@motajs/render-vue'; @@ -10,13 +8,8 @@ import type * as DataCommon from '@user/data-common'; import type * as DataBase from '@user/data-base'; import type * as DataSystem from '@user/data-system'; import type * as DataState from '@user/data-state'; -// ---------- 必要的第三方库 -import type * as Vue from 'vue'; -import type * as Lodash from 'lodash-es'; interface ModuleInterface { - '@motajs/client': typeof Client; - '@motajs/client-base': typeof ClientBase; '@motajs/common': typeof Common; '@motajs/render': typeof Render; '@motajs/render-vue': typeof RenderVue; @@ -27,9 +20,6 @@ interface ModuleInterface { '@user/data-base': typeof DataBase; '@user/data-system': typeof DataSystem; '@user/data-state': typeof DataState; - // ---------- 必要的第三方库 - Vue: typeof Vue; - Lodash: typeof Lodash; } export interface IMota { diff --git a/packages/client-base/package.json b/packages/client-base/package.json deleted file mode 100644 index 58d1293..0000000 --- a/packages/client-base/package.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "name": "@motajs/client-base" -} \ No newline at end of file diff --git a/packages/client-base/src/index.ts b/packages/client-base/src/index.ts deleted file mode 100644 index f2e03fa..0000000 --- a/packages/client-base/src/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from './glUtils'; -export * from './types'; diff --git a/packages/client-base/src/types.ts b/packages/client-base/src/types.ts deleted file mode 100644 index 7a2151c..0000000 --- a/packages/client-base/src/types.ts +++ /dev/null @@ -1,8 +0,0 @@ -export interface ResponseBase { - code: number; - message: string; -} - -export interface SyncSaveFromServerResponse extends ResponseBase { - msg: string; -} diff --git a/packages/client/package.json b/packages/client/package.json deleted file mode 100644 index 6a97b6e..0000000 --- a/packages/client/package.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "name": "@motajs/client", - "dependencies": { - "@motajs/client-base": "workspace:*" - } -} \ No newline at end of file diff --git a/packages/client/src/index.ts b/packages/client/src/index.ts deleted file mode 100644 index 1e7424f..0000000 --- a/packages/client/src/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from '@motajs/client-base'; diff --git a/packages/render/src/assets/composer.ts b/packages/render/src/assets/composer.ts index 4de0ec5..0a237f4 100644 --- a/packages/render/src/assets/composer.ts +++ b/packages/render/src/assets/composer.ts @@ -15,7 +15,7 @@ import vert from './shader/pack.vert?raw'; import frag from './shader/pack.frag?raw'; import { logger } from '@motajs/common'; import { isNil } from 'lodash-es'; -import { compileProgramWith } from '@motajs/client-base'; +import { compileProgramWith } from '../utils'; import { SizedCanvasImageSource } from '../types'; interface IndexMarkedComposedData { @@ -32,9 +32,7 @@ export interface IGridComposerData { readonly height: number; } -export class TextureGridComposer - implements ITextureComposer -{ +export class TextureGridComposer implements ITextureComposer { /** * 网格组合器,将等大小的贴图组合成图集,要求每个贴图的尺寸一致。 * 组合时按照先从左到右,再从上到下的顺序组合。 @@ -120,9 +118,7 @@ interface MaxRectsRectangle extends IRectangle { readonly data: ITexture; } -export class TextureMaxRectsComposer - implements ITextureComposer -{ +export class TextureMaxRectsComposer implements ITextureComposer { /** * 使用 Max Rects 算法执行贴图整合,输入数据参考 {@link IMaxRectsComposerData}, * 输出的纹理的图像源将会是不同的画布,注意与 {@link TextureMaxRectsWebGL2Composer} 区分 @@ -187,9 +183,7 @@ interface RectProcessed { readonly attrib: Float32Array; } -export class TextureMaxRectsWebGL2Composer - implements ITextureComposer -{ +export class TextureMaxRectsWebGL2Composer implements ITextureComposer { /** 使用的画布 */ readonly canvas: HTMLCanvasElement; /** 画布上下文 */ diff --git a/packages/render/src/index.ts b/packages/render/src/index.ts index eea9e38..b658828 100644 --- a/packages/render/src/index.ts +++ b/packages/render/src/index.ts @@ -1,4 +1,6 @@ export * from './assets'; export * from './core'; export * from './style'; + export * from './types'; +export * from './utils'; diff --git a/packages/client-base/src/glUtils.ts b/packages/render/src/utils.ts similarity index 100% rename from packages/client-base/src/glUtils.ts rename to packages/render/src/utils.ts diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 901cb1a..ab39014 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -389,9 +389,6 @@ importers: '@motajs/audio': specifier: workspace:* version: link:../../packages/audio - '@motajs/client-base': - specifier: workspace:* - version: link:../../packages/client-base '@motajs/common': specifier: workspace:* version: link:../../packages/common @@ -413,15 +410,18 @@ importers: '@user/data-state': specifier: workspace:* version: link:../data-state + '@user/data-system': + specifier: workspace:* + version: link:../data-system packages-user/client-modules: dependencies: '@motajs/animate': specifier: workspace:* version: link:../../packages/animate - '@motajs/client-base': + '@motajs/audio': specifier: workspace:* - version: link:../../packages/client-base + version: link:../../packages/audio '@motajs/common': specifier: workspace:* version: link:../../packages/common @@ -434,9 +434,6 @@ importers: '@motajs/system': specifier: workspace:* version: link:../../packages/system - '@motajs/types': - specifier: workspace:* - version: link:../../packages/types '@user/client-base': specifier: workspace:* version: link:../client-base @@ -521,12 +518,6 @@ importers: packages-user/entry-client: dependencies: - '@motajs/client': - specifier: workspace:* - version: link:../../packages/client - '@motajs/client-base': - specifier: workspace:* - version: link:../../packages/client-base '@motajs/common': specifier: workspace:* version: link:../../packages/common @@ -574,14 +565,6 @@ importers: specifier: workspace:* version: link:../loader - packages/client: - dependencies: - '@motajs/client-base': - specifier: workspace:* - version: link:../client-base - - packages/client-base: {} - packages/common: {} packages/loader: diff --git a/script/build-plugin.ts b/script/build-plugin.ts index a3ad2a6..abdffa0 100644 --- a/script/build-plugin.ts +++ b/script/build-plugin.ts @@ -7,10 +7,8 @@ const SPECIFIER_BANS: ReadonlyArray = [ [/^@user\/client-/, '@user/client-'], [/^@user\/entry-client(?:\/|$)/, '@user/entry-client'], [/^@motajs\/render(?:[/-]|$)/, '@motajs/render'], - [/^@motajs\/client(?:[/-]|$)/, '@motajs/client'], [/^@motajs\/system(?:[/-]|$)/, '@motajs/system'], [/^@motajs\/audio(?:[/-]|$)/, '@motajs/audio'], - [/^@motajs\/legacy-/, '@motajs/legacy-'], [/^vue(?:\/|$)/, 'vue'], [/^@vue\//, '@vue/'], [/^ant-design-vue(?:\/|$)/, 'ant-design-vue'], @@ -19,13 +17,11 @@ const SPECIFIER_BANS: ReadonlyArray = [ /** 数据端构建中禁止出现的渲染端模块解析路径,第一项为匹配规则,第二项为报错时的命中标记 */ const PATH_BANS: ReadonlyArray = [ - [/[/\\]packages-user[/\\]client-/, 'packages-user/client-'], [/[/\\]packages[/\\]render(?:[/\\-]|$)/, 'packages/render'], [/[/\\]packages[/\\]render-vue(?:[/\\-]|$)/, 'packages/render-vue'], [/[/\\]packages[/\\]client(?:[/\\-]|$)/, 'packages/client'], [/[/\\]packages[/\\]system(?:[/\\-]|$)/, 'packages/system'], [/[/\\]packages[/\\]audio(?:[/\\-]|$)/, 'packages/audio'], - [/[/\\]packages[/\\]legacy-/, 'packages/legacy-'], [/[/\\]src[/\\]client(?:[/\\]|$)/, 'src/client'], [ /[/\\]node_modules[/\\](?:vue|@vue|ant-design-vue|@ant-design)(?:[/\\]|$)/,