hy-farm/README.md
2026-05-29 19:54:56 +08:00

232 lines
7.7 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Farm3 Godot H5 重构
这是一个把原 Egret H5 农场游戏重构到 Godot 4.6.2 的项目。目标是保留原版 UI、动效、后端协议和核心玩法同时把旧的大脚本拆成可维护、高性能的模块化结构。
## 当前状态
- Godot 工程可以自动登录并进入农场主场景。
- 默认账号:`13800000001 / 123456`
- 主农场基础闭环已接入:播种、收获、铲除、施肥、浇水、除草、除虫、倒计时、成熟点击。
- 主场景入口已接入:商店、仓库、好友、日志、土地升级、充值、等级礼包、幸运转盘、宝箱、福利大厅、系统公告、每日签到、在线礼包、兑换金币、世界菜单、宠物显示。
- 土地场景支持双指和滚轮缩放UI 层不跟随缩放。
- P0 架构拆分已完成,`game_scene.gd` 已降到 1200 行以内。
- UI 基准截图和 smoke 截图保存在 `docs/ui-baseline/`
## 目录结构
```text
.
├── AGENTS.md # 本项目代理开发规范
├── README.md # 项目说明
├── docs/ # 架构、迁移、优先级和 UI 基准文档
├── godot/FarmGodot/ # Godot 4.6.2 工程
│ ├── assets/egret/ # 从原 Egret H5 迁移的资源
│ ├── build/web/ # Web 导出产物
│ ├── scenes/ # Godot 场景
│ ├── scripts/ # GDScript 代码
│ └── tools/ # Godot 侧验证脚本
├── muchang/ # 原 H5、PHP/Yii 后端和运行参考
├── muchang_20211111_141209.sql # 原数据库备份
├── package.json # Web smoke 和 UI diff 工具命令
└── tools/ # Node/Playwright 验证工具
```
## 技术栈
- Godot `4.6.2.stable.official.71f334935`
- GDScript
- Godot Web/H5 导出
- Compatibility 渲染
- Egret 原始图集、EXML、配置和后端协议
- Node.js + Playwright smoke
确认 Godot 版本:
```sh
godot --version
```
## 后端配置
后端地址在:
```text
godot/FarmGodot/project.godot
```
当前默认值:
```text
farm_game/api/base_url="http://127.0.0.1:18082/index.php?r="
farm_game/api/login_path="user/login"
```
自动登录账号在:
```text
godot/FarmGodot/scripts/bootstrap.gd
```
```gdscript
const AUTO_USERNAME := "13800000001"
const AUTO_PASSWORD := "123456"
```
## 运行工程
从仓库根目录运行 Godot
```sh
godot --path godot/FarmGodot
```
无界面导入检查:
```sh
godot --headless --path godot/FarmGodot --import --quit
```
## 导出 H5
从仓库根目录运行:
```sh
godot --headless --path godot/FarmGodot --export-release Web build/web/index.html
```
导出产物:
```text
godot/FarmGodot/build/web/
```
启动本地预览:
```sh
python3 -m http.server 8792 --directory godot/FarmGodot/build/web
```
浏览器打开:
```text
http://127.0.0.1:8792/index.html
```
## 验证命令
安装 Node 依赖:
```sh
npm install
npx playwright install chromium
```
检查关键脚本:
```sh
godot --headless --path godot/FarmGodot --check-only --script res://scripts/ui/game_scene.gd
godot --headless --path godot/FarmGodot --check-only --script res://scripts/ui/game_scene_bootstrap.gd
godot --headless --path godot/FarmGodot --check-only --script res://scripts/ui/game_scene_runtime_assembler.gd
godot --headless --path godot/FarmGodot --check-only --script res://scripts/ui/game_scene_panel_router.gd
godot --headless --path godot/FarmGodot --check-only --script res://scripts/ui/common/ui_builder.gd
```
检查 P0 规则和配置:
```sh
godot --headless --path godot/FarmGodot --script res://tools/verify_p0.gd
```
导出后跑 H5 smoke
```sh
npm run smoke:godot:web
```
UI 图片对比:
```sh
npm run compare:ui -- <egret.png> <godot.png> <diff.png>
```
## 当前架构
```text
godot/FarmGodot/scripts/
├── bootstrap.gd # 自动登录、加载主场景
├── core/ # 配置目录、数字格式、位图文字
├── domain/
│ ├── mappers/ # 后端数据归一化
│ └── rules/ # 作物阶段、土地动作、消耗判断
├── farm/ # 农场操作控制器
├── resources/ # 图集区域和 AtlasTexture 缓存
├── services/ # 后端 API 服务
├── state/ # 玩家、农场、库存状态和 Facade
└── ui/
├── common/ # UiBuilder、TextureProvider、Modal、动效
├── farm/ # 土地网格、动作菜单、背包、种植提示、缩放
├── hud/ # 顶部 HUD
├── menus/ # 主菜单、世界菜单
├── panels/ # 各功能面板
├── game_scene.gd # 主场景协调层
├── game_scene_context.gd # 跨模块上下文和 legacy callback 兼容层
├── game_scene_bootstrap.gd # 服务/状态/面板装配
├── game_scene_runtime_assembler.gd
├── game_scene_panel_router.gd
└── scene_hit_router.gd
```
核心职责:
- `GameScene`:只保留生命周期、节点引用、土地快照渲染和少量上下文桥接。
- `GameSceneContext`:统一提供玩家状态、资源纹理、面板路由和旧面板 callback 兼容入口。
- `GameSceneBootstrap`:创建 API、状态、规则、资源、控制器和面板。
- `GameSceneRuntimeAssembler`:装配运行时 UI 和土地交互组件。
- `GameScenePanelRouter`:统一打开/关闭面板和弹窗入口。
- `SceneHitRouter`:管理主场景点击热区。
- `FarmInteractionCoordinator`:管理土地选择、长按、背包、菜单和作物提示。
- `PlayerInventoryFacade`:统一奖励、消耗、仓库刷新和货币变更。
- `PlayerState`:玩家快照唯一权威来源,收敛 token、等级、房屋、皮肤和土地列表等字段访问。
## 开发原则
- 先查原 H5 行为、资源 JSON、EXML、JS/PHP 逻辑,再写 Godot 实现。
- UI 必须对齐原版,优先使用 Egret 原素材。
- 网络请求必须走 `ApiClient``scripts/services/*_api.gd`
- 状态变化优先走 `scripts/state/` 和 Facade再刷新 UI。
- 新面板放到 `scripts/ui/panels/`,不要堆到 `game_scene.gd`
- 图集纹理优先走 `TextureProvider``TextureRegionCatalog``AtlasTextureCache`
- 每次修改必须按影响面验证。
## 关键文档
- `docs/godot-architecture-flow.md`:整体模块化架构流程。
- `docs/godot-architecture-refactor-progress.md`:架构拆分进度。
- `docs/godot-refactor-status-priority.md`P0/P1/P2 功能缺口和优先级。
- `docs/godot-development-standards.md`Godot 开发规范和验证规则。
- `docs/godot-migration-rebuild.md`Godot 重构方案。
- `docs/godot-migration-progress.md`:迁移进度。
- `docs/ui-baseline/README.md`UI 基准截图说明。
## 当前主要缺口
P0 已完成。下一阶段主要是 P1
- 好友搜索、申请、访问好友农场和好友互动。
- 世界玩法完整化:成就、竞技场、游乐园、战宠对战。
- 换肤/背景完整流程。
- 玩家信息面板。
- 活动面板逐页像素级对齐。
- 音频、FNT、全部原版动画和批量 EXML 辅助转换。
## 最近验证产物
```text
docs/ui-baseline/smoke/
docs/ui-baseline/godot-architecture-refactor-main.png
docs/ui-baseline/godot-architecture-refactor-land-menu.png
docs/ui-baseline/godot-architecture-refactor-land-menu-closed.png
docs/ui-baseline/godot-architecture-refactor-main-menu.png
docs/ui-baseline/godot-architecture-refactor-meta.json
```