InventoryGenerationComponent G2

This commit is contained in:
SepComet
2026-03-12 17:34:00 +08:00
parent f67888a8da
commit 53b6b261dd
14 changed files with 504 additions and 527 deletions
+4 -4
View File
@@ -111,10 +111,10 @@
| 状态 | ID | 任务 | 目标 |
|-----|-------|-----------------------------------|------------|
| [ ] | G1-01 | 新增 `InventoryGenerationComponent` | 建立统一组件产出入口 |
| [ ] | G1-02 | 新增 `ComponentItemFactory` | 收口组件实例构造 |
| [ ] | G1-03 | 新增 `ShopGoodsBuilder` | 收口商店货物生成 |
| [ ] | G1-04 | 让 `ShopFormUseCase` 改用组件入口 | 商店不再自己生成组件 |
| [x] | G1-01 | 新增 `InventoryGenerationComponent` | 建立统一组件产出入口 |
| [x] | G1-02 | 新增 `ComponentItemFactory` | 收口组件实例构造 |
| [x] | G1-03 | 新增 `ShopGoodsBuilder` | 收口商店货物生成 |
| [x] | G1-04 | 让 `ShopFormUseCase` 改用组件入口 | 商店不再自己生成组件 |
### G1 验收标准
+22 -15
View File
@@ -1,6 +1,6 @@
# CombatNode 设计规范(开发约束)
最后更新:2026-03-06
最后更新:2026-03-12
## 1. 适用范围与目标
@@ -296,22 +296,25 @@
- `Coin / BaseHp` 变化事件同时携带“当前值”和“变化量”。
- `Gold` 只是结算累计值,不要求战斗内实时事件驱动。
### 4.5 EnemyDropResolver
### 4.5 InventoryGenerationComponent
文件:`Assets/GameMain/Scripts/CustomComponent/CombatNode/CombatScheduler/EnemyDrop/EnemyDropResolver.cs`
文件:`Assets/GameMain/Scripts/CustomComponent/InventoryGeneration/InventoryGenerationComponent.cs`
目标职责:
- 只负责敌人死亡后的掉落判定。
- 输入:
- `DREnemy`
- 当前阶段索引
- 当前主题或关卡上下文
- 输出:
- 掉落结果对象(`coin / gold / loot`)
- 作为局外组件产出的统一运行时入口。
- 对外提供:
- `BuildShopGoods(...)`
- `ResolveEnemyDrop(...)`
- `BuildRewardCandidates(...)`
- 在内部编排:
- `DropPoolRoller`
- `RewardCandidateBuilder`
- `ComponentItemFactory`
约束:
- 不直接修改资源状态。
- 不直接读取 `CombatNodeComponent`、`MapEntity`、`EnemyManager` 内部状态。
- `CombatNode` 域不直接持有或复制组件产出规则。
- `CombatScheduler` 与结算状态链只调用统一入口,不直接访问掉落池滚动或组件实例构造细节。
- `InventoryGenerationComponent` 负责组件实例生成、Tag 随机上下文以及 `runSeed/sequenceIndex` 相关上下文。
### 4.6 IPhaseEndCondition
@@ -406,7 +409,7 @@ Boss 识别规则:
- `OnEnemyDefeated(DREnemy enemy)`
- `OnEnemyReachedBase(DREnemy enemy)`
- `CombatScheduler` 公共层负责处理敌人事件的通用副作用:
- 击杀:调用 `EnemyDropResolver`,再调用局内资源管理器入账。
- 击杀:调用 `GameEntry.InventoryGeneration.ResolveEnemyDrop(...)`,再调用局内资源管理器入账。
- 到家:调用局内资源管理器扣减 `BaseHp`。
约束:
@@ -467,7 +470,7 @@ Boss 识别规则:
1. `CombatScheduler` 只做状态机管理与共享运行时收口,不继续吸收具体业务细节。
2. `CombatNodeComponent` 不再持有战斗内资源真值。
3. 局内 `Coin / Gold / BaseHp / Loot Backpack / BuildTowerSnapshots` 以 `CombatRunResourceStore` 为唯一真值来源。
4. 敌人死亡掉落判定以 `EnemyDropResolver` 为唯一判定入口。
4. 组件产出规则以 `InventoryGenerationComponent` 为统一运行时入口;战斗掉落与奖励候选都通过它生成。
5. 存活敌人数与 `HasAliveBoss` 以 `EnemyLifecycleTracker` 为唯一真值来源。
6. Phase 运行时信息与统一结束标记以 `PhaseLoopRuntime` 为唯一真值来源。
7. `PhaseEndType` 的退出条件以 `IPhaseEndCondition` 实现类为唯一判定入口。
@@ -498,7 +501,11 @@ Boss 识别规则:
### 10.3 新增敌人掉落规则
优先改 `EnemyDropResolver`,不要在 `EnemyManager` 或状态类里直接计算掉落。
优先改 `InventoryGenerationComponent` 及其下层规则模块,不要在 `EnemyManager`、`CombatScheduler` 或状态类里直接计算掉落。
### 10.3.x 新增奖励候选规则
优先改 `InventoryGenerationComponent`、`RewardCandidateBuilder` 或 `DropPoolRoller`,不要在结算状态链里复制一套候选生成规则。
### 10.4 新增战斗内资源或建塔快照规则