# Cocos3.x 项目开发规划

## 项目概述
本项目是一个 Cocos Creator 3.x 的 3D Roguelike 游戏项目,需要实现网络通信、状态机管理和应用状态流转等核心功能。

## 📐 开发规范

### 代码组织规范
1. **模块 README.md**: 每个功能模块目录下创建 README.md 文档,详细说明模块的使用方法
2. **不创建 index.ts**: 不需要为每个模块创建统一导出的 index.ts 文件,直接导入具体文件
3. **按需导入**: 使用时直接从具体文件导入,例如:
   ```typescript
   import { NetManager } from './Framework/Net/NetManager';
   import { NetConfig } from './Framework/Net/NetConfig';
   ```
4. **文档分层管理**: 
   - 项目级文档放在 `.github/instructions` 目录
   - 模块级文档放在模块目录的 README.md
5. **模块归属规范**: 
   - **Framework/** 目录用于存放通用框架和工具类(FSM、Net、ResMgr、UI基类等)
   - **App/** 目录用于存放应用层业务模块(AppStatus、Login、Game等)
   - **业务UI组件必须归属到 App/ 对应的业务模块下**,例如:
     - 登录UI: `App/Login/UILogin.ts`
     - 游戏UI: `App/Game/UIGame.ts`

### 文件命名规范
- 使用 PascalCase 命名 TypeScript 类文件: `NetManager.ts`, `AppStatusBoot.ts`
- 配置/常量文件也使用 PascalCase: `NetConfig.ts`, `NetEvent.ts`
- 一个文件一个主要类,文件名与类名保持一致

---

## 📊 项目进度总览

**最后更新**: 2025-12-14 (Game 模块已完成)

| 模块 | 进度 | 状态 | 文档 |
|------|------|------|------|
| Framework/FSM | 100% | ✅ 已完成 | [查看文档](../../assets/scripts/Framework/FSM/README.md) |
| Framework/Net | 100% | ✅ 已完成 | [查看文档](../../assets/scripts/Framework/Net/README.md) |
| Framework/ResMgr | 100% | ✅ 已完成 | [查看文档](../../assets/scripts/Framework/ResMgr/README.md) |
| Framework/UI | 100% | ✅ 已完成 | [查看文档](../../assets/scripts/Framework/UI/README.md) |
| App/AppStatus | 100% | ✅ 已完成 | [查看文档](../../assets/scripts/App/AppStatus/README.md) |
| App/Login | 100% | ✅ 已完成 | [查看文档](../../assets/scripts/App/Login/README.md) |
| App/Game | 100% | ✅ 已完成 | [查看文档](../../assets/scripts/App/Game/README.md) |
| Boot启动组件 | 100% | ✅ 已完成 | - |

**图例**: ⬜ 未开始 | 🟡 进行中 | ✅ 已完成 | ⏸️ 已暂停

---

## 一、目录结构规划

```
assets/scripts/
├── Framework/           # 框架和通用工具类目录
│   ├── FSM/            # 状态机模块 ✅
│   │   ├── IState.ts
│   │   ├── BaseState.ts
│   │   ├── FSM.ts
│   │   └── README.md   # 详细文档
│   ├── Net/            # 网络通信模块 ✅
│   │   ├── NetManager.ts
│   │   ├── PlatformAdapter.ts
│   │   ├── NetConfig.ts
│   │   ├── NetEvent.ts
│   │   └── README.md   # 详细文档
│   ├── ResMgr/         # 资源管理模块 ✅
│   │   ├── ResMgr.ts
│   │   ├── ResConfig.ts
│   │   └── README.md   # 详细文档
│   └── UI/             # UI基类和管理器 ✅
│       ├── UIBase.ts
│       ├── UIMgr.ts
│       └── README.md   # 详细文档
├── App/                # 应用层代码(业务模块)
│   ├── AppStatus/      # 应用状态机 ✅
│   │   ├── AppStatusManager.ts
│   │   ├── AppStatusBoot.ts
│   │   ├── AppStatusLogin.ts
│   │   ├── AppStatusGame.ts
│   │   └── README.md   # 详细文档
│   ├── Login/          # 登录模块 ✅
│   │   ├── UILogin.ts
│   │   └── README.md   # 详细文档
│   └── Game/           # 游戏模块 (待开发)
│       └── ...
└── Boot/               # 启动组件 ✅
    └── Boot.ts
```

---

## 二、模块概览

### Framework 模块(框架层)

#### 2.1 状态机模块 (FSM) ✅
- **职责**: 通用的有限状态机框架
- **核心类**: IState, BaseState, FSM
- **详细文档**: [Framework/FSM/README.md](../../assets/scripts/Framework/FSM/README.md)

#### 2.2 网络通信模块 (Net) ✅
- **职责**: 基于 TSRPC 的网络通信层,支持多平台
- **核心类**: NetManager, PlatformAdapter, NetConfig, NetEvent
- **详细文档**: [Framework/Net/README.md](../../assets/scripts/Framework/Net/README.md)

#### 2.3 资源管理模块 (ResMgr) ✅
- **职责**: 统一的资源加载管理器
- **核心类**: ResMgr, ResConfig
- **详细文档**: [Framework/ResMgr/README.md](../../assets/scripts/Framework/ResMgr/README.md)

#### 2.4 UI 系统 (UI) ✅
- **职责**: UI 管理系统,管理 UI 生命周期
- **核心类**: UIBase, UIMgr
- **详细文档**: [Framework/UI/README.md](../../assets/scripts/Framework/UI/README.md)

### App 模块(应用层)

#### 2.5 应用状态机 (AppStatus) ✅
- **职责**: 管理应用的整体状态流转
- **核心类**: AppStatusManager, AppStatusBoot, AppStatusLogin, AppStatusGame
- **状态流转**: Boot → Login → Game
- **详细文档**: [App/AppStatus/README.md](../../assets/scripts/App/AppStatus/README.md)

#### 2.6 登录模块 (Login) ✅
- **职责**: 用户登录功能,包括登录界面和业务逻辑
- **核心类**: UILogin
- **详细文档**: [App/Login/README.md](../../assets/scripts/App/Login/README.md)

### 启动组件

#### 2.7 Boot 启动组件 ✅
- **职责**: 应用入口点,挂载到场景节点上启动应用
- **文件**: `Boot/Boot.ts`
- **使用**: 挂载到 main.scene 的 Boot 节点上

---

## 三、快速开始

### 3.1 启动应用

1. 在 Cocos Creator 中打开 `main.scene`
2. 创建一个空节点,命名为 "Boot"
3. 将 `Boot.ts` 脚本挂载到 Boot 节点上
4. 运行游戏,应用将自动启动

### 3.2 状态流转

```
启动游戏
    ↓
Boot 组件 start()
    ↓
AppStatusManager.start()
    ↓
Boot 状态(初始化网络并连接服务器)
    ↓
Login 状态(显示登录界面)
    ↓
用户登录
    ↓
Game 状态(进入游戏世界)
```

### 3.3 核心使用示例

#### 网络通信

```typescript
import { NetManager } from './Framework/Net/NetManager';
import { serviceProto } from '../Shared/protocols/serviceProto';

const netManager = NetManager.getInstance();
netManager.setServiceProto(serviceProto);
netManager.init({ serverUrl: 'http://localhost:3000' });
await netManager.connect();

// 调用 API
const result = await netManager.callApi('Login', { account: 'player123' });
```

#### 资源加载

```typescript
import { ResMgr } from './Framework/ResMgr/ResMgr';
import { Prefab } from 'cc';

const prefab = await ResMgr.getInstance().load('resources', 'prefabs/Player', Prefab);
```

#### UI 管理

```typescript
import { UIMgr } from './Framework/UI/UIMgr';
import { UILogin } from './App/Login/UILogin';

await UIMgr.getInstance().load(UILogin);
```

---

## 四、开发指南

### 4.1 创建新模块

1. 在对应目录下创建模块文件
2. 创建 README.md 文档
3. 在 development-plan.md 中更新进度

### 4.2 创建新的业务 UI

1. 在 `App/` 下创建业务模块目录(如 `App/Game/`)
2. 创建 UI 类继承 `UIBase`
3. 实现 `onGetUrl()` 方法
4. 在 Cocos Creator 中创建对应的预制体

### 4.3 添加新的应用状态

1. 在 `App/AppStatus/` 创建新状态类,继承 `BaseState`
2. 在 `AppStatusManager` 中注册新状态
3. 更新状态流转逻辑

---

## 五、协议同步

### 5.1 同步服务端协议

```bash
npm run sync-shared
```

### 5.2 使用协议

```typescript
import { serviceProto } from '../Shared/protocols/serviceProto';
import { ReqLogin, ResLogin } from '../Shared/protocols/PtlLogin';

netManager.setServiceProto(serviceProto);
const result = await netManager.callApi<ReqLogin, ResLogin>('Login', { ... });
```

---

## 六、下一步开发计划

### 6.1 游戏逻辑模块 (优先级: 高) ✅ 已完成
- [x] 创建 App/Game 目录
- [x] 实现角色控制器 (PlayerController)
- [x] 实现角色移动 (WASD 控制)
- [x] 实现其他玩家显示和同步 (RemotePlayer)
- [x] 实现世界管理器 (World)
- [ ] 实现聊天系统 UI

### 6.2 游戏机制 (优先级: 中)
- [ ] 敌人 AI 系统
- [ ] 战斗系统
- [ ] 地图生成(Roguelike)
- [ ] 物品和装备系统

### 6.3 优化和完善 (优先级: 低)
- [ ] 性能优化
- [ ] 资源预加载
- [ ] 音效和音乐
- [ ] 粒子特效

---

## 七、注意事项

1. **模块文档**: 每个模块的详细使用说明请查看对应的 README.md
2. **协议同步**: 开发前确保运行 `npm run sync-shared` 同步最新协议
3. **资源路径**: UI 资源路径与代码中的 `onGetUrl()` 返回值保持一致
4. **状态切换**: 使用 `AppStatusManager` 统一管理所有状态切换
5. **错误处理**: 网络请求和资源加载都要做好错误处理

---

## 八、变更日志

### 2025-12-14
- ✅ 完成文档重构,将详细文档迁移到模块目录
- ✅ 更新代码组织规范,允许模块目录创建 README.md
- ✅ 创建 Framework 各模块的 README.md
- ✅ 创建 App 各模块的 README.md
- ✅ 精简 development-plan.md,保留概览和索引
- ✅ 完成 Game 模块开发
  - ✅ 实现 World 世界管理器
  - ✅ 实现 PlayerController 本地玩家控制器
  - ✅ 实现 RemotePlayer 远程玩家同步
  - ✅ 实现 UIGame 游戏主界面
  - ✅ 更新 AppStatusGame 状态
  - ✅ 接入网络协议 (MsgPlayerJoin, MsgPlayerMove, PtlMove)
  - ✅ 创建 Game 模块文档
