23 KiB
23 KiB
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.jpglogin_bg.pnglogin_db.pnglogin_phone.pnglogin_pwd.pnglogin_jizhuPassword.pnglogin_regist.pnglogin_findpwd.pnglogin_goubg.pnglogin_gou.pngselect_db.pngselect_db1.pngcommon.png中c_btn1_pnghuakang.ttfhuakanghaibao.ttf
- 拷贝资源规格:
default.res.jsondefault.thm.jsonLoginSceneSkin.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.tscnscenes/ui/login_scene.tscn
- 添加第一版脚本:
scripts/bootstrap.gdscripts/services/api_client.gdscripts/core/egret_resource_catalog.gdscripts/core/number_formatter.gdscripts/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.pngdocs/ui-baseline/godot-login-page.pngdocs/ui-baseline/login-page-diff.pngdocs/ui-baseline/egret-login-canvas.pngdocs/ui-baseline/godot-login-canvas.pngdocs/ui-baseline/login-canvas-diff.png
- 当前截图对比结果:
- 页面截图:
11206 / 614400像素不同,差异率0.018239。 - 实际 canvas:
11206 / 460800像素不同,差异率0.024319。 - 差异主要集中在中文字体渲染、按钮文字和少量贴图边缘采样;因此登录页仍不能标记为 UI 完成。
- 页面截图:
- 输入框去除 Godot 默认黑色样式,改为白鹭输入框底图和
当前能力
- 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.pngdocs/ui-baseline/egret-main-canvas.pngdocs/ui-baseline/egret-main-meta.jsondocs/ui-baseline/godot-main-page.pngdocs/ui-baseline/godot-main-canvas.pngdocs/ui-baseline/godot-main-meta.json
- 已生成种菜流程截图:
docs/ui-baseline/egret-plant-menu.pngdocs/ui-baseline/egret-seed-bag.pngdocs/ui-baseline/egret-after-sow.pngdocs/ui-baseline/godot-plant-menu.pngdocs/ui-baseline/godot-seed-bag.pngdocs/ui-baseline/godot-after-sow.pngdocs/ui-baseline/godot-plant-flow-meta.jsondocs/ui-baseline/godot-auto-mature.pngdocs/ui-baseline/godot-auto-mature-menu.png
- 已生成土地操作流程截图:
docs/ui-baseline/godot-actions-main.pngdocs/ui-baseline/godot-countdown-longpress.pngdocs/ui-baseline/godot-actions-menu.pngdocs/ui-baseline/godot-after-bug-clean.pngdocs/ui-baseline/godot-after-grass-clean.pngdocs/ui-baseline/godot-fertilizer-bag.pngdocs/ui-baseline/godot-after-fertilize.pngdocs/ui-baseline/godot-ripe-menu.pngdocs/ui-baseline/godot-after-harvest.pngdocs/ui-baseline/godot-after-clear.pngdocs/ui-baseline/godot-land-actions-flow-meta.json
- 已生成家园菜单弹窗验证截图:
docs/ui-baseline/godot-shop-panel.pngdocs/ui-baseline/godot-warehouse-panel.pngdocs/ui-baseline/godot-friend-panel.png
- 已生成狗窝、房屋升级、土地扩建验证截图:
docs/ui-baseline/godot-dog-building-extend-main.pngdocs/ui-baseline/godot-building-upgrade-panel.pngdocs/ui-baseline/godot-dog-panel.pngdocs/ui-baseline/godot-dog-food-popup.pngdocs/ui-baseline/godot-land-extend-panel.pngdocs/ui-baseline/godot-dog-building-extend-meta.json
- 已生成宠物功能验证截图:
docs/ui-baseline/godot-pet-main.pngdocs/ui-baseline/godot-pet-panel.pngdocs/ui-baseline/godot-pet-doghouse-click.png
- 已生成统一面板背景验证截图:
docs/ui-baseline/godot-panel-background-home-menu.pngdocs/ui-baseline/godot-panel-background-shop.pngdocs/ui-baseline/godot-panel-background-warehouse.pngdocs/ui-baseline/godot-panel-background-friend.pngdocs/ui-baseline/godot-panel-background-pet.pngdocs/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 号地恢复为空地。
- 2026-05-11 参考 Godot
- 家园菜单弹窗链路已按旧客户端确认:
- 旧客户端
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,GodotNinePatchRect右/下边距应换算为 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),之前 GodotTextureRegionCatalog没登记该区域,导致列表项取到默认 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验证。
- 原版
下一步
- 继续压登录页像素差异,优先处理按钮文字和底部健康提示字体。
- 对照
egret-main-page.png继续压主农场:左侧入口层级、世界/家园入口、顶部 FNT 字体。 - 继续收敛
PlayerState/FarmState/InventoryState,减少 UI 层直接改字典。 - 继续补齐未开垦土地购买/开放细节,并把土地相关 UI 从
game_scene.gd拆到独立模块。 - 补齐好友搜索、好友申请和好友互动日志/赠送等二级链路。