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

287 lines
15 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-08
## 当前目标
`docs/TODO.md` 的 M1 目标推进最小可玩闭环,并以“能从开始游戏一路推进到 Boss 结算”为准检查当前实现。
和上一版相比,仓库已经把 Run 相关基础件进一步接到了 `ProcedureMain`,因此这份清单不再把重点放在“有没有 Run 模型”,而是聚焦下面这几个真实阻塞项:
- 已有 `ProcedureMenu + MenuForm -> ProcedureMain + NodeMapForm` 的主入口链路,正式节点面板骨架已经接入流程。
- 固定 10 节点顺序已经开始驱动战斗 / 事件 / 商店入口,节点事件也已带上基础 Run 上下文字段。
- 出战入口已有“至少有参战塔”的最小校验,但还没收口成严格的最终合法性约束。
- 品质 / Tag / 耐久仍然停留在部分实现状态,尚未和 M1 范围完全对齐。
## 当前已完成
### 1. 战斗主链路已经能独立跑通一场
- `CombatNodeComponent` 能加载关卡、阶段、出怪表并启动 `CombatScheduler`
- `CombatScheduler` 已具备加载地图、推进 phase、结算、失败返回等基础流程。
- 战斗内已有基地血量、建塔消耗、敌人到家扣血、胜负结束等基础规则。
关键文件:
- `Assets/GameMain/Scripts/CustomComponent/CombatNode/CombatNodeComponent.cs`
- `Assets/GameMain/Scripts/CustomComponent/CombatNode/CombatScheduler/CombatScheduler.cs`
- `Assets/GameMain/Scripts/CustomComponent/CombatNode/CombatScheduler/CombatStates/`
- `Assets/GameMain/Scripts/Entity/EntityLogic/MapEntity.cs`
### 2. 战斗结算、掉落与奖励选择已有基础实现
- 敌人被击败后已能发放 coin / gold / 组件掉落。
- `CombatRunResourceStore` 维护局内资源与奖励背包快照。
- 结算链已包含奖励计算、奖励选择 UI、FinishForm 返回等基础骨架。
关键文件:
- `Assets/GameMain/Scripts/CustomComponent/CombatNode/CombatScheduler/CombatRunResourceStore.cs`
- `Assets/GameMain/Scripts/CustomComponent/CombatNode/CombatScheduler/EnemyDrop/EnemyDropResolver.cs`
- `Assets/GameMain/Scripts/CustomComponent/CombatNode/CombatScheduler/CombatSettlementService.cs`
- `Assets/GameMain/Scripts/UI/Combat/`
### 3. 背包、参战区与组装基础能力已经存在
- `PlayerInventoryComponent` 已支持库存快照、金币读写、参战塔名单、组装塔入口。
- `RepoForm` 已能展示组件、塔、参战区和组装区。
- `CombineArea` 已有三槽约束,只有枪口 / 轴承 / 底座齐备时才会发起组合请求。
- `PlayerInventoryTowerAssemblyService` 已能基于三组件生成 `TowerItemData``TowerStatsData`
关键文件:
- `Assets/GameMain/Scripts/CustomComponent/PlayerInventory/PlayerInventoryComponent.cs`
- `Assets/GameMain/Scripts/CustomComponent/PlayerInventory/PlayerInventoryTowerAssemblyService.cs`
- `Assets/GameMain/Scripts/UI/Game/View/RepoForm.cs`
- `Assets/GameMain/Scripts/UI/Game/View/CombineArea.cs`
- `Assets/GameMain/Scripts/UI/Game/Controller/RepoFormController.cs`
### 4. 事件节点已有可进入、可结算的基础实现
- `EventNodeComponent` 能读取 `Event.txt`,解析事件选项并随机打开事件。
- `EventForm` 的打开 / 关闭现已统一走 `UIRouter`,不再混用私有 controller。
- 事件完成后会关闭 UI 并发出 `NodeCompleteEventArgs`
关键文件:
- `Assets/GameMain/Scripts/CustomComponent/EventNodeComponent.cs`
- `Assets/GameMain/Scripts/UI/Game/UseCase/EventFormUseCase.cs`
- `Assets/GameMain/Scripts/UI/Game/Controller/EventFormController.cs`
### 5. Run 模型和 10 节点固定序列已经落地到代码与测试
- 已有 `RunNodeType / RunNodeStatus / RunState / RunNodeState` 等运行时模型。
- 已有 `RunStateFactory``RunStateAdvanceService` 处理节点创建、推进、失败和完成。
- 已有 `FixedRunNodeSequenceBuilder`Plain 主题下固定生成 10 节点,并且第 10 节点是 `BossCombat`
- 已有 Editor 测试覆盖 `RunState` 创建、节点推进、Boss 节点和固定 10 节点序列。
关键文件:
- `Assets/GameMain/Scripts/Procedure/RunModel.cs`
- `Assets/GameMain/Scripts/Procedure/RunStateFactory.cs`
- `Assets/GameMain/Scripts/Procedure/RunStateAdvanceService.cs`
- `Assets/GameMain/Scripts/Procedure/FixedRunNodeSequenceBuilder.cs`
- `Assets/GameMain/Tests/Editor/RunStateTests.cs`
### 6. 商店节点已经有最小可用实现
- `ShopNodeComponent.StartShop()` 已不再是空方法。
- 新版 `ShopFormUseCase` 已能随机生成 4 个组件商品。
- 已支持购买、扣金、把组件写回 `PlayerInventory`、退出商店。
关键文件:
- `Assets/GameMain/Scripts/CustomComponent/ShopNodeComponent.cs`
- `Assets/GameMain/Scripts/UI/Shop/UseCase/ShopFormUseCase.cs`
- `Assets/GameMain/Scripts/UI/Shop/Controller/ShopFormController.cs`
- `Assets/GameMain/Scripts/UI/Shop/View/ShopForm.cs`
### 7. `NodeMapForm` 五层 UI 已经接入主流程
- 已新增 `NodeMapFormRawData / UseCase / Controller / Context / View``NodeItemContext / NodeItem`
- `ProcedureMain` 已不再打开 `TestMenuForm`,而是打开 `NodeMapForm` 作为 Hub 节点入口。
- `NodeMapFormController` 会把 `NodeItem` 点击转换为 `NodeMapNodeEnterRequestedEventArgs`,再交给流程层决定是否进入节点。
- `NodeItem``Icon` 已改成通过 `SpriteCacheComponent` 按资源名异步获取,`Bg` 负责表示节点状态。
关键文件:
- `Assets/GameMain/Scripts/UI/Game/RawData/NodeMapFormRawData.cs`
- `Assets/GameMain/Scripts/UI/Game/UseCase/NodeMapFormUseCase.cs`
- `Assets/GameMain/Scripts/UI/Game/Controller/NodeMapFormController.cs`
- `Assets/GameMain/Scripts/UI/Game/Context/NodeMapFormContext.cs`
- `Assets/GameMain/Scripts/UI/Game/Context/NodeItemContext.cs`
- `Assets/GameMain/Scripts/UI/Game/View/NodeMapForm.cs`
- `Assets/GameMain/Scripts/UI/Game/View/NodeItem.cs`
- `Assets/GameMain/Scripts/Event/Game/NodeMapNodeEnterRequestedEventArgs.cs`
### 8. 菜单入口已切回独立 Menu 流程
- `ProcedureMenu` 当前只负责菜单入口,不再承载主流程 Hub 与节点推进逻辑。
- `MenuForm` 已按五层结构补齐 `RawData / UseCase / Controller / Context / View`
- `Start` 按钮现在会驱动 `ProcedureMenu` 切场景,并在主场景加载完成后进入 `ProcedureMain`
- `Settings` 仍保留 `TODO` 占位,`Exit` 会直接退出游戏。
关键文件:
- `Assets/GameMain/Scripts/Procedure/ProcedureMenu.cs`
- `Assets/GameMain/Scripts/Procedure/Base/ProcedureChangeScene.cs`
- `Assets/GameMain/Scripts/UI/Menu/Controller/MenuFormController.cs`
- `Assets/GameMain/Scripts/UI/Menu/View/MenuForm.cs`
## 当前未完成
### 1. Run 主流程已经形成基于 `NodeMapForm` 的临时闭环,但还没完全收口
- `ProcedureMain` 进入后会创建 Run并打开 `MainForm + NodeMapForm`
- `NodeMapForm` 已经有五层结构,`NodeItem` 也能按当前 `RunState` 刷出 10 个节点。
- 点击当前节点后,由 `NodeMapFormController` 发出 `NodeMapNodeEnterRequestedEventArgs`,再由 `ProcedureMain` 根据当前 `RunState.CurrentNode` 决定是否允许进入战斗 / 事件 / 商店。
- 节点完成或战斗失败后,`ProcedureMain` 会推进 `RunState`,再重新打开 Hub UI。
- 因此当前已经不是“测试菜单三选一”,而是“节点地图单入口”的临时版本。
当前缺口:
- `NodeMapForm` 已接入,但当前仍偏 MVP 骨架缺节点连线、节点说明、Boss 特效等正式表现。
- `NodeMapFormContext` 当前只提供基础进度和当前节点信息,还没有更完整的地图展示上下文。
- Run 完成后的正式结算 / 收尾表现仍未建立。
关键文件:
- `Assets/GameMain/Scripts/Procedure/ProcedureMain.cs`
- `Assets/GameMain/Scripts/UI/Game/View/NodeMapForm.cs`
- `Assets/GameMain/Scripts/UI/Game/Controller/NodeMapFormController.cs`
### 2. 固定 10 节点序列已开始驱动真实流程,但正式上下文系统仍不完整
- `FixedRunNodeSequenceBuilder` 已定义固定顺序和 Boss 终点。
- `ProcedureMain` 已开始用当前 `RunNodeState.LinkedLevelId` 驱动战斗入口。
- `EventNodeComponent``ShopNodeComponent` 已能进入并完成当前节点。
- `EventNodeComponent` 的 UI 生命周期也已统一走 `UIRouter`
- `NodeEnter / NodeComplete` 已带 `runId / nodeId / nodeType / sequenceIndex` 等基础字段,`NodeComplete` 也会回传成功状态与库存快照。
- 当前缺的不是“有没有上下文字段”,而是更系统化的节点追踪、展示与统一收口能力。
关键文件:
- `Assets/GameMain/Scripts/Procedure/FixedRunNodeSequenceBuilder.cs`
- `Assets/GameMain/Scripts/CustomComponent/CombatNode/CombatNodeComponent.cs`
- `Assets/GameMain/Scripts/CustomComponent/EventNodeComponent.cs`
- `Assets/GameMain/Scripts/CustomComponent/ShopNodeComponent.cs`
- `Assets/GameMain/Scripts/Event/Game/NodeEnterEventArgs.cs`
- `Assets/GameMain/Scripts/Event/Game/NodeCompleteEventArgs.cs`
### 3. 商店节点已纳入临时 Run 推进闭环,但回流目标仍是 MVP Hub
- 现在可以单独打开商店、随机生成组件、购买并退出。
- 商店结束后已能通过 `ProcedureMain` 推进当前 `RunState`
- 但退出后当前回流的是 `MainForm + NodeMapForm` 的 MVP 节点面板,而不是完整表现版地图。
关键文件:
- `Assets/GameMain/Scripts/CustomComponent/ShopNodeComponent.cs`
- `Assets/GameMain/Scripts/UI/Shop/UseCase/ShopFormUseCase.cs`
- `Assets/GameMain/Scripts/Procedure/ProcedureMain.cs`
### 4. 出战入口已有最小校验,但离最终验收还差一层
- `CombineArea` 已限制三槽必须齐备才能组塔。
- `ProcedureMain` 已经补上“没有参战塔时禁止进入战斗节点”的最小校验。
- 但这个校验目前仍是“有参战塔即可开战”,还不是“完整三组件合法塔”意义上的最终验收版本。
- 这意味着当前还不满足 `P0-10` 里“未满足三组件时禁止出战”的验收要求。
关键文件:
- `Assets/GameMain/Scripts/UI/Game/View/CombineArea.cs`
- `Assets/GameMain/Scripts/Procedure/ProcedureMain.cs`
- `Assets/GameMain/Scripts/CustomComponent/CombatNode/CombatNodeComponent.cs`
### 5. 品质 / 槽位 / Tag 规则仍只做了浅层版本
- 塔品质仍主要按三组件品质聚合得到。
- `TowerItemData` 中没有真正落地“配件槽位数量”之类的核心字段。
- Tag 仍主要来自组件自身配置或简单并集,未看到完整概率、数量、等级规则落地。
- `DRTag` 已存在,但尚未形成明确的掉落 / 组装计算主链路。
- `RarityType` 仍保留 `Red`,与部分 M1 文档描述未完全对齐。
关键文件:
- `Assets/GameMain/Scripts/CustomComponent/PlayerInventory/PlayerInventoryTowerAssemblyService.cs`
- `Assets/GameMain/Scripts/CustomComponent/CombatNode/CombatScheduler/EnemyDrop/EnemyDropResolver.cs`
- `Assets/GameMain/Scripts/DataTable/DRTag.cs`
- `Assets/GameMain/Scripts/Definition/DataStruct/TowerItemData.cs`
- `Assets/GameMain/Scripts/Definition/Enum/RarityType.cs`
### 6. 耐久仍停留在“展示 + 部分扣减”,没有形成真实生效闭环
- 当前组件耐久会显示在描述与 UI 上。
- 低血通关后已存在扣耐久逻辑。
- 但塔战斗属性是在组装时固化到 `TowerStatsData`,没有根据耐久实时衰减。
- 组件耐久归 0 后也没有稳定的销毁 / 拆塔 / 失效闭环。
- 因此 `P0-12` 的完整验收还没有达成。
关键文件:
- `Assets/GameMain/Scripts/Utility/ItemDescUtility.cs`
- `Assets/GameMain/Scripts/CustomComponent/PlayerInventory/PlayerInventoryTowerRosterService.cs`
- `Assets/GameMain/Scripts/Definition/DataStruct/TowerItemData.cs`
- `Assets/GameMain/Scripts/Definition/DataStruct/TowerCompItemData.cs`
## 当前与 `docs/TODO.md` 的对照判断
结合静态代码检查,当前更接近下面这个状态:
- `P0-04`:基础模型已完成,并已接入 `ProcedureMain + NodeMapForm` 的临时 Run 闭环。
- `P0-05`:固定 10 节点序列已由 builder + `ProcedureMain + NodeMapForm` 驱动实际流程,基础事件上下文字段已接入,但缺更完整的地图表现层与正式上下文系统。
- `P0-06`:节点进入、完成、失败后回 `NodeMapForm` 的临时闭环已存在,但正式地图表现与正式结算仍未完成。
- `P0-10`:未完成。
- `P0-11`:未完成。
- `P0-12`:未完成。
换句话说,仓库已经不再是“还没有 Run 模型 / 10 节点 / 商店最小实现”的状态;真正的缺口是“这些能力已经接成 `NodeMapForm` 驱动的临时可跑版本,但还没收口成正式 M1 主流程表现层与上下文系统”。
## 推荐的后续执行顺序
1. 先把临时 Hub 升级成正式节点面板
- 保留 `ProcedureMain` 持有 Run 的做法
- 继续以 `NodeMapForm` 为基础补正式节点地图表现
- 至少补上节点连线、Boss 视觉强调、当前节点说明和完成态反馈
2. 再补齐节点上下文的消费、追踪与统一推进
- 继续沿用 `NodeEnterEventArgs``NodeCompleteEventArgs` 现有的 `runId / nodeId / nodeType / sequenceIndex`
- 节点完成后统一由流程层调用 `RunStateAdvanceService`
- 节点失败时明确是否停局、重试或返回菜单
3. 然后继续收口战斗关卡选择
- 普通战斗和 Boss 战斗继续统一由当前 `RunNodeState.LinkedLevelId` 驱动
- 去掉遗留的随机选关兜底路径,避免偏离 Run 顺序
4. 再补出战合法性校验
- 没有完整参战塔时禁止进入战斗节点
- 在 UI 和流程层都给出明确反馈
5. 最后再处理品质 / Tag / 耐久与文档对齐
- 先确认 M1 是否真的保留红色品质和完整耐久
- 再决定是补全实现,还是先缩范围并同步文档
## 当前做变更时要记住的约束
- 不要再把 Hub 退回 `TestMenuForm` 语义。
- 不要把菜单入口和主流程 Hub 混回同一个 Procedure保持 `ProcedureMenu -> ProcedureMain` 的职责边界。
- 优先补“临时闭环 -> 正式节点 UI / 正式上下文”的收口,不要继续只加单点功能。
- 商店已经接入 Run下一步重点不是继续扩商店而是把 Hub/UI 做正式。
- 若 M1 最终不做完整耐久 / 红色品质,要先同步文档再改代码目标。
- `PlayerInventory` 可以继续作为库存入口,但不要把整局 Run 状态直接混进库存对象里。
## 当前关键入口文件速查
- 流程入口:
- `Assets/GameMain/Scripts/Procedure/ProcedureMain.cs`
- Run 模型:
- `Assets/GameMain/Scripts/Procedure/RunModel.cs`
- `Assets/GameMain/Scripts/Procedure/RunStateFactory.cs`
- `Assets/GameMain/Scripts/Procedure/RunStateAdvanceService.cs`
- `Assets/GameMain/Scripts/Procedure/FixedRunNodeSequenceBuilder.cs`
- 当前 Hub / 节点入口:
- `Assets/GameMain/Scripts/UI/Game/Controller/NodeMapFormController.cs`
- `Assets/GameMain/Scripts/UI/Game/View/NodeMapForm.cs`
- 战斗节点 facade
- `Assets/GameMain/Scripts/CustomComponent/CombatNode/CombatNodeComponent.cs`
- 事件节点:
- `Assets/GameMain/Scripts/CustomComponent/EventNodeComponent.cs`
- 商店节点:
- `Assets/GameMain/Scripts/CustomComponent/ShopNodeComponent.cs`
- 商店 UI
- `Assets/GameMain/Scripts/UI/Shop/`
- 背包与组装:
- `Assets/GameMain/Scripts/CustomComponent/PlayerInventory/`
- `Assets/GameMain/Scripts/UI/Game/`
## 备注
- 这份清单基于 2026-03-08 的静态代码检查更新。
- 本次已修正上一版中“Run 模型不存在”“10 节点未实现”“商店节点基本未实现”等过期判断。
- 当前最值得优先推进的是:`NodeMapForm 继续收口表现层 -> 节点事件带上下文 -> 战斗按节点关卡进入 -> 出战校验`。