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.
3.0 KiB
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,链式几行即可:
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. 换项目接入
- 拷贝
assets/mx/module/gm/ - 实现
IGmHost(约 30 行) new GmEasy()...commit()写命令;需要时registerPanelGmShell.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) |