refactor: 删除 @motajs/client @motajs/client-base

This commit is contained in:
AncTe committed 2026-11-03 15:18:11 +08:00
1 parent ad37186068
commit 01c84ffb18
16 files changed
+200 -264

No files matched your search

+4 -4
View File
@@ -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:*"
}
}
+1 -2
View File
@@ -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:*",
@@ -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<SaveData | null>(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<SaveDataArray | null>(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<SaveData | null>(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<SaveDataArray | null>(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<IGameUIPropsBase>,
identifier: string
): Promise<void> {
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<void>(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<IGameUIPropsBase>,
// identifier: string
// ): Promise<void> {
// 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<void>(res => {
// core.setLocalForage(`save${idx}`, result, res);
// });
// return void getConfirm(
// controller,
// `同步成功!\n单存档已覆盖至存档 ${idx}`,
// CENTER_LOC,
// POP_BOX_WIDTH
// );
// }
// }
-2
View File
@@ -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:*",
-8
View File
@@ -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);
}
-10
View File
@@ -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 {
-3
View File
@@ -1,3 +0,0 @@
{
"name": "@motajs/client-base"
}
-2
View File
@@ -1,2 +0,0 @@
export * from './glUtils';
export * from './types';
-8
View File
@@ -1,8 +0,0 @@
export interface ResponseBase {
code: number;
message: string;
}
export interface SyncSaveFromServerResponse extends ResponseBase {
msg: string;
}
-6
View File
@@ -1,6 +0,0 @@
{
"name": "@motajs/client",
"dependencies": {
"@motajs/client-base": "workspace:*"
}
}
-1
View File
@@ -1 +0,0 @@
export * from '@motajs/client-base';
+4 -10
View File
@@ -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<IGridComposerData>
{
export class TextureGridComposer implements ITextureComposer<IGridComposerData> {
/**
* 网格组合器,将等大小的贴图组合成图集,要求每个贴图的尺寸一致。
* 组合时按照先从左到右,再从上到下的顺序组合。
@@ -120,9 +118,7 @@ interface MaxRectsRectangle extends IRectangle {
readonly data: ITexture;
}
export class TextureMaxRectsComposer
implements ITextureComposer<IMaxRectsComposerData>
{
export class TextureMaxRectsComposer implements ITextureComposer<IMaxRectsComposerData> {
/**
* 使用 Max Rects 算法执行贴图整合,输入数据参考 {@link IMaxRectsComposerData},
* 输出的纹理的图像源将会是不同的画布,注意与 {@link TextureMaxRectsWebGL2Composer} 区分
@@ -187,9 +183,7 @@ interface RectProcessed {
readonly attrib: Float32Array;
}
export class TextureMaxRectsWebGL2Composer
implements ITextureComposer<IMaxRectsComposerData>
{
export class TextureMaxRectsWebGL2Composer implements ITextureComposer<IMaxRectsComposerData> {
/** 使用的画布 */
readonly canvas: HTMLCanvasElement;
/** 画布上下文 */
+2
View File
@@ -1,4 +1,6 @@
export * from './assets';
export * from './core';
export * from './style';
export * from './types';
export * from './utils';
File renamed without changes.
+5 -22
View File
@@ -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:
-4
View File
@@ -7,10 +7,8 @@ const SPECIFIER_BANS: ReadonlyArray<readonly [RegExp, string]> = [
[/^@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<readonly [RegExp, string]> = [
/** 数据端构建中禁止出现的渲染端模块解析路径,第一项为匹配规则,第二项为报错时的命中标记 */
const PATH_BANS: ReadonlyArray<readonly [RegExp, string]> = [
[/[/\\]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)(?:[/\\]|$)/,