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

255 lines
13 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 模型”,而是聚焦下面这几个真实阻塞项:
- 已有 `ProcedureMain + TestMenuForm` 的临时 Run 推进闭环,但还没有正式节点地图 / 节点面板。
- 固定 10 节点顺序已经开始驱动战斗 / 事件 / 商店入口,但节点事件上下文仍然是空载版本。
- 出战入口已有“至少有参战塔”的最小校验,但还没收口成严格的最终合法性约束。
- 品质 / 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 / 组件掉落。
- `CombatInRunResourceManager` 维护局内资源与奖励背包快照。
- 结算链已包含奖励计算、奖励选择 UI、FinishForm 返回等基础骨架。
关键文件:
- `Assets/GameMain/Scripts/CustomComponent/CombatNode/CombatScheduler/CombatInRunResourceManager.cs`
- `Assets/GameMain/Scripts/CustomComponent/CombatNode/CombatScheduler/EnemyDrop/EnemyDropResolver.cs`
- `Assets/GameMain/Scripts/CustomComponent/CombatNode/CombatScheduler/CombatSettlementFlowService.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`
## 当前未完成
### 1. Run 主流程已经形成临时闭环,但还不是正式节点 UI
- `ProcedureMain` 进入后会创建 Run并打开 `MainForm + TestMenuForm`
- `TestMenuForm` 已不再同时提供三种节点入口,而是通过 `TestMenuFormContext.CurrentNodeType` 只显示当前节点对应的唯一按钮。
- 点击按钮后由 `ProcedureMain` 根据当前 `RunState.CurrentNode` 决定是否允许进入战斗 / 事件 / 商店。
- 节点完成或战斗失败后,`ProcedureMain` 会推进 `RunState`,再重新打开 Hub UI。
- 因此当前已经能从开始游戏后按固定顺序推进一局的临时版本。
当前缺口:
- UI 仍是测试面板,不是正式节点地图或正式节点信息面板。
- `TestMenuFormContext` 目前只传 `CurrentNodeType`还没有显示节点序号、总数、Boss 标记等关键信息。
- Run 完成后的正式结算 / 收尾表现仍未建立。
关键文件:
- `Assets/GameMain/Scripts/Procedure/ProcedureMain.cs`
- `Assets/GameMain/Scripts/UI/Menu/View/TestMenuForm.cs`
- `Assets/GameMain/Scripts/UI/Menu/Controller/TestMenuFormController.cs`
### 2. 固定 10 节点序列已开始驱动真实流程,但上下文仍不完整
- `FixedRunNodeSequenceBuilder` 已定义固定顺序和 Boss 终点。
- `ProcedureMain` 已开始用当前 `RunNodeState.LinkedLevelId` 驱动战斗入口。
- `EventNodeComponent``ShopNodeComponent` 已能进入并完成当前节点。
- `EventNodeComponent` 的 UI 生命周期也已统一走 `UIRouter`
-`NodeEnter / NodeComplete` 仍是默认空载事件,没有附带当前 Run 节点信息。
- 因此“固定 10 节点序列”已经在驱动流程,但还没有形成可观测、可追踪的正式节点上下文系统。
关键文件:
- `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 推进闭环,但回流目标仍是测试 Hub
- 现在可以单独打开商店、随机生成组件、购买并退出。
- 商店结束后已能通过 `ProcedureMain` 推进当前 `RunState`
- 但退出后仍是回到 `MainForm + TestMenuForm`,而不是真实节点地图或正式节点选择界面。
关键文件:
- `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` 的临时 Run 闭环。
- `P0-05`:固定 10 节点序列已由 builder + `ProcedureMain` 开始驱动实际流程,但缺完整事件上下文与正式节点 UI。
- `P0-06`:节点进入、完成、失败后回 Hub 的临时闭环已存在,但“正式地图/节点界面 + 正式结算”仍未完成。
- `P0-10`:未完成。
- `P0-11`:未完成。
- `P0-12`:未完成。
换句话说,仓库已经不再是“还没有 Run 模型 / 10 节点 / 商店最小实现”的状态;真正的缺口是“这些能力已经接成临时可跑版本,但还没收口成正式 M1 主流程表现层与上下文系统”。
## 推荐的后续执行顺序
1. 先把临时 Hub 升级成正式节点面板
- 保留 `ProcedureMain` 持有 Run 的做法
- 不再把 `TestMenuForm` 当测试菜单,而是改成正式节点信息面板或节点地图
- 至少补上当前节点序号、总节点数、节点名称、Boss 标记
2. 再把节点事件改成带上下文的真实推进
- `NodeEnterEventArgs``NodeCompleteEventArgs` 传递 `runId / nodeId / nodeType / sequenceIndex`
- 节点完成后由流程层调用 `RunStateAdvanceService`
- 节点失败时明确是否停局、重试或返回菜单
3. 然后继续收口战斗关卡选择
- 普通战斗和 Boss 战斗继续统一由当前 `RunNodeState.LinkedLevelId` 驱动
- 去掉遗留的随机选关兜底路径,避免偏离 Run 顺序
4. 再补出战合法性校验
- 没有完整参战塔时禁止进入战斗节点
- 在 UI 和流程层都给出明确反馈
5. 最后再处理品质 / Tag / 耐久与文档对齐
- 先确认 M1 是否真的保留红色品质和完整耐久
- 再决定是补全实现,还是先缩范围并同步文档
## 当前做变更时要记住的约束
- 不要再把 `TestMenuForm` 维持成“测试菜单”语义。
- 优先补“临时闭环 -> 正式节点 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/Menu/Controller/TestMenuFormController.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 节点未实现”“商店节点基本未实现”等过期判断。
- 当前最值得优先推进的是:`ProcedureMain 继续收口 Run 流程 -> 节点事件带上下文 -> 战斗按节点关卡进入 -> 出战校验`。