geometry-tower-defense/docs/CodeX-TODO.md

226 lines
9.9 KiB
Markdown
Raw 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.

# CodeX TODO
最后更新2026-03-13
> 目标:把当前“随机组件产出 / 掉落 / 商店 / 3 选 1 奖励候选 / Tag 初始化入口”从分散实现收口成清晰模块。
> 原则:先收运行时入口,再收重复领域逻辑,最后收 UI 编排;不把纯规则层误做成 `GameFrameworkComponent`。
## 这次重构要解决的问题
- 商店、敌人掉落、满血 3 选 1 候选都在各自生成组件实例,逻辑分散,后续改规则要改多处。
- `ShopFormUseCase`、旧 `EnemyDropResolver`、`CombatSettlementService` 都曾同时承担“流程 + 规则 + 数据组装”的混合职责。
- `runSeed` 目前只稳定了 Tag 生成,没有稳定整个组件产出流程。
- Tag 模块本身已经分成 `Generation / Aggregation / Combat / Metadata / Presentation`,但初始化入口还散在流程代码里。
## 重构边界
### 适合抽成 `GameFrameworkComponent` 的模块
1. `InventoryGenerationComponent`
- 统一作为运行时“组件产出入口”。
- 对外提供:
- `BuildShopGoods(...)`
- `ResolveEnemyDrop(...)`
- `BuildRewardCandidates(...)`
- 统一持有并传递 `runSeed`、`sequenceIndex`、随机上下文。
2. `TagRegistryComponent`
- 统一作为 Tag 规则注册与重载入口。
- 负责刷新:
- `TagDefinitionRegistry`
- `TagGenerationRuleRegistry`
- `RarityTagBudgetRuleRegistry`
- 替代当前散在 `ProcedurePreload` 里的 Tag 注册表装载逻辑。
### 不适合抽成 `GameFrameworkComponent` 的模块
- `ComponentTagGenerationService`
- `TowerTagAggregationService`
- `TagEffectResolver`
- `NumericTagEffectHandler`
- `AttackShapeTagEffectHandler`
- `EnemyStatusTagRegistry`
这些都保留为普通领域模块,因为它们本质上是规则计算、数据聚合或战斗解析,不需要全局生命周期。
## 目标模块结构
### 组件层
- `Assets/GameMain/Scripts/CustomComponent/InventoryGeneration/InventoryGenerationComponent.cs`
- `Assets/GameMain/Scripts/CustomComponent/TagRegistry/TagRegistryComponent.cs`
### 领域模块层
- `Assets/GameMain/Scripts/Factory/ComponentItemFactory.cs`
- 唯一负责“从配置行构造 `TowerCompItemData`”。
- `Assets/GameMain/Scripts/CustomComponent/InventoryGeneration/ShopGoodsBuilder.cs`
- 只负责商店货物生成。
- `Assets/GameMain/Scripts/CustomComponent/InventoryGeneration/DropPoolRoller.cs`
- 只负责掉落池筛选、权重抽样、稀有度曲线。
- `Assets/GameMain/Scripts/CustomComponent/InventoryGeneration/RewardCandidateBuilder.cs`
- 只负责 3 选 1 奖励候选生成。
- `Assets/GameMain/Scripts/CustomComponent/CombatNode/CombatSettlementCalculator.cs`
- 只负责结算计算。
- `Assets/GameMain/Scripts/CustomComponent/CombatNode/CombatSettlementCommitter.cs`
- 只负责把结算结果提交到玩家库存。
## 现有职责迁移目标
### 商店链路
- `ShopNodeComponent`
- 保留“节点进入 / 退出 / 发事件 / 打开 UI”职责。
- `ShopFormUseCase`
- 删除组件随机生成职责。
- 保留“当前货物模型、购买行为、UI RawData 组装”职责。
- 商店货物来源统一改为 `GameEntry.InventoryGeneration.BuildShopGoods(...)`
### 战斗掉落链路
- `CombatScheduler`
- 不再直接持有复杂掉落生成细节。
- 只在敌人死亡时调用 `GameEntry.InventoryGeneration.ResolveEnemyDrop(...)`
-`EnemyDropResolver`
- 已从主链路移除,并已删除旧实现文件。
- 其职责已拆给:
- `DropPoolRoller`
- `ComponentItemFactory`
- `RewardCandidateBuilder`
### 战斗结算链路
- `CombatSettlementService`
- 从混合类拆成薄流程壳。
- 保留最少流程编排。
- 计算逻辑迁到 `CombatSettlementCalculator`
- 库存提交逻辑迁到 `CombatSettlementCommitter`
- 奖励候选生成改为调用 `GameEntry.InventoryGeneration.BuildRewardCandidates(...)`
### Tag 初始化链路
- `ProcedurePreload`
- 移除 Tag 注册表刷新细节。
- 只保留“数据表加载完成后通知组件刷新”。
- `TagRegistryComponent`
- 成为 Tag 相关表与注册表的唯一运行时入口。
## 分阶段执行
## 阶段 G1 - 收口组件产出入口
| 状态 | ID | 任务 | 目标 |
|-----|-------|-----------------------------------|------------|
| [x] | G1-01 | 新增 `InventoryGenerationComponent` | 建立统一组件产出入口 |
| [x] | G1-02 | 新增 `ComponentItemFactory` | 收口组件实例构造 |
| [x] | G1-03 | 新增 `ShopGoodsBuilder` | 收口商店货物生成 |
| [x] | G1-04 | 让 `ShopFormUseCase` 改用组件入口 | 商店不再自己生成组件 |
### G1 验收标准
- 商店仍可正常打开、购买、加背包。
- 商店不再直接读取组件表并构造 `Muzzle/Bearing/Base` 实例。
- 商店所有组件实例都通过同一工厂生成。
## 阶段 G2 - 收口战斗掉落与奖励候选
| 状态 | ID | 任务 | 目标 |
|-----|-------|----------------------------------------|---------------|
| [x] | G2-01 | 新增 `DropPoolRoller` | 收口掉落池与稀有度抽样 |
| [x] | G2-02 | 新增 `RewardCandidateBuilder` | 收口 3 选 1 候选生成 |
| [x] | G2-03 | 让战斗掉落改走 `InventoryGenerationComponent` | 战斗不再自己构造组件 |
| [x] | G2-04 | 让满血奖励候选改走统一入口 | 掉落与奖励候选共用产出体系 |
### G2 验收标准
- 敌人死亡后仍能正常掉 coin、gold、组件。
- 满血奖励 3 选 1 仍能正常打开并选择。
- 掉落与奖励候选不再重复维护组件实例构造逻辑。
- `CombatScheduler``CombatSettlementService` 已改为统一调用 `GameEntry.InventoryGeneration`
## 阶段 G3 - 收口结算模块边界
| 状态 | ID | 任务 | 目标 |
|-----|-------|---------------------------------|-----------------|
| [x] | G3-01 | 新增 `CombatSettlementCalculator` | 只保留结算计算 |
| [x] | G3-02 | 新增 `CombatSettlementCommitter` | 只保留库存提交 |
| [x] | G3-03 | 精简 `CombatSettlementService` | 只剩流程编排 |
| [x] | G3-04 | 清理奖励 RawData 重复映射 | 候选生成与 UI 组装边界清晰 |
### G3 验收标准
- 战斗结算金币、奖励库存、耐久扣减结果保持不变。
- 满血奖励选择后仍能正确并包。
- `CombatSettlementService` 不再同时承担计算、提交、候选生成三类职责。
## 阶段 G4 - 收口 Tag 初始化入口
| 状态 | ID | 任务 | 目标 |
|-----|-------|----------------------------------|--------------------|
| [ ] | G4-01 | 新增 `TagRegistryComponent` | 建立 Tag 运行时入口 |
| [ ] | G4-02 | 挪出 `ProcedurePreload` 中 Tag 注册逻辑 | 流程代码不再直接维护 Tag 注册表 |
| [ ] | G4-03 | 对齐 Tag 加载时机与重载入口 | 初始化路径明确 |
### G4 验收标准
- `Tag.txt`、`TagConfig.txt`、`RarityTagBudget.txt` 加载后仍能正确刷新运行时。
- Tag 展示、Tag 生成、Tag 战斗效果不受影响。
- Tag 相关运行时入口不再散落在预加载流程里。
## 阶段 G5 - 收口随机合同
| 状态 | ID | 任务 | 目标 |
|-----|-------|------------------------|---------------------|
| [ ] | G5-01 | 统一商店 / 掉落 / 奖励候选的随机上下文 | 全部产出链路使用一致合同 |
| [ ] | G5-02 | 补齐整体产出的 `runSeed` 稳定性 | 不只稳定 Tag也稳定物品产出 |
| [ ] | G5-03 | 增加对应 EditMode 测试 | 同 Run 可复现,跨 Run 可区分 |
### G5 验收标准
- 同一 `runSeed + sequenceIndex` 下,商店货物、掉落候选、奖励候选可复现。
- 不同 `runSeed` 下,产出结果可区分。
- 不再出现“Tag 稳定但物品本体不稳定”的混合口径。
## 具体迁移清单
### 第一批直接改动文件
- `Assets/GameMain/Scripts/UI/Shop/UseCase/ShopFormUseCase.cs`
- `Assets/GameMain/Scripts/CustomComponent/CombatNode/CombatScheduler/CombatSettlementService.cs`
- `Assets/GameMain/Scripts/Procedure/Base/ProcedurePreload.cs`
- `Assets/GameMain/Scripts/Base/GameEntry.Custom.cs`
- `Assets/GameMain/Scripts/CustomComponent/CombatNode/CombatScheduler/CombatScheduler.cs`
### 第二批新增文件
- `Assets/GameMain/Scripts/CustomComponent/InventoryGeneration/InventoryGenerationComponent.cs`
- `Assets/GameMain/Scripts/CustomComponent/TagRegistry/TagRegistryComponent.cs`
- `Assets/GameMain/Scripts/Factory/ComponentItemFactory.cs`
- `Assets/GameMain/Scripts/CustomComponent/InventoryGeneration/ShopGoodsBuilder.cs`
- `Assets/GameMain/Scripts/CustomComponent/InventoryGeneration/DropPoolRoller.cs`
- `Assets/GameMain/Scripts/CustomComponent/InventoryGeneration/RewardCandidateBuilder.cs`
- `Assets/GameMain/Scripts/CustomComponent/CombatNode/CombatSettlementCalculator.cs`
- `Assets/GameMain/Scripts/CustomComponent/CombatNode/CombatSettlementCommitter.cs`
## 本次重构的限制
- 不在这一轮扩展新的 Tag 功能。
- 不在这一轮扩展新的商店玩法或新的奖励 UI 形态。
- 不为了“统一”而把所有领域逻辑都塞进 `GameFrameworkComponent`
- 不改动现有 UI 五层结构以外的职责边界。
## 当前推荐执行顺序
1. 先做 `InventoryGenerationComponent + ComponentItemFactory`
2. 先替换商店货物生成。
3. 再替换战斗掉落与奖励候选生成。
4. 再拆战斗结算计算与提交。
5. 最后收 `TagRegistryComponent``ProcedurePreload` 的 Tag 初始化入口。
## 通过标准
- 组件实例生成入口只保留一套。
- 掉落、商店、奖励候选不再各自维护相似逻辑。
- Tag 模块保留现有分层,不再继续和流程代码缠在一起。
- `GameFrameworkComponent` 只承接运行时入口,不承接纯规则实现。