274 lines
23 KiB
Markdown
274 lines
23 KiB
Markdown
# Godot 重构进度
|
||
|
||
## 已完成
|
||
|
||
- 删除旧 Unity 目录:`unity`。
|
||
- 安装 Godot 4.6.2 stable 到:`/Users/hy/Applications/Godot.app`。
|
||
- 添加命令行入口:`/Users/hy/.local/bin/godot`。
|
||
- 安装 Godot 4.6.2 官方导出模板到用户模板目录。
|
||
- 新建 Godot 工程:`godot/FarmGodot`。
|
||
- 添加并验证 Web 导出预设:`export_presets.cfg`。
|
||
- 拷贝登录页第一批 Egret 素材:
|
||
- `login_bg.jpg`
|
||
- `login_bg.png`
|
||
- `login_db.png`
|
||
- `login_phone.png`
|
||
- `login_pwd.png`
|
||
- `login_jizhuPassword.png`
|
||
- `login_regist.png`
|
||
- `login_findpwd.png`
|
||
- `login_goubg.png`
|
||
- `login_gou.png`
|
||
- `select_db.png`
|
||
- `select_db1.png`
|
||
- `common.png` 中 `c_btn1_png`
|
||
- `huakang.ttf`
|
||
- `huakanghaibao.ttf`
|
||
- 拷贝资源规格:
|
||
- `default.res.json`
|
||
- `default.thm.json`
|
||
- `LoginSceneSkin.exml`
|
||
- 已按新版解密 HTML 完整同步原版素材:
|
||
- 来源:`muchang/home/web/game/resource/`
|
||
- 目标:`godot/FarmGodot/assets/egret/`
|
||
- 保留原版相对路径:`assets/`、`config/`、`fonts/`、`skins/`、根目录资源清单。
|
||
- 原版 `resource` 下 882 个文件已同步;`rsync -ani --inplace --omit-dir-times` 复查无待同步文件。
|
||
- 添加第一版场景:
|
||
- `scenes/bootstrap.tscn`
|
||
- `scenes/ui/login_scene.tscn`
|
||
- 添加第一版脚本:
|
||
- `scripts/bootstrap.gd`
|
||
- `scripts/services/api_client.gd`
|
||
- `scripts/core/egret_resource_catalog.gd`
|
||
- `scripts/core/number_formatter.gd`
|
||
- `scripts/ui/login_scene.gd`
|
||
- 已完成验证:
|
||
- Godot 工程导入通过。
|
||
- 所有 GDScript `--check-only` 通过。
|
||
- 主场景 headless 启动通过。
|
||
- Web release 导出通过。
|
||
- 本地 HTTP 服务访问 `index.html`、`index.wasm`、`index.pck` 均返回 200。
|
||
- Godot `--write-movie` 录帧成功,登录页可渲染,截图路径:`/tmp/farmgodot_frame00000000.png`。
|
||
- 根据“UI 完全一致”要求,当前登录页只算预览版,不计入 UI 完成。
|
||
- 已处理第一批明显不一致:
|
||
- 输入框去除 Godot 默认黑色样式,改为白鹭输入框底图和 `NinePatchRect` 承载。
|
||
- 登录按钮改为 `common.png` 中 `c_btn1_png` 图集区域作为底图。
|
||
- 登录页坐标改以运行时 `default.thm_4ef35e2b.js` 编译皮肤为准,源 EXML 只作为辅助。
|
||
- Web 导出改用自定义 shell;当前 Godot 预览按 `640 x 960` 全画布验证,避免桌面预览右侧黑边。
|
||
- 已生成白鹭/Godot 对照截图和差异图:
|
||
- `docs/ui-baseline/egret-login-page.png`
|
||
- `docs/ui-baseline/godot-login-page.png`
|
||
- `docs/ui-baseline/login-page-diff.png`
|
||
- `docs/ui-baseline/egret-login-canvas.png`
|
||
- `docs/ui-baseline/godot-login-canvas.png`
|
||
- `docs/ui-baseline/login-canvas-diff.png`
|
||
- 当前截图对比结果:
|
||
- 页面截图:`11206 / 614400` 像素不同,差异率 `0.018239`。
|
||
- 实际 canvas:`11206 / 460800` 像素不同,差异率 `0.024319`。
|
||
- 差异主要集中在中文字体渲染、按钮文字和少量贴图边缘采样;因此登录页仍不能标记为 UI 完成。
|
||
|
||
## 当前能力
|
||
|
||
- Godot 启动后进入登录页预览。
|
||
- 能解析 Egret `default.res.json` 并统计资源数量。
|
||
- 登录表单能做账号和密码非空校验。
|
||
- 已配置本地后端地址:`http://127.0.0.1:18082/index.php?r=`。
|
||
- 已配置登录路径:`user/login`。
|
||
- 登录请求已按旧 Egret 协议发送:`application/x-www-form-urlencoded`,body 为 `msg=<base64(JSON)>`。
|
||
- 登录响应中的 `data` 已按旧客户端逻辑做 Base64 + JSON 解码。
|
||
- 使用账号 `13800000001 / 123456` 已验证 Godot Web 版可真实登录并进入主农场。
|
||
- 第一版主农场已接入:
|
||
- 顶部玩家信息栏、头像、经验条、金币、钻石、战力。
|
||
- 农场背景、房屋、围栏、狗屋。
|
||
- 12 块土地显示,已开垦/未开垦状态和扩建入口。
|
||
- 左侧活动入口、世界入口、右下家园入口。
|
||
- 按后端 `landList` 渲染作物阶段,当前可显示成熟作物和种子期作物。
|
||
- 点击空地后显示旧版黄色土地高亮和圆形“播种”菜单。
|
||
- 点击“播种”后显示旧版右侧种子包,种子列表从 `store-house` 读取。
|
||
- 点击种子后调用 `farm/sow-seeds`,成功后刷新当前地块作物。
|
||
- 种子播下后会按 `crop_gather_time` 和作物阶段时间自动刷新作物贴图,不需要刷新页面。
|
||
- 点击成长中土地后显示旧版圆形土地菜单:铲除、施肥、除虫、除草。
|
||
- 点击成熟土地后显示旧版“收割”菜单,并调用 `farm/gather-crop`。
|
||
- 点击已收割或枯萎土地后显示旧版“铲除”菜单,并调用 `farm/clear-land`。
|
||
- 点击“施肥”后显示旧版右侧化肥包,化肥列表从 `store-house` 读取,并调用 `farm/fertilize`。
|
||
- 点击“除虫”“除草”后调用 `farm/disease`,分别传原版疾病类型 `1` 和 `2`。
|
||
- 土地异常状态已渲染原版 `plant_state1/2/3` 图标。
|
||
- 土地倒计时已按原版长按行为显示,不占用普通点击操作菜单。
|
||
- 家园菜单已补第一版二级入口和弹窗:
|
||
- 点击家园后按旧版弧形弹出商店、仓库、好友入口。
|
||
- 商店弹窗已按 `ShopSkin.exml`、`ShopItemSkin.exml` 迁移第一版,配置来自 `store_list`,买入调用 `store/buy`。
|
||
- 仓库弹窗已按 `WareHouseSkin.exml`、`WareHouseItemSkin.exml` 迁移第一版,库存来自 `store-house`,出售弹窗按 `SellSkin.exml` 迁移,出售调用 `store-house/sell`。
|
||
- 好友弹窗已按 `FriendSkin.exml`、`FriendRankItemSkin.exml` 迁移第一版,全国排行调用 `comm/get-level-ranking`,好友排行调用 `friend/friend-list`。
|
||
- 已生成主农场白鹭/Godot 对照截图:
|
||
- `docs/ui-baseline/egret-main-page.png`
|
||
- `docs/ui-baseline/egret-main-canvas.png`
|
||
- `docs/ui-baseline/egret-main-meta.json`
|
||
- `docs/ui-baseline/godot-main-page.png`
|
||
- `docs/ui-baseline/godot-main-canvas.png`
|
||
- `docs/ui-baseline/godot-main-meta.json`
|
||
- 已生成种菜流程截图:
|
||
- `docs/ui-baseline/egret-plant-menu.png`
|
||
- `docs/ui-baseline/egret-seed-bag.png`
|
||
- `docs/ui-baseline/egret-after-sow.png`
|
||
- `docs/ui-baseline/godot-plant-menu.png`
|
||
- `docs/ui-baseline/godot-seed-bag.png`
|
||
- `docs/ui-baseline/godot-after-sow.png`
|
||
- `docs/ui-baseline/godot-plant-flow-meta.json`
|
||
- `docs/ui-baseline/godot-auto-mature.png`
|
||
- `docs/ui-baseline/godot-auto-mature-menu.png`
|
||
- 已生成土地操作流程截图:
|
||
- `docs/ui-baseline/godot-actions-main.png`
|
||
- `docs/ui-baseline/godot-countdown-longpress.png`
|
||
- `docs/ui-baseline/godot-actions-menu.png`
|
||
- `docs/ui-baseline/godot-after-bug-clean.png`
|
||
- `docs/ui-baseline/godot-after-grass-clean.png`
|
||
- `docs/ui-baseline/godot-fertilizer-bag.png`
|
||
- `docs/ui-baseline/godot-after-fertilize.png`
|
||
- `docs/ui-baseline/godot-ripe-menu.png`
|
||
- `docs/ui-baseline/godot-after-harvest.png`
|
||
- `docs/ui-baseline/godot-after-clear.png`
|
||
- `docs/ui-baseline/godot-land-actions-flow-meta.json`
|
||
- 已生成家园菜单弹窗验证截图:
|
||
- `docs/ui-baseline/godot-shop-panel.png`
|
||
- `docs/ui-baseline/godot-warehouse-panel.png`
|
||
- `docs/ui-baseline/godot-friend-panel.png`
|
||
- 已生成狗窝、房屋升级、土地扩建验证截图:
|
||
- `docs/ui-baseline/godot-dog-building-extend-main.png`
|
||
- `docs/ui-baseline/godot-building-upgrade-panel.png`
|
||
- `docs/ui-baseline/godot-dog-panel.png`
|
||
- `docs/ui-baseline/godot-dog-food-popup.png`
|
||
- `docs/ui-baseline/godot-land-extend-panel.png`
|
||
- `docs/ui-baseline/godot-dog-building-extend-meta.json`
|
||
- 已生成宠物功能验证截图:
|
||
- `docs/ui-baseline/godot-pet-main.png`
|
||
- `docs/ui-baseline/godot-pet-panel.png`
|
||
- `docs/ui-baseline/godot-pet-doghouse-click.png`
|
||
- 已生成统一面板背景验证截图:
|
||
- `docs/ui-baseline/godot-panel-background-home-menu.png`
|
||
- `docs/ui-baseline/godot-panel-background-shop.png`
|
||
- `docs/ui-baseline/godot-panel-background-warehouse.png`
|
||
- `docs/ui-baseline/godot-panel-background-friend.png`
|
||
- `docs/ui-baseline/godot-panel-background-pet.png`
|
||
- `docs/ui-baseline/godot-panel-background-dog.png`
|
||
|
||
## 未完成
|
||
|
||
- 登录成功后的玩家模型已开始拆到 `PlayerState/FarmState/InventoryState`,但 UI 层仍有部分直接读写字典的旧逻辑。
|
||
- 主场景入口点击、扩建、浇水、土地升级已接第一版;浇水走 `farm/disease type=0`,当前账号没有干旱土地时只做规则/API 链路验证。
|
||
- 好友搜索、好友申请、查看好友家园、互动动作只保留入口提示,未接完整二级弹窗和接口。
|
||
- Egret 图集自动转 `AtlasTexture` 未实现。
|
||
- EXML 辅助转换工具未实现。
|
||
- 字体、FNT、音频原始文件已迁入 `assets/egret`,但部分运行时解析和播放逻辑仍未接完。
|
||
- 登录页已完成第一轮白鹭基准截图对比,但像素差异未归零,不能标记为 UI 完成。
|
||
- 主农场已完成第一版浏览器截图对照,但未做像素差异归零;左侧入口、顶部字体/FNT、围栏招牌语言仍需继续精调。
|
||
- 字体、字号、按钮文字效果、图集采样和旧 H5 的 640x1136 缩放差异仍需继续精调。
|
||
|
||
## 已解决问题记录
|
||
|
||
- Web 导出第一次失败,Godot CLI 只显示空的 configuration errors。
|
||
- 查 Godot 4.6.2 官方源码后确认原因:`vram_texture_compression/for_mobile=true` 时要求项目启用 ETC2/ASTC 导入设置;当前项目没有启用,`can_export` 返回失败但没有错误文本。
|
||
- 已按官方 Web exporter 默认值改为 `vram_texture_compression/for_mobile=false`,重新导出通过。
|
||
- 后端 URL 已从旧客户端 `GameConfig.SERVER_PATH` 定位:
|
||
- `muchang/farmer/js/main.min_77d7299f.js` 使用 `http://<host>/home/web/index.php?r=`。
|
||
- 本地 Docker `home` 服务映射到 `127.0.0.1:18082`,所以 Godot 使用 `http://127.0.0.1:18082/index.php?r=`。
|
||
- 已用 curl 验证 `user/login` 可达,并返回后端 JSON 业务状态。
|
||
- 种菜链路已按旧客户端确认:
|
||
- 旧客户端 `BagPanelSkin.exml` 的右侧种子包位置和 `BagIconSkin.exml` 的种子图标样式已迁移。
|
||
- 旧客户端 `GameView.clickLand -> CoolMenuItem.plant -> OPEN_BAG -> BagIconRender -> farm/sow-seeds` 链路已在 Godot 复刻第一版。
|
||
- 2026-05-11 使用 `13800000001 / 123456` 在 Godot Web 验证:`user/login`、`store-house`、`farm/sow-seeds` 均返回 HTTP 200。
|
||
- 为验证播种,临时通过 `store/buy` 买入 1 个金桔种子,播种成功后已调用 `farm/clear-land` 把 1 号地恢复为空地。
|
||
- 土地操作链路已按旧客户端确认:
|
||
- 旧客户端 `GameView.getMyFarmMenu` 的土地菜单规则已迁移:空地播种、成长中铲除/施肥/除虫/除草、成熟收割、已收割或枯萎铲除。
|
||
- 旧客户端 `PlantCdTipSkin.exml` 的长按倒计时提示已迁移,普通点击不再弹倒计时,避免遮挡操作菜单。
|
||
- 旧客户端 `BagPanelSkin.exml` 的右侧背包位置继续复用,当前支持种子包和化肥包。
|
||
- `game_config.json` 已作为非资源文件纳入 Web 导出,用于读取种子、作物、化肥、图标和阶段时间配置。
|
||
- 2026-05-11 使用 `13800000001 / 123456` 在 Godot Web 验证:`farm/disease`、`farm/fertilize`、`farm/gather-crop`、`farm/clear-land` 均返回 HTTP 200 且业务状态成功。
|
||
- 验证时临时改动的测试账号土地、道具和经验数据已恢复到测试前状态。
|
||
- 作物自动成熟刷新已确认:
|
||
- 2026-05-11 参考 Godot `Timer.timeout` 机制,在农场场景增加 1 秒一次的地块视觉状态签名检查,只有阶段、收获状态或异常图标发生变化时才重绘地块。
|
||
- 使用 `13800000001 / 123456` 在 Godot Web 版播种金桔种子,后端返回 `crop_gather_time = crop_start_time + 22`;页面不刷新等待成熟后,作物贴图自动切换为成熟金桔。
|
||
- 点击自动成熟后的地块已验证弹出“Harvest”收获菜单;验证结束后已调用 `farm/clear-land` 将 0 号地恢复为空地。
|
||
- 家园菜单弹窗链路已按旧客户端确认:
|
||
- 旧客户端 `MainMenu` 的弧形菜单动画已迁移为 Godot Tween,仓库素材继续以仓库内 replacement 素材为准。
|
||
- 旧客户端 `ShopMediator.buy` 对应 `store/buy` 已接入,2026-05-11 使用测试账号在 Godot Web 点击商店购买金桔种子,HTTP 200 且业务状态成功。
|
||
- 旧客户端 `WareHouseMediator.sellWareHouseItem` 对应 `store-house/sell` 已接入,仓库物品点击可弹出售面板。
|
||
- 旧客户端 `FriendMediator.getRankList/getFriendList` 对应 `comm/get-level-ranking`、`friend/friend-list` 已接入;2026-05-11 使用同一 token 直接验证全国排行返回 `total_count=70`、好友排行返回 `total_count=0`,Godot Web 全国排行显示 1/10。
|
||
- 狗窝、房屋升级和土地扩建第一版已接入:
|
||
- 狗屋点击打开 `DogSkin` 对应面板;按旧版 `DogSelectFoodSkin` 显示三档狗粮,接口逻辑对应 `user/feed-dog`。
|
||
- 房屋点击打开 `BuildingSkin` 对应“房屋升级”面板,读取 `farm_level` 配置表,材料和等级不足时按旧版禁用升级按钮;接口逻辑对应 `farm/upgrade`。
|
||
- 未开垦土地和扩建木牌点击打开 `LandOpenSkin` 对应扩建面板,读取 `land_extend` 配置表,等级/金币不足时禁用扩建按钮;接口逻辑对应 `farm/extend-land`。
|
||
- 2026-05-11 在 Godot Web 版使用 `13800000001 / 123456` 验证三个入口均能打开,当前账号下一块土地要求 `LV.13 / 1888`,因等级不足未执行不可逆扩建。
|
||
- 宠物主场景和战宠面板已按旧资源修正:
|
||
- 场景宠物展示从静态 `petIcon` 改为读取 `assets/swf/dog1.{json,png}` 的 Egret MovieClip 帧,饥饿状态使用趴地动画并加轻微呼吸/语言淡入淡出。
|
||
- 宠物位置移到狗窝右侧草地区域,点击热区缩小到狗身,避免遮挡土地和抢狗窝牌子点击。
|
||
- 战宠面板保留 `BattleBaseCompomentSkin` 对应的头像框、属性区、经验条、介绍区、底部宠物卡片资源,主外框和内容底图改用统一透明背景素材。
|
||
- 战宠基础属性页的经验条按 `BattleProssBar2Skin.exml` 改为九宫格背景 + 裁剪遮罩填充,修复 Godot 纹理按图集原宽度向右溢出的问题。
|
||
- 对照旧版 `WidgetDog` 逻辑,家园场景宠物只作为动画展示,不再点击打开战宠面板;战宠面板入口保留在世界菜单/竞技相关入口。
|
||
- 2026-05-12 在 Godot Web 版使用 `13800000001 / 123456` 验证:主场景宠物可见且不压土地;点击家园宠物不打开战宠面板;世界菜单战宠入口可打开面板且经验条不越界;点击狗窝牌子仍打开“亲家护院”狗窝面板。
|
||
- 统一面板背景素材已接入:
|
||
- `tools/batch_prepare_icons.py` 增加 `--cutout SOURCE OUTPUT WIDTH HEIGHT`,可直接对绿幕素材抠图并输出指定尺寸透明 PNG。
|
||
- 两张新素材已输出到 `godot/FarmGodot/assets/replacement/panels/panel_shell.png` 和 `godot/FarmGodot/assets/replacement/panels/panel_content.png`。
|
||
- `UiBuilder.create_panel_shell()` 统一使用新外框;狗面板手写外框、商店/仓库/好友/充值/公告/世界/宠物等主内容区统一改用新内容底图。
|
||
- 2026-05-12 通过 Godot Web 截图验证商店、仓库、好友、宠物、狗窝面板均能打开且新背景生效。
|
||
- 异步面板关闭后的失效节点问题已修复:
|
||
- `PanelModule` 增加节点存活和当前节点校验,避免面板关闭后接口返回继续调用已释放节点。
|
||
- `LevelGiftPanel`、公告、日志、好友、兑换记录、宝箱、签到、福利、宠物、世界信息等同类面板已按同一规则补防护。
|
||
- 2026-05-12 通过相关脚本 `--check-only`、Web 导出、`npm run smoke:godot:web` 和等级礼包快速打开/关闭 Playwright 检查验证。
|
||
- 房屋升级和用户信息面板本轮修正:
|
||
- 房屋升级按钮按 `BuildingSkin.exml` 的主内容组坐标上移,避免遮盖房屋贴图。
|
||
- 用户信息顶部资料区补统一内容底图,避免新面板外框透明中心露出主场景背景。
|
||
- 用户信息标题改用 `roleinfo` 图集的 `panel_title_role_info_png`,用户 ID 显示清理为整数文本,避免 `600.0` 这类浮点格式露出。
|
||
- `BoxPanel` 和 `LotteryPanel` 的右侧装饰节点补显式 `TextureRect` 类型,修复 Web 编译时 `_ui.add_texture()` 返回值无法推断导致主场景加载失败的问题。
|
||
- 2026-05-12 通过 `building_panel.gd`、`player_info_panel.gd`、`box_panel.gd`、`lottery_panel.gd` 脚本检查、Web 导出、Playwright 截图和 `npm run smoke:godot:web` 验证。
|
||
- 农场主界面入口和作物提示本轮修正:
|
||
- 种子包按旧版 `BagPanelSkin.exml` 的 `x=526,width=114` 对齐到 640 右边缘,并隐藏内部滚动条。
|
||
- 生长倒计时提示条按旧版 `PlantCdTipSkin.exml` + `CDBarSkin.exml` 改为背景/填充双九宫格,修复普通拉伸导致的进度条质感不一致。
|
||
- 左侧“福利中心/Benefits”入口、命中区、回调、面板装配和 Godot 福利面板脚本已移除;smoke 流程改为新的左侧菜单顺序。
|
||
- 2026-05-13 通过相关脚本 `--check-only`、`verify_p0.gd`、工程导入、Web 导出、`npm run smoke:godot:web` 和 `tools/verify_ui_regressions.gd` 验证。
|
||
- 背包外部点击关闭已接入:
|
||
- 种子/化肥背包打开后会启用全屏透明关闭命中层;点击背包以外区域只关闭背包,不再把点击透传到土地或主菜单。
|
||
- 背包面板本体设置为输入阻挡层,点击背包内部空白、滚动区域或物品不会触发外部关闭。
|
||
- 2026-05-13 通过 `seed_bag_view.gd` 脚本检查、`verify_p0.gd`、Web 导出、`npm run smoke:godot:web` 和 `tools/verify_ui_regressions.gd` 验证。
|
||
- 作物收获/生长信息卡片拉伸问题已修复:
|
||
- 旧版 `PlantCdTipSkin.exml` 使用 `log_itembg_png` 和 `scale9Grid="24,20,4,3"`;该素材原始区域为 53x49,Godot `NinePatchRect` 右/下边距应换算为 25/26,而不是直接使用 4/3。
|
||
- 已把作物提示卡片背景九宫格改为 `24,20,25,26`,避免收获信息卡片横向拉伸后边角和阴影变形。
|
||
- 2026-05-13 通过 `plant_tip_view.gd` 脚本检查、`verify_p0.gd`、Web 导出、`npm run smoke:godot:web` 和 `tools/verify_ui_regressions.gd` 验证。
|
||
- 作物信息气泡常驻逻辑已补齐:
|
||
- 有作物且未收获/未枯萎的土地会在作物头顶持续展示 `PlantCdTip` 气泡;点击作物弹出操作菜单或打开种子/化肥背包时隐藏。
|
||
- 操作菜单关闭或操作完成刷新土地后,会按当前土地状态恢复气泡;收获后、空地或只剩枯萎草时不再展示。
|
||
- 农场视口拖动或土地节点位置变化时,气泡每帧按土地当前全局位置重算,避免停留在旧坐标。
|
||
- 2026-05-23 通过 `plant_tip_view.gd`、`farm_interaction_coordinator.gd`、`verify_ui_regressions.gd` 脚本检查、`tools/verify_ui_regressions.gd`、`verify_p0.gd`、Web 导出和 `npm run smoke:godot:web` 验证。
|
||
- Home 菜单点击穿透到土地扩建的问题已修复:
|
||
- 主场景 `_input` 现在先让 `MainMenuController` 处理 Home 按钮、菜单项和菜单外部关闭命中,命中后直接标记输入已处理,再进入农场土地点击兜底。
|
||
- Home 弧形菜单打开时,点击 Store/Storage/Friends 等菜单项只触发对应菜单动作;点击菜单外部只关闭菜单,不再继续传给土地扩建入口。
|
||
- 2026-05-13 通过 `main_menu_controller.gd`、`game_scene.gd`、`verify_ui_regressions.gd` 脚本检查、`tools/verify_ui_regressions.gd`、`verify_p0.gd`、Web 导出和 `npm run smoke:godot:web` 验证。
|
||
- 顶部功能菜单改为单行布局:
|
||
- 转盘入口从第二行移动到第一行第三个槽位,顺序为 `Log / Land Up / Wheel / Pack`。
|
||
- 第二行底部木板 `TopPanelBack` 隐藏,不再占用主场景上方空间。
|
||
- 2026-05-22 通过 `verify_ui_regressions.gd` 增加单行菜单布局断言,并用脚本检查、`verify_p0.gd`、Web 导出、`npm run smoke:godot:web` 和 smoke 截图 `docs/ui-baseline/smoke/01-main.png` 验证。
|
||
- 种植失败前台反馈已补齐:
|
||
- 对照旧版 `plantSeed()` 失败分支 `TipsUtils.showErrorCodeTips(status)` 和 `ServerCode[1009] = "当前等级不足"`,Godot 现在会把后端土地操作错误码转成可见 toast,不再只在控制台输出 warning。
|
||
- `FarmController` 的播种、收获、铲除、施肥、浇水/除虫/除草失败均复用同一错误提示;播种成功补回旧版“播种成功”提示。
|
||
- `verify_ui_regressions.gd` 增加种子背包物品点击回调断言和服务端 `1009` 文案断言,覆盖“点击种植没有反应”的交互链路。
|
||
- 狗窝宠物列表背景板已修复:
|
||
- 旧版 `DogListItemSkin.exml` 使用 `shop_itembg_png`,位置来自 `assets/common.json` 的 `Rect2(262,303,179,110)`,之前 Godot `TextureRegionCatalog` 没登记该区域,导致列表项取到默认 1x1 纹理并被九宫格拉伸成异常背景。
|
||
- 已补 `shop_itembg` 图集区域,继续按 EXML 的 `scale9Grid="90,57,4,2"` 渲染狗窝列表项。
|
||
- 2026-05-22 通过 `texture_region_catalog.gd`、`dog_panel.gd`、`verify_ui_regressions.gd` 脚本检查、`verify_ui_regressions.gd`、`verify_p0.gd`、Web 导出、`npm run smoke:godot:web` 和 Playwright 截图 `docs/ui-baseline/godot-dog-list-bg-fixed.png` 验证。
|
||
- 访问好友农场链路已接入:
|
||
- 对照旧版 `FriendItemRender.onTouchTap -> GO_OTHER_FARM -> interaction/get-other-user-info -> OPEN_OTHER_GAME`,好友榜家园/手指按钮现在会请求好友农场数据并切换到访客农场。
|
||
- 新增 `InteractionApi` 和 `FriendVisitController`,接入 `interaction/get-other-user-info` 和 `interaction/interaction`;好友土地动作按后端 `interaction_type_list` 映射偷菜、放虫、放草、浇水、除虫、除草。
|
||
- 访客模式隐藏自家 Home/World/左侧活动/顶部功能按钮和建筑扩建热区,只保留旧版 `btn_back_home_png` 回家按钮;返回后恢复自家玩家状态、土地、菜单和命中区。
|
||
- 2026-05-22 通过相关脚本 `--check-only`、`verify_p0.gd`、工程导入、Web 导出、`tools/verify_ui_regressions.gd`、`npm run smoke:godot:web` 和 Playwright 截图 `docs/ui-baseline/smoke/22-friend-panel.png`、`docs/ui-baseline/smoke/23-friend-visit.png`、`docs/ui-baseline/smoke/24-friend-back-home.png` 验证。
|
||
- 土地扩建金豆图标约束已修复:
|
||
- 原版 `LandOpenSkin.exml` 使用 `sicon_gold_png`,图集区域为 35x35;Godot 当前替换素材 `assets/replacement/ui/gold_bean.png` 为 500x500,之前 `TextureRect` 在入树后继承原图最小尺寸,导致扩建弹窗右下角出现超大金豆。
|
||
- `UiBuilder.add_texture()` 改为先设置 `EXPAND_IGNORE_SIZE` 和伸缩模式,再绑定纹理和显式尺寸;扩建弹窗 `GoldIcon` 明确使用 `STRETCH_KEEP_ASPECT_CENTERED`,保持原版 35x35 容器。
|
||
- 2026-05-22 通过 `ui_builder.gd`、`building_panel.gd`、`verify_ui_regressions.gd` 脚本检查、`tools/verify_ui_regressions.gd`、`verify_p0.gd`、Web 导出、`npm run smoke:godot:web` 和 Playwright 截图 `docs/ui-baseline/godot-land-open-gold-icon-fixed.png` 验证。
|
||
|
||
## 下一步
|
||
|
||
1. 继续压登录页像素差异,优先处理按钮文字和底部健康提示字体。
|
||
2. 对照 `egret-main-page.png` 继续压主农场:左侧入口层级、世界/家园入口、顶部 FNT 字体。
|
||
3. 继续收敛 `PlayerState/FarmState/InventoryState`,减少 UI 层直接改字典。
|
||
4. 继续补齐未开垦土地购买/开放细节,并把土地相关 UI 从 `game_scene.gd` 拆到独立模块。
|
||
5. 补齐好友搜索、好友申请和好友互动日志/赠送等二级链路。
|