You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
87 lines
3.0 KiB
87 lines
3.0 KiB
# 方案:可视化可扩展 GM 模块
|
|
|
|
> 更新日期:2026-10-19
|
|
|
|
## 1. 目标
|
|
|
|
将单文件输入型 GM(`assets/script/game/GM.ts`)重构为:
|
|
|
|
- **mx 通用壳**:快捷按钮 / 滑动开关 / 内容面板,可拷到任意 Cocos 项目
|
|
- **项目命令注册**:业务 Action + 内容面板工厂,换项目整夹替换
|
|
|
|
## 2. 分层
|
|
|
|
| 层 | 路径 | 职责 |
|
|
|----|------|------|
|
|
| 框架 | `assets/mx/module/gm/` | Registry、Host、Shell、View、内置面板;禁止依赖 `script/` |
|
|
| 项目 | `assets/script/gm/` | Host 注入、命令注册、表驱动 Picker、业务 Action |
|
|
|
|
依赖方向:`script/gm` → `mx/gm` + Manager;`mx/gm` 绝不引用 `script/`。
|
|
|
|
## 3. 三种控件
|
|
|
|
| Kind | 用途 | 示例 |
|
|
|------|------|------|
|
|
| Quick | 一键动作 | 复制存档、每日重置、发宝石 |
|
|
| Toggle | 开/关 | 广告、营地免伤、商店无限 |
|
|
| Content | 可视化子页 / 内嵌整页 | 道具图标点选、关卡列表、段位步进;JSON 用 textArea |
|
|
|
|
## 4. Tab 结构(本项目)
|
|
|
|
| Tab | 内容 |
|
|
|-----|------|
|
|
| 常用 | 仅快捷按钮 + 快捷开关;尾部追加「钉到常用」的项 |
|
|
| 道具 | `embed` 道具点选(选中高亮) |
|
|
| 段位 | `embed` 段位/星级(选中高亮) |
|
|
| 通用 | 数值、营地开关、固定地图、局内血量、危险重置;每项可钉常用 |
|
|
| 词条 | `embed` buff 选择 |
|
|
| 存档 | `embed` 存档编辑 |
|
|
|
|
已去掉独立「战斗」Tab,原战斗项并入「通用」。
|
|
|
|
## 5. 开发者扩展(优先用 GmEasy)
|
|
|
|
日常加功能只改 `ProjectGmBootstrap._register`,链式几行即可:
|
|
|
|
```ts
|
|
new GmEasy()
|
|
.tab('常用')
|
|
.btn('复制存档', () => copy())
|
|
.sw('显示广告', () => on, v => set(v))
|
|
.tab('道具')
|
|
.embed('itemPicker')
|
|
.tab('通用')
|
|
.pinable().num('金钱', () => get(), v => set(v)) // 可钉到常用
|
|
.pinable().sw('营地免伤', () => on, v => set(v))
|
|
.danger('重置', '确定?', () => reset())
|
|
.commit();
|
|
```
|
|
|
|
- `.pinable()`:标记下一条命令可钉到「常用」;钉选状态存 `sys.localStorage`(`gm.pin.{id}`)
|
|
- `.embed(panelId)`:当前 Tab 整页嵌入面板(无二次点击入口)
|
|
|
|
底层仍是 `IGmCommand` / `GmRegistry`;自定义面板:`GmRegistry.registerPanel(id, () => new XxxPanel())`。
|
|
|
|
内置面板 id:`numberStepper`、`confirmQuick`、`textArea`。
|
|
|
|
## 6. 换项目接入
|
|
|
|
1. 拷贝 `assets/mx/module/gm/`
|
|
2. 实现 `IGmHost`(约 30 行)
|
|
3. `new GmEasy()...commit()` 写命令;需要时 `registerPanel`
|
|
4. `GmShell.bindHost` + `GmShell.show()`
|
|
|
|
## 7. 入口
|
|
|
|
- 设置页 `GM.show()` → 委托 `ProjectGmBootstrap.show()` → `GmShell`
|
|
- 挂载 `UILayer.DeBug`
|
|
- 显隐受 `IGmHost.isEnabled()` 约束(浏览器或 `sdkConfig.isOpenGM`)
|
|
- 旧 `gm.prefab` 已从 Boot 预载移除;武器等级/预设仍走 `PopGM` 预制体
|
|
|
|
## 8. 实现清单
|
|
|
|
| 模块 | 路径 |
|
|
|------|------|
|
|
| 类型/注册/壳/视图/内置面板 | `assets/mx/module/gm/` |
|
|
| Host / Actions / Panels / Bootstrap | `assets/script/gm/` |
|
|
| 门面 | `assets/script/game/GM.ts`(薄委托,无 EditBox/switch) |
|
|
|