G3 finish

This commit is contained in:
SepComet
2026-03-13 09:46:59 +08:00
parent 53b6b261dd
commit 26aaa945a9
8 changed files with 344 additions and 240 deletions
+30 -29
View File
@@ -1,6 +1,6 @@
# CodeX TODO
最后更新:2026-03-12
最后更新:2026-03-13
> 目标:把当前“随机组件产出 / 掉落 / 商店 / 3 选 1 奖励候选 / Tag 初始化入口”从分散实现收口成清晰模块。
> 原则:先收运行时入口,再收重复领域逻辑,最后收 UI 编排;不把纯规则层误做成 `GameFrameworkComponent`。
@@ -8,7 +8,7 @@
## 这次重构要解决的问题
- 商店、敌人掉落、满血 3 选 1 候选都在各自生成组件实例,逻辑分散,后续改规则要改多处。
- `ShopFormUseCase`、`EnemyDropResolver`、`CombatSettlementService` 都同时承担了“流程 + 规则 + 数据组装”的混合职责。
- `ShopFormUseCase`、旧 `EnemyDropResolver`、`CombatSettlementService` 都曾同时承担“流程 + 规则 + 数据组装”的混合职责。
- `runSeed` 目前只稳定了 Tag 生成,没有稳定整个组件产出流程。
- Tag 模块本身已经分成 `Generation / Aggregation / Combat / Metadata / Presentation`,但初始化入口还散在流程代码里。
@@ -47,22 +47,22 @@
### 组件层
- `Assets/GameMain/Scripts/CustomComponent/InventoryGenerationComponent.cs`
- `Assets/GameMain/Scripts/CustomComponent/TagRegistryComponent.cs`
- `Assets/GameMain/Scripts/CustomComponent/InventoryGeneration/InventoryGenerationComponent.cs`
- `Assets/GameMain/Scripts/CustomComponent/TagRegistry/TagRegistryComponent.cs`
### 领域模块层
- `Assets/GameMain/Scripts/Definition/InventoryGeneration/ComponentItemFactory.cs`
- `Assets/GameMain/Scripts/Factory/ComponentItemFactory.cs`
- 唯一负责“从配置行构造 `TowerCompItemData`”。
- `Assets/GameMain/Scripts/Definition/InventoryGeneration/ShopGoodsBuilder.cs`
- `Assets/GameMain/Scripts/CustomComponent/InventoryGeneration/ShopGoodsBuilder.cs`
- 只负责商店货物生成。
- `Assets/GameMain/Scripts/Definition/InventoryGeneration/DropPoolRoller.cs`
- `Assets/GameMain/Scripts/CustomComponent/InventoryGeneration/DropPoolRoller.cs`
- 只负责掉落池筛选、权重抽样、稀有度曲线。
- `Assets/GameMain/Scripts/Definition/InventoryGeneration/RewardCandidateBuilder.cs`
- `Assets/GameMain/Scripts/CustomComponent/InventoryGeneration/RewardCandidateBuilder.cs`
- 只负责 3 选 1 奖励候选生成。
- `Assets/GameMain/Scripts/Definition/Combat/Settlement/CombatSettlementCalculator.cs`
- `Assets/GameMain/Scripts/CustomComponent/CombatNode/CombatSettlementCalculator.cs`
- 只负责结算计算。
- `Assets/GameMain/Scripts/Definition/Combat/Settlement/CombatSettlementCommitter.cs`
- `Assets/GameMain/Scripts/CustomComponent/CombatNode/CombatSettlementCommitter.cs`
- 只负责把结算结果提交到玩家库存。
## 现有职责迁移目标
@@ -81,9 +81,9 @@
- `CombatScheduler`
- 不再直接持有复杂掉落生成细节。
- 只在敌人死亡时调用 `GameEntry.InventoryGeneration.ResolveEnemyDrop(...)`。
- `EnemyDropResolver`
- 逐步被拆空或移除。
- 其内部职责拆给:
- 旧 `EnemyDropResolver`
- 已从主链路移除,并已删除旧实现文件。
- 其职责已拆给:
- `DropPoolRoller`
- `ComponentItemFactory`
- `RewardCandidateBuilder`
@@ -126,25 +126,26 @@
| 状态 | ID | 任务 | 目标 |
|-----|-------|----------------------------------------|---------------|
| [ ] | G2-01 | 新增 `DropPoolRoller` | 收口掉落池与稀有度抽样 |
| [ ] | G2-02 | 新增 `RewardCandidateBuilder` | 收口 3 选 1 候选生成 |
| [ ] | G2-03 | 让战斗掉落改走 `InventoryGenerationComponent` | 战斗不再自己构造组件 |
| [ ] | G2-04 | 让满血奖励候选改走统一入口 | 掉落与奖励候选共用产出体系 |
| [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 | 任务 | 目标 |
|-----|-------|---------------------------------|-----------------|
| [ ] | G3-01 | 新增 `CombatSettlementCalculator` | 只保留结算计算 |
| [ ] | G3-02 | 新增 `CombatSettlementCommitter` | 只保留库存提交 |
| [ ] | G3-03 | 精简 `CombatSettlementService` | 只剩流程编排 |
| [ ] | G3-04 | 清理奖励 RawData 重复映射 | 候选生成与 UI 组装边界清晰 |
| [x] | G3-01 | 新增 `CombatSettlementCalculator` | 只保留结算计算 |
| [x] | G3-02 | 新增 `CombatSettlementCommitter` | 只保留库存提交 |
| [x] | G3-03 | 精简 `CombatSettlementService` | 只剩流程编排 |
| [x] | G3-04 | 清理奖励 RawData 重复映射 | 候选生成与 UI 组装边界清晰 |
### G3 验收标准
@@ -185,21 +186,21 @@
### 第一批直接改动文件
- `Assets/GameMain/Scripts/UI/Shop/UseCase/ShopFormUseCase.cs`
- `Assets/GameMain/Scripts/CustomComponent/CombatNode/CombatScheduler/EnemyDrop/EnemyDropResolver.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/InventoryGenerationComponent.cs`
- `Assets/GameMain/Scripts/CustomComponent/TagRegistryComponent.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/ShopGoodsBuilder.cs`
- `Assets/GameMain/Scripts/CustomComponent/DropPoolRoller.cs`
- `Assets/GameMain/Scripts/CustomComponent/RewardCandidateBuilder.cs`
- `Assets/GameMain/Scripts/Definition/Combat/Settlement/CombatSettlementCalculator.cs`
- `Assets/GameMain/Scripts/Definition/Combat/Settlement/CombatSettlementCommitter.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`
## 本次重构的限制
+27 -1
View File
@@ -219,6 +219,7 @@
- `Manager`:只用于子域 Facade/聚合入口,例如 `EnemyManager`。
- `Coordinator`:只用于跨状态、跨服务的流程编排,不持有独立业务真值。
- `Service`:只用于聚焦业务行为,不承担框架事件桥接或异步句柄跟踪。
- `Calculator`:只用于纯计算与结果组装,不直接提交状态或驱动 UI。
- `Session`:只用于一次加载/交互过程的生命周期对象。
- `Bridge`:只用于框架边界适配器。
- `Runtime`:只用于运行时可变状态承载。
@@ -316,7 +317,32 @@
- `CombatScheduler` 与结算状态链只调用统一入口,不直接访问掉落池滚动或组件实例构造细节。
- `InventoryGenerationComponent` 负责组件实例生成、Tag 随机上下文以及 `runSeed/sequenceIndex` 相关上下文。
### 4.6 IPhaseEndCondition
### 4.6 CombatSettlementCalculator
文件:`Assets/GameMain/Scripts/CustomComponent/CombatNode/CombatSettlementCalculator.cs`
目标职责:
- 只负责结算计算与 `CombatSettlementContext` 组装。
- 负责基地血量奖励、奖励选择准入、奖励背包快照与耐久扣减目标计算。
约束:
- 不直接并包到玩家库存。
- 不直接打开 UI。
- 不承担奖励候选生成。
### 4.7 CombatSettlementCommitter
文件:`Assets/GameMain/Scripts/CustomComponent/CombatNode/CombatSettlementCommitter.cs`
目标职责:
- 只负责把结算结果提交到玩家库存。
- 负责结算背包并包与延迟耐久扣减落地。
约束:
- 不重新计算结算上下文。
- 不直接生成奖励候选或打开 UI。
### 4.8 IPhaseEndCondition
目标职责:
- 作为 `PhaseEndType` 判定接口。