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

13 KiB
Raw Blame History

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 已能基于三组件生成 TowerItemDataTowerStatsData

关键文件:

  • 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 等运行时模型。
  • 已有 RunStateFactoryRunStateAdvanceService 处理节点创建、推进、失败和完成。
  • 已有 FixedRunNodeSequenceBuilderPlain 主题下固定生成 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 驱动战斗入口。
  • EventNodeComponentShopNodeComponent 已能进入并完成当前节点。
  • 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. 再把节点事件改成带上下文的真实推进

    • NodeEnterEventArgsNodeCompleteEventArgs 传递 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 流程 -> 节点事件带上下文 -> 战斗按节点关卡进入 -> 出战校验