12 KiB
12 KiB
Godot 重构进度与功能缺口优先级
更新时间:2026-05-12
依据
本清单基于当前本地代码和原 H5 参考核对,不按记忆推断。
- Godot 当前实现:
godot/FarmGodot/scripts/ui/game_scene.gd - Godot 服务层:
godot/FarmGodot/scripts/services/*.gd - Godot 配置层:
godot/FarmGodot/scripts/core/game_config_catalog.gd - 原 H5 面板通知:
muchang/home/web/game/js/main/00-runtime-and-notify.js - 原 H5 主场景入口:
muchang/home/web/game/js/main/03-game-ui-core.js - 原 H5 面板和中介:
muchang/home/web/game/js/main/05-config-and-panels.js、07-mediators.js - 原 H5 世界/宠物/游乐园/竞技:
13-world-features.js、15-battle-pet-full.js、16-amusement-park-full.js、17-sports-full.js - 最近验证截图:
docs/ui-baseline/godot-new2-final-*.png
当前重构进度
已完成
- Godot 4.6.2 工程、Web 导出预设和 H5 本地预览流程。
- Egret 原资源同步到
godot/FarmGodot/assets/egret/。 - 自动登录:
13800000001 / 123456。 - 后端协议:
ApiClient已按原 H5msg=<base64(JSON)>方式请求。 - 主农场第一版:
- 顶部玩家信息、经验、金币、钻石、战力。
- 农场背景、房屋、狗屋、围栏、土地、宠物牌。
- 左侧活动入口、右下家园入口、左下世界入口。
- 双指缩放土地场景,UI 不跟随缩放。
- 土地基础玩法:
- 播种、收获、铲除、施肥、除虫、除草。
- 成长倒计时、成熟自动刷新、成熟点击收获。
- 种子包、化肥包、土地异常状态图标。
- 家园菜单第一版:
- 商店、仓库、好友入口。
- 商店购买、仓库出售、好友排行。
- 建筑和扩展:
- 房屋升级面板和接口。
- 土地扩建面板和接口。
- 狗窝面板、狗粮喂养。
- 活动和系统入口:
- 日志、系统公告、福利大厅、兑换金币。
- 等级礼包、在线礼包、每日签到、宝箱、幸运转盘。
- 宠物列表、宠物显示、宠物喂养、宠物参战。
- 世界弹出菜单:投放、收获、喂养、去农场。
- 架构拆分:
scripts/services/:接口服务层已建立。scripts/state/:玩家、农场、背包状态层已建立。scripts/domain/rules/:土地动作、作物阶段、成本判断已建立。scripts/domain/mappers/:农场和背包数据映射已建立。scripts/resources/:图集区域和纹理缓存已建立。scripts/ui/hud/top_bar_view.gd:顶部 HUD 渲染已迁出。scripts/ui/menus/:主菜单和世界菜单控制器已迁出。scripts/ui/common/:弹窗层、Toast、按钮动效公共逻辑已迁出。scripts/ui/farm/farm_viewport_controller.gd:农场拖动视口、双指/滚轮缩放已迁出。scripts/ui/game_scene_runtime_assembler.gd:HUD、菜单、弹窗、宠物展示、农场缩放、土地网格、土地菜单、背包、种植提示和 hit 路由装配已迁出。scripts/ui/game_scene_panel_router.gd:所有面板入口、弹窗打开/关闭和仓库/好友入口状态已迁出。scripts/ui/game_scene_context.gd:面板共享依赖和 legacy callback 兼容层已收敛。scripts/state/player_state.gd:合并原玩家字段访问器,玩家快照只保留一个权威来源。scripts/ui/common/icon_texture_provider.gd:物品、宠物、作物和房屋图标加载已集中缓存。
部分完成
- UI 对齐:主场景和大部分面板已能打开并使用原资源,但不是像素级一致。
- 动效:主菜单、世界菜单、土地菜单、弹窗有 Tween;仍未覆盖所有原版细节动效。
- 好友:只完成排行和列表;搜索、申请、访问好友家园、好友互动仍是占位提示。
- 世界功能:只完成菜单和信息型面板;游乐园、竞技场、成就领取、战宠对战还不是完整玩法。
- 福利大厅:VIP/卡数据显示和领取已接;购买周卡/月卡已接入充值下单入口,支付完成回调仍需海外平台 SDK。
- 兑换金币:兑换和记录已接;UI 仍是 Godot 第一版排版,不是原版完整皮肤。
- 资源系统:可读 Egret 图集 JSON 并缓存
AtlasTexture;没有批量生成.tres和 EXML 辅助转换工具。 - 架构:服务/状态/规则、公共 UI、运行时装配、面板路由、土地交互和主要面板已拆出;
game_scene.gd当前 957 行,已低于 1200 行目标,后续风险集中在旧面板 legacy callbacks。
明确未补齐
- 充值/支付:原 H5 有
OPEN_PAY和pay/pay;Godot 已接 Top Up、周卡/月卡购买入口和支付下单 URL 跳转,实际支付完成回调仍需接海外平台 SDK。 - 换肤/背景:原 H5 有
OPEN_SKIN和farm/change-bg;Godot 当前商店背景 tab 不是完整换肤流程。 - 玩家信息:原 H5 有
OPEN_PLAYER_INFO;Godot 当前头像点击没有完整角色信息面板。 - 好友搜索/申请/请求处理/赠送/互动/访问好友农场:Godot 当前大多是 toast 占位。
- 竞技场完整玩法:挑战列表、挑战、周奖励、领奖未补齐。
- 游乐园完整玩法:进入、翻牌/抽奖/奖励结算未补齐。
- 成就完整玩法:领取成就奖励未做完整交互。
- 战宠完整玩法:战斗详情、对战流程、战斗结果未补齐。
- 音频、FNT、全部原版动画、所有面板像素级对照未完成。
P0:必须优先补齐
P0 是继续开发和第一版可玩闭环的阻断项。
| 项目 | 当前状态 | 依据 | 下一步 |
|---|---|---|---|
拆分 game_scene.gd |
P0 完成:土地、背包、公共 UI、菜单、HUD、弹窗层、商店/仓库/好友/建筑/狗/活动/支付/福利/兑换/世界/签到/宝箱/转盘/宠物面板、启动装配、运行时装配、面板路由、hit 路由、土地交互协调、库存 Facade、玩家状态、场景上下文已拆成模块 | wc -l godot/FarmGodot/scripts/ui/game_scene.gd 当前低于 1200 行;新增 GameSceneBootstrap、GameSceneRuntimeAssembler、GameScenePanelRouter、SceneHitRouter、FarmInteractionCoordinator、PlayerInventoryFacade、PlayerState、GameSceneContext |
P1 继续把旧面板从 legacy callbacks 迁到显式 Context 方法 |
| UI 像素级一致 | 功能入口已按原素材补齐并保留烟测截图;仍需逐页和 Egret 基准压差异 | docs/ui-baseline/smoke/*.png |
每个入口固定 Egret/Godot 对照截图,按主场景、土地、活动、家园面板逐页压差异 |
| 浇水 | 已完成 | 原 H5 KICK_WATER -> farm/disease type=0;LandActionRules 已接 ACTION_WATER |
干旱土地菜单显示浇水图标,执行 farm/disease type=0,刷新土地状态 |
| 土地升级 | 已完成第一版闭环 | 原 H5 OPEN_LAND_UPGRADE -> farm/upgrade-land;BuildingApi.upgrade_land() |
顶部 Land Up 打开原版布局面板,按土地等级/顺位取配置,校验等级/材料/前置土地,成功刷新土地 |
| 充值/支付入口 | 已完成第一版闭环 | 原 H5 OPEN_PAY -> pay/pay;Godot 新增 PayApi |
Top Up 和福利卡购买打开充值面板,pay/pay 成功后 Web 端用 JavaScriptBridge 跳转支付 URL |
| 状态一致性 | P0 完成:奖励、消耗、仓库刷新、货币写入走 PlayerInventoryFacade,玩家快照字段统一走 PlayerState |
主场景内玩家字段不再依赖 PlayerDataAccessor,PlayerInventoryFacade 也改为引用 PlayerState |
P1 把世界/好友等跨模块状态继续收敛到显式 State/Facade apply |
| 真实 Web 烟测流程 | 已完成 | tools/smoke_godot_web.mjs |
覆盖主场景、Top Up、Land Up、福利大厅、土地菜单、世界菜单、缩放;截图输出到 docs/ui-baseline/smoke/ |
P1:第一版完整度补齐
P1 是原版主要系统补齐项,不一定阻断农场主循环,但会影响“功能逻辑一致”。
| 项目 | 当前状态 | 依据 | 下一步 |
|---|---|---|---|
| 好友完整系统 | 排行和好友列表已接,搜索/申请/请求/访问/互动未接 | Godot 里 好友搜索面板后续补齐、查看家园、互动 为 toast |
补 friend/find、friend/add、friend/get-respond-list、friend/respond-list、friend/respond,再做好友农场场景 |
| 好友农场和互动 | 无 SceneNotify.OPEN_OTHER_GAME 对应完整场景 |
原 H5 GO_OTHER_FARM、interaction/interaction |
支持访问他人农场、放虫/放草/浇水/除虫/除草互动,区分自己和好友土地菜单 |
| 世界-成就 | 只展示列表,没有完整领取/分页/状态 | Godot 有 fetch_achievements/claim_achievement,UI 未完整绑定领取 |
补成就详情、领取按钮、领取后状态刷新 |
| 世界-竞技场 | 只展示基础数据和排行 | 原 H5 有 arena/get-challenge-list、arena/challenge、arena/week-gift-list、arena/get-gift |
补挑战列表、挑战流程、战斗结果、每周奖励 |
| 世界-游乐园 | 只展示次数和奖励配置 | 原 H5 有 comm/enter-pleasure-ground、comm/pleasure-ground |
补进入、玩法步骤、奖励结算和次数扣除 |
| 世界-战宠对战 | 宠物列表/喂养/参战已接,对战未接 | 原 H5 有 pet/battle、pet/get-battle-info |
补战宠对战入口、战斗详情、结果动画 |
| 换肤/背景 | 商店背景 tab 和换肤系统未闭环 | 原 H5 OPEN_SKIN -> farm/change-bg |
补 SkinPanel、已拥有背景列表、应用背景、购买背景后的状态刷新 |
| 玩家信息 | 未做完整角色信息面板 | 原 H5 OPEN_PLAYER_INFO |
头像点击打开角色资料,支持昵称/形象信息展示 |
| 活动面板细节 | 已能打开,部分逻辑和动效仍简化 | 宝箱、签到、福利、转盘等 Godot UI 为第一版 | 对照原皮肤补齐分页、倒计时、按钮状态、领奖动画、奖励弹窗 |
| 商店/仓库完整性 | 基础购买/出售已接 | 原 H5 商店含普通/神秘/背景,仓库含多分类 | 补完整分类、数量选择、使用道具、背景商品、不可售状态 |
P2:质量、工具和发布能力
P2 不阻断第一版功能闭环,但影响长期效率、质量和海外发布。
| 项目 | 当前状态 | 下一步 |
|---|---|---|
| EXML 辅助转换工具 | 未实现 | 做 EXML 坐标/九宫格/资源名提取工具,减少手写 UI 坐标 |
Egret 图集批量 .tres 生成 |
局部使用运行时图集缓存 | 批量生成 Godot 可引用 AtlasTexture 或统一运行时缓存索引 |
| FNT/字体一致性 | 部分位图字和字体仍不完全一致 | 系统整理 FNT 解析和 Label 替换规则 |
| 音频系统 | 原资源已迁入,运行时播放未完整接入 | 补背景音乐、点击音效、奖励音效、开关设置 |
| 动效库 | 基础按钮/点击动效已抽到 UiMotion,部分面板和土地动效仍在各自模块 |
继续抽通用弹入、奖励飞字、面板切换动画 |
| 自动化测试 | 只有手动命令和截图脚本片段 | 增加 Godot check、Web 导出、Playwright 烟测的一键脚本 |
| CI/构建脚本 | 未固化 | 添加本地 tools/export_web.sh 或 Makefile,后续接 CI |
| 配置环境切换 | 后端地址写在 project.godot |
增加 dev/staging/prod 配置方案,避免手动改 base_url |
| 海外 SDK | 未接 | 支付、广告、统计、登录平台 SDK 通过 Web JavaScriptBridge 薄封装 |
| 代码清理 | 仍有重复/临时逻辑风险 | 清理重复 return、toast 占位、直接字典读写和未使用常量 |
| 文档同步 | 旧进度文档部分过期 | 用本文档作为当前优先级源,阶段完成后同步 README.MD 和迁移进度 |
建议执行顺序
- 已完成:P0-2 浇水和土地升级,完成农场核心土地闭环。
- 已完成:P0-3 充值/支付入口的可替换接口层,Top Up 和福利卡购买不再是占位。
- 已完成:P0-4 Playwright Web 烟测脚本,导出后可固定跑主场景、土地、活动、世界、缩放。
- 已完成:P0-1
game_scene.gd深拆当前阶段,启动装配、hit 路由、土地交互、库存状态写入已迁出。 - P1:按世界功能和好友功能拆独立模块,先做接口闭环,再压 UI。