geometry-tower-defense-base/TODO.md

741 lines
34 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.

# GeometryTD 三层拆分迁移 TODO边界纠偏版
最后更新2026-05-12
> **2026-04-30 第一波完成**Definition/Enum + Event
> **2026-04-30 第二波完成**Vector3/Mathf 替换AttackPayload/HitContext 迁移
> **2026-05-01 第三波完成**IDataRow 实现、TagRow/RarityTagBudgetRow、TagGenerationRuleRegistry 重构(**现已判定为过渡态方案,非目标边界**
> **2026-05-09 状态校准**:同步仓库实况,补记已落地的 DataStruct / UI/Base / Entity / BinaryReaderExtension并修正 TagRuntimeUtility 路径与各小节计数
> **2026-05-10 第四波进行中1.1**:迁移 BackpackInventoryData / EventItem / EventOption / TowerStatsData、CombatParticipantTowerValidation*、ParticipantTowerAssignResult含依赖 TowerItemData
> **2026-05-12 边界纠偏**:明确 L0 不依赖 GameFramework/UnityDataTable 解析、二进制反序列化、IDataRow/DR* 统一归 L1此前已迁但越界项标记为“过渡态待下沉”
---
## 分层判定基线(本文件后续统计以此为准)
### L0Domain纯业务
- 允许:业务实体、值对象、规则服务、领域枚举、领域事件、纯数据模型
- 禁止:
- `UnityEngine.*`
- `UnityGameFramework.*`
- `GameFramework.*`
- `IDataRow` / `DataRowBase`
- `ParseDataRow(string/byte[])`、`BinaryReader/BinaryWriter` 解析细节
### L1Infrastructure技术适配
- 承接DataTable、序列化/反序列化、配置读取、框架适配、桥接/映射
- 允许依赖:`GameFramework.*`、`UnityGameFramework.*`
- 可不依赖 UnityEngine仍属 L1不属于 L0
### L2Presentation表现层
- 承接UI/View、Scene、`MonoBehaviour`、`UGuiForm`、Unity 运行时流程
### 过渡态定义
- 若文件“物理位置”在 `GeometryTD.Domain`,但语义属于 L1例如 `IDataRow`、二进制解析),统一标记为:**过渡态待下沉 L1**
## 概述
| 指标 | 数量 | 状态 |
|------|------|------|
| 总文件数 | 457 | - |
| 阶段一清单L0 候选) | 235 | **已勾选 111 / 未勾选 124按本文件当前勾选** |
| Domain 当前 .cs 文件数 | 119 | **其中含“过渡态待下沉 L1”文件如 DataTable Row/Parser** |
| Infrastructure 当前 .cs 文件数 | 3 | **承接明显不足,需补 DR*/Parser/Bridge** |
| Presentation 当前 .cs 文件数 | 1 | **仅项目骨架UI 五层迁移待展开** |
## 项目骨架
```
src/
├── GeometryTD.Domain/ # L0 - 纯净 C#(当前迁移主战场)
│ ├── DataTable/ # 当前含过渡态(目标下沉至 L1
│ ├── Definition/
│ ├── Event/
│ └── UI/Base/ # IUIFormController / IUIUseCase / UIContext
├── GeometryTD.Infrastructure/ # L1 - Unity 胶水层(当前仅少量承接)
│ └── Entity/
├── GeometryTD.Presentation/ # L2 - 表现层项目骨架(待承接 UI 迁移)
└── Geometry-Tower-Defense-Base.sln
```
---
## 阶段一L0 直接迁移(纯业务,不引入框架依赖)
以下文件原则上可迁移到 `GeometryTD.Domain/`;若引入框架解析职责,改归 L1。
### Definition/Enum27 个文件)
- [x] `Definition/Enum/AttackMethodType.cs`
- [x] `Definition/Enum/AttackPropertyType.cs`
- [x] `Definition/Enum/CampType.cs`
- [x] `Definition/Enum/CombatSelectActionType.cs` ⚠️ **已修改** - 从 `UI/Combat/Context/` 迁移
- [x] `Definition/Enum/EntryType.cs`
- [x] `Definition/Enum/EventEffectType.cs`
- [x] `Definition/Enum/EventRequirementType.cs`
- [x] `Definition/Enum/InventoryTagSourceType.cs`
- [x] `Definition/Enum/LevelThemeType.cs`
- [x] `Definition/Enum/LevelVictoryType.cs`
- [x] `Definition/Enum/PhaseEndType.cs`
- [x] `Definition/Enum/ProcedureMainCombatEntryBlockReason.cs`
- [x] `Definition/Enum/ProcedureMainFlowPhase.cs`
- [x] `Definition/Enum/ProcedureMainRunAdvanceResult.cs`
- [x] `Definition/Enum/ProcedureMainRunCompletionResult.cs`
- [x] `Definition/Enum/RarityType.cs`
- [x] `Definition/Enum/RelationType.cs`
- [x] `Definition/Enum/RepoItemClickActionType.cs`
- [x] `Definition/Enum/RunNodeCompletionStatus.cs` ⚠️ **已修改** - 从 `Procedure/ProcedureMain/RunModel.cs` 迁移枚举
- [x] `Definition/Enum/RunNodeStatus.cs` ⚠️ **已修改** - 从 `Procedure/ProcedureMain/RunModel.cs` 迁移枚举
- [x] `Definition/Enum/RunNodeType.cs` ⚠️ **已修改** - 从 `Procedure/ProcedureMain/RunModel.cs` 迁移枚举
- [x] `Definition/Enum/SceneType.cs`
- [x] `Definition/Enum/TagCategory.cs`
- [x] `Definition/Enum/TagTriggerPhase.cs`
- [x] `Definition/Enum/TagType.cs`
- [x] `Definition/Enum/TowerCompSlotType.cs`
- [x] `Definition/Enum/UIFormType.cs`
> ⚠️ 注:原 TODO 统计 25 个 Enum 文件,实际源文件 23 个。第一波新增 4 个枚举从其他层迁移CombatSelectActionType(UI层)、RunNodeType/RunNodeStatus/RunNodeCompletionStatus(Procedure层)
### Definition/DataStruct11 个文件)
- [x] `Definition/DataStruct/AttackPayload.cs` ⚠️ **已迁移** - Vector3 → System.Numerics.Vector3
- [x] `Definition/DataStruct/HitContext.cs` ⚠️ **已迁移** - Vector3 → System.Numerics.Vector3TargetStatusRuntime 已恢复
- [x] `Definition/DataStruct/BackpackInventoryData.cs`**已迁移** - 背包聚合数据
- [x] `Definition/DataStruct/BuildInfo.cs`**已迁移** - 纯数据对象
- [x] `Definition/DataStruct/EventItem.cs`**已迁移** - 事件条目模型
- [x] `Definition/DataStruct/EventOption.cs`**已迁移** - 事件选项模型
- [x] `Definition/DataStruct/ImpactData.cs`**已迁移** - 纯结构体
- [x] `Definition/DataStruct/TowerCompItemData.cs`**已迁移** - 背包组件实例模型
- [x] `Definition/DataStruct/TowerStatsData.cs`**已迁移** - 塔属性快照
- [x] `Definition/DataStruct/TowerItemData.cs`**已迁移** - 作为 1.1 依赖补迁(移除 Sprite/JsonIgnore
- [x] `Definition/DataStruct/VersionInfo.cs`**已迁移** - 纯数据对象
### Definition/ 其他
- [x] `Definition/CombatParticipantTowerValidation.cs`**已迁移** - 参战塔校验服务
- [x] `Definition/CombatParticipantTowerValidationText.cs`**已迁移** - 校验结果文案
- [ ] `Definition/InventoryRarityRuleService.cs`
- [x] `Definition/ParticipantTowerAssignResult.cs`**已迁移** - 参战分配结果模型
### Event35 个文件)
- [x] `Event/Combat/CombatBaseHpChangedEventArgs.cs`
- [x] `Event/Combat/CombatCoinChangedEventArgs.cs`
- [x] `Event/Combat/CombatDebugFailEventArgs.cs`
- [x] `Event/Combat/CombatEndEventArgs.cs`
- [x] `Event/Combat/CombatEnemyHpRateChangedEventArgs.cs`
- [x] `Event/Combat/CombatFinishReturnEventArgs.cs`
- [x] `Event/Combat/CombatPauseEventArgs.cs`
- [x] `Event/Combat/CombatProcessEventArgs.cs`
- [x] `Event/Combat/CombatSelectItemClickEventArgs.cs` ⚠️ **已修改** - 依赖迁移的枚举
- [x] `Event/EventForm/EventOptionItemSelectedEventArgs.cs`
- [x] `Event/Game/NodeCompleteEventArgs.cs` ⚠️ **已修改** - 依赖迁移的枚举和数据结构
- [x] `Event/Game/NodeEnterEventArgs.cs` ⚠️ **已修改** - 依赖迁移的枚举
- [x] `Event/Game/NodeMapNodeClickEventArgs.cs`
- [x] `Event/Game/NodeMapNodeEnterRequestedEventArgs.cs` ⚠️ **已修改** - 依赖迁移的枚举
- [x] `Event/Game/TestMenuNodeClickEventArgs.cs`
- [x] `Event/General/RewardSelectGiveUpEventArgs.cs`
- [x] `Event/General/RewardSelectItemSelectedEventArgs.cs`
- [x] `Event/General/RewardSelectRefreshEventArgs.cs`
- [x] `Event/MainForm/RepoButtonClickedEventArgs.cs`
- [x] `Event/MainForm/ReturnButtonClickedEventArgs.cs`
- [x] `Event/Menu/MenuExitRequestedEventArgs.cs`
- [x] `Event/Menu/MenuSettingsRequestedEventArgs.cs`
- [x] `Event/Menu/MenuStartRequestedEventArgs.cs`
- [x] `Event/RepoForm/CombineSlotClickedEventArgs.cs`
- [x] `Event/RepoForm/RepoCombineRequestedEventArgs.cs`
- [x] `Event/RepoForm/RepoFormReturnEventArgs.cs`
- [x] `Event/RepoForm/RepoItemClickedEventArgs.cs` ⚠️ **已修改** - `UnityEngine.Vector2``System.Numerics.Vector2`
- [x] `Event/RepoForm/RepoItemDragEndedEventArgs.cs`
- [x] `Event/RepoForm/RepoParticipantAssignRequestedEventArgs.cs`
- [x] `Event/RepoForm/RepoSellCancelRequestedEventArgs.cs`
- [x] `Event/RepoForm/RepoSellConfirmRequestedEventArgs.cs`
- [x] `Event/RepoForm/RepoSellModeToggleRequestedEventArgs.cs`
- [x] `Event/Shop/ShopExitRequestedEventArgs.cs`
- [x] `Event/Shop/ShopInventoryRequestedEventArgs.cs`
- [x] `Event/Shop/ShopPurchaseRequestedEventArgs.cs`
> ⚠️ 注:以下 5 个 Event 文件在初始迁移后因跨层依赖被移除后经修复枚举迁移、Vector2替换后重新加入CombatSelectItemClickEventArgs、NodeCompleteEventArgs、NodeEnterEventArgs、NodeMapNodeEnterRequestedEventArgs、RepoItemClickedEventArgs
### UI/Base3 个文件)
- [x] `UI/Base/IUIFormController.cs`**已迁移** - 纯接口
- [x] `UI/Base/IUIUseCase.cs`**已迁移** - 纯接口
- [x] `UI/Base/UIContext.cs`**已迁移** - 纯上下文基类
### Definition/Tag35 个文件)
- [x] `Definition/Tag/Aggregation/TagRuntimeData.cs` ⚠️ **已迁移** - 无 Unity 依赖
- [x] `Definition/DataStruct/TagRuntimeUtility.cs` ⚠️ **已新建** - CloneTagRuntimes 方法(实际落位已调整到 DataStruct
- [ ] `Definition/Tag/Aggregation/TowerTagAggregationService.cs`
- [x] `Definition/Tag/Combat/EnemyStatusTagRegistry.cs` ⚠️ **已迁移** - 简化版(含 FireTagEffect、IceTagEffect 注册)
- [ ] `Definition/Tag/Combat/Handlers/AttackShapeTagEffectHandler.cs`
- [ ] `Definition/Tag/Combat/Handlers/NumericTagEffectHandler.cs`
- [x] `Definition/Tag/Combat/States/EnemyStatusTagStateBase.cs` ⚠️ **已迁移** - 无 Unity 依赖
- [x] `Definition/Tag/Combat/States/FireTagState.cs` ⚠️ **已迁移** - 无 Unity 依赖
- [x] `Definition/Tag/Combat/States/IceTagState.cs` ⚠️ **已迁移** - 无 Unity 依赖
- [x] `Definition/Tag/Combat/StatusEffects/EnemyStatusTagEffectBase.cs` ⚠️ **已迁移** - 无 Unity 依赖
- [x] `Definition/Tag/Combat/StatusEffects/FireTagEffect.cs` ⚠️ **已迁移** - Mathf → System.Math
- [x] `Definition/Tag/Combat/StatusEffects/IEnemyStatusTagEffect.cs` ⚠️ **已迁移** - 无 Unity 依赖
- [x] `Definition/Tag/Combat/StatusEffects/IceTagEffect.cs` ⚠️ **已迁移** - Mathf → System.Math
- [ ] `Definition/Tag/Combat/TagEffectResolver.cs`
- [x] `Definition/Tag/Generation/TagGenerationRule.cs`**已迁移** - 纯 C#
- [x] `Definition/Tag/Generation/RarityTagBudgetRule.cs`**已迁移** - 纯 C#
- [x] `Definition/Tag/Generation/TagGenerationRuleRegistry.cs`**已重构** - 当前使用 `IEnumerable<TagRow>`**过渡态待后续改为 L1 输入模型/Mapper**
- [x] `Definition/Tag/Generation/RarityTagBudgetRuleRegistry.cs`**已重构** - 当前使用 `IEnumerable<RarityTagBudgetRow>`**过渡态待后续改为 L1 输入模型/Mapper**
- [ ] `Definition/Tag/Generation/ComponentTagGenerationService.cs` - 依赖 InventoryTagRandomContext
- [ ] `Definition/Tag/Generation/InventoryTagRandomContext.cs`
- [x] `Definition/Tag/Metadata/Config/AbsoluteZeroTagConfig.cs` ⚠️ **已迁移** - 无 Unity 依赖
- [x] `Definition/Tag/Metadata/Config/BurnSpreadTagConfig.cs` ⚠️ **已迁移** - 无 Unity 依赖
- [x] `Definition/Tag/Metadata/Config/CritTagConfig.cs` ⚠️ **已迁移** - 无 Unity 依赖
- [x] `Definition/Tag/Metadata/Config/ExecutionTagConfig.cs` ⚠️ **已迁移** - 无 Unity 依赖
- [x] `Definition/Tag/Metadata/Config/FireTagConfig.cs` ⚠️ **已迁移** - 无 Unity 依赖
- [x] `Definition/Tag/Metadata/Config/FreezeMaskTagConfig.cs` ⚠️ **已迁移** - 无 Unity 依赖
- [x] `Definition/Tag/Metadata/Config/IceTagConfig.cs` ⚠️ **已迁移** - 无 Unity 依赖
- [x] `Definition/Tag/Metadata/Config/IgniteBurstTagConfig.cs` ⚠️ **已迁移** - 无 Unity 依赖
- [x] `Definition/Tag/Metadata/Config/InfernoTagConfig.cs` ⚠️ **已迁移** - 无 Unity 依赖
- [x] `Definition/Tag/Metadata/Config/OverpenetrateTagConfig.cs` ⚠️ **已迁移** - 无 Unity 依赖
- [x] `Definition/Tag/Metadata/Config/PierceTagConfig.cs` ⚠️ **已迁移** - 无 Unity 依赖
- [x] `Definition/Tag/Metadata/Config/ShatterTagConfig.cs` ⚠️ **已迁移** - 无 Unity 依赖
- [x] `Definition/Tag/Metadata/Config/TagConfigBase.cs` ⚠️ **已迁移** - 无 Unity 依赖
- [x] `Definition/Tag/Metadata/TagDefinition.cs` ⚠️ **已迁移** - 无 Unity 依赖
- [x] `Definition/Tag/Metadata/TagDefinitionRegistry.cs` ⚠️ **已迁移** - 简化版(移除 DR* 依赖)
### Definition/Event11 个文件)
- [ ] `Definition/Event/EventEffect/AddGoldEffect.cs`
- [ ] `Definition/Event/EventEffect/AddRandomCompsEffect.cs`
- [ ] `Definition/Event/EventEffect/DamageRandomTowerEnduranceEffect.cs`
- [x] `Definition/Event/EventEffect/EventEffectBase.cs`**已迁移** - 为 EventOption 提供基础类型
- [ ] `Definition/Event/EventEffect/RemoveRandomCompEffect.cs`
- [ ] `Definition/Event/EventOptionExecutor.cs`
- [ ] `Definition/Event/EventRequirement/CompCountAtLeastRequirement.cs`
- [x] `Definition/Event/EventRequirement/EventRequirementBase.cs`**已迁移** - 为 EventOption 提供基础类型
- [ ] `Definition/Event/EventRequirement/GoldAtLeastRequirement.cs`
- [ ] `Definition/Event/EventRequirement/HasRelicRequirement.cs`
- [ ] `Definition/Event/EventRequirement/TowerCountAtLeastRequirement.cs`
### Factory5 个文件)
- [ ] `Factory/EventEffectFactory.cs`
- [ ] `Factory/EventRequirementFactory.cs`
- [ ] `Factory/OutGameDropItemBuilder.cs`
- [ ] `Factory/PhaseEndConditionFactory.cs`
- [ ] `Factory/RunStateFactory.cs`
### Network11 个文件)
- [ ] `Network/CSPacketBase.cs`
- [ ] `Network/CSPacketHeader.cs`
- [ ] `Network/Packet/CSHeartBeat.cs`
- [ ] `Network/Packet/SCHeartBeat.cs`
- [ ] `Network/PacketBase.cs`
- [ ] `Network/PacketHandler/SCHeartBeatHandler.cs`
- [ ] `Network/PacketHandlerBase.cs`
- [ ] `Network/PacketHeaderBase.cs`
- [ ] `Network/PacketType.cs`
- [ ] `Network/SCPacketBase.cs`
- [ ] `Network/SCPacketHeader.cs`
### UI/Context / RawData大量文件
- [ ] `UI/DialogParams.cs`
- [ ] `UI/Game/Context/CombineAreaContext.cs`
- [ ] `UI/Game/Context/CompAreaContext.cs`
- [ ] `UI/Game/Context/EventFormContext.cs`
- [ ] `UI/Game/Context/EventOptionItemContext.cs`
- [ ] `UI/Game/Context/MainFormContext.cs`
- [ ] `UI/Game/Context/NodeItemContext.cs`
- [ ] `UI/Game/Context/NodeMapFormContext.cs`
- [ ] `UI/Game/Context/ParticipantAreaContext.cs`
- [ ] `UI/Game/Context/RepoFormContext.cs`
- [ ] `UI/Game/Context/RepoFormState.cs`
- [ ] `UI/Game/Context/RepoItemClickActionType.cs`
- [ ] `UI/Game/Context/RepoItemContext.cs`
- [ ] `UI/Game/Context/SellAreaContext.cs`
- [ ] `UI/Game/Context/TowerRepoItemContext.cs`
- [ ] `UI/Game/RawData/EventFormRawData.cs`
- [ ] `UI/Game/RawData/NodeMapFormRawData.cs`
- [ ] `UI/Game/RawData/RepoFormRawData.cs`
- [ ] `UI/Game/RepoParticipantAssignDialogUtility.cs`
- [ ] `UI/Game/View/IRepoDragItemView.cs`
- [ ] `UI/General/Context/DialogFormContext.cs`
- [ ] `UI/General/Context/RewardItemContext.cs`
- [ ] `UI/General/Context/RewardSelectFormContext.cs`
- [ ] `UI/General/Context/TagItemContext.cs`
- [ ] `UI/General/RawData/DialogFormRawData.cs`
- [ ] `UI/General/RawData/ItemDescFormRawData.cs`
- [ ] `UI/General/RawData/RewardSelectFormRawData.cs`
- [ ] `UI/General/RawData/RewardSelectItemRawData.cs`
- [ ] `UI/General/RawData/RewardSelectItemRawDataBuilder.cs`
- [ ] `UI/Menu/Context/MenuFormContext.cs`
- [ ] `UI/Menu/Context/TestMenuFormContext.cs`
- [ ] `UI/Menu/RawData/MenuFormRawData.cs`
- [ ] `UI/Shop/Context/GoodsItemContext.cs`
- [ ] `UI/Shop/Context/ShopFormContext.cs`
- [ ] `UI/Shop/RawData/GoodsItemRawData.cs`
- [ ] `UI/Shop/RawData/ShopFormRawData.cs`
- [ ] `UI/Templates/GameScene/Context/DisplayItemContext.cs`
- [ ] `UI/Templates/GameScene/Context/DisplayListAreaContext.cs`
- [ ] `UI/Templates/GameScene/Context/GoodsItemContext.cs`
- [ ] `UI/Templates/GameScene/Context/HudFormContext.cs`
- [ ] `UI/Templates/GameScene/Context/LevelUpFormContext.cs`
- [ ] `UI/Templates/GameScene/Context/LevelUpRewardItemContext.cs`
- [ ] `UI/Templates/GameScene/Context/ShopFormContext.cs`
- [ ] `UI/Templates/GameScene/RawData/LevelUpFormRawData.cs`
- [ ] `UI/Templates/GameScene/RawData/ShopFormRawData.cs`
- [ ] `UI/Templates/MenuScene/Context/RoleItemContext.cs`
- [ ] `UI/Templates/MenuScene/Context/RolePropertyAreaContext.cs`
- [ ] `UI/Templates/MenuScene/Context/SelectRoleFormContext.cs`
- [ ] `UI/Templates/MenuScene/Context/StartMenuFormContext.cs`
- [ ] `UI/Templates/MenuScene/RawData/SelectRoleFormRawData.cs`
- [ ] `UI/Templates/MenuScene/RawData/StartMenuFormRawData.cs`
- [ ] `UI/Combat/Context/CombatFinishFormContext.cs`
- [ ] `UI/Combat/Context/CombatInfoFormContext.cs`
- [ ] `UI/Combat/Context/CombatSelectActionType.cs`
- [ ] `UI/Combat/RawData/CombatFinishFormRawData.cs`
- [ ] `UI/Combat/RawData/CombatInfoFormRawData.cs`
- [ ] `UI/Combat/RawData/CombatSelectClickObjectType.cs`
- [ ] `UI/Combat/RawData/CombatSelectDisplayMode.cs`
### CustomComponent 纯 C# 文件
- [ ] `Components/IDamageReceiver.cs`
- [ ] `CustomComponent/CombatNode/CombatScheduler/CombatSettlementContext.cs`
- [ ] `CustomComponent/CombatNode/CombatScheduler/EnemyDrop/EnemyDropContext.cs`
- [ ] `CustomComponent/CombatNode/CombatScheduler/EnemyDrop/EnemyDropResult.cs`
- [ ] `CustomComponent/CombatNode/CombatScheduler/ICombatSchedulerPort.cs`
- [ ] `CustomComponent/CombatNode/CombatScheduler/PhaseEndConditions/IPhaseEndCondition.cs`
- [ ] `CustomComponent/CombatNode/CombatScheduler/PhaseEndConditions/NonePhaseEndCondition.cs`
- [ ] `CustomComponent/CombatNode/CombatScheduler/PhaseEndConditions/PhaseEndConditionContext.cs`
- [ ] `CustomComponent/CombatNode/CombatScheduler/PhaseEndConditions/TimeElapsedPhaseEndCondition.cs`
- [ ] `CustomComponent/CombatNode/CombatSettlementCalculator.cs`
- [ ] `CustomComponent/CombatNode/CombatSettlementCommitter.cs`
- [ ] `CustomComponent/CombatNode/EnemyManager/EnemyLifecycleTracker.cs`
- [ ] `CustomComponent/InventoryGeneration/DropPoolRoller.cs`
- [ ] `CustomComponent/InventoryGeneration/InventoryGenerationRandomContext.cs`
- [ ] `CustomComponent/InventoryGeneration/RewardCandidateBuilder.cs`
- [ ] `CustomComponent/PlayerInventory/PlayerInventoryStateStore.cs`
- [ ] `CustomComponent/PlayerInventory/PlayerInventoryTowerRosterService.cs`
- [ ] `CustomComponent/PlayerInventory/PlayerInventoryTradeService.cs`
### Scene/Pathfinding
- [ ] `Scene/Pathfinding/IMapPathfinder.cs`
### Procedure 纯 C#
- [ ] `Procedure/ProcedureMain/FixedRunNodeSequenceBuilder.cs`
- [ ] `Procedure/ProcedureMain/ProcedureMainCombatEntryValidationResult.cs`
- [ ] `Procedure/ProcedureMain/ProcedureMainCombatEntryValidationService.cs`
- [ ] `Procedure/ProcedureMain/ProcedureMainNodeEventGuardService.cs`
- [ ] `Procedure/ProcedureMain/ProcedureMainParticipantTowerCleanupService.cs`
- [ ] `Procedure/ProcedureMain/ProcedureMainRunCompletionService.cs`
- [ ] `Procedure/ProcedureMain/ProcedureMainRunFlowService.cs`
- [ ] `Procedure/ProcedureMain/RunStateAdvanceService.cs`
### Entity
- [x] `Entity/EntityLogic/EnemyTagStatusRuntime.cs`**已迁移** - Domain 内已存在纯 C# 版本Infrastructure 仍保留过渡副本)
### Utility
- [ ] `Utility/EnumUtility.cs`
- [ ] `Utility/InventoryCloneUtility.cs`
- [ ] `Utility/InventoryParticipantUtility.cs`
- [ ] `Utility/InventorySeedUtility.cs`
- [ ] `Utility/ItemDescUtility.cs`
- [ ] `Utility/ShopPriceRuleService.cs`
- [ ] `Utility/WebUtility.cs`
---
## 阶段二L1 重构迁移(技术适配层)
> 说明:以下能力全部归 L1不再计入 L0 完成率。
### 策略 1Vector3 替换
`UnityEngine.Vector3` 替换为 `System.Numerics.Vector3`
| 文件 | 修改内容 |
|------|----------|
| `Definition/DataStruct/AttackPayload.cs` | `Vector3 OriginPosition``System.Numerics.Vector3` |
| `Definition/DataStruct/HitContext.cs` | `Vector3``System.Numerics.Vector3` |
| `Entity/EntityLogic/CombatSelectInputService.cs` | `Vector2``System.Numerics.Vector2` |
### 策略 2GameEntry 静态调用替换为注入服务
| 文件 | 修改内容 |
|------|----------|
| `Definition/Tag/Metadata/TagDefinitionRegistry.cs` | `GameEntry.DataTable` → 注入 `IDataTableService` |
| `Definition/Tag/Presentation/TagDisplayUtility.cs` | `GameEntry.DataTable` → 注入 `IDataTableService` |
| `Utility/AssetUtility.cs` | `GameEntry.*` → 注入服务 |
| `Utility/JsonNetUtility.cs` | `GameFramework.Utility.Json` → 注入 |
### 策略 3DataTable / Row 解析统一归 L1
多数 DR* 类继承 `UnityGameFramework.Runtime.DataRowBase`,留在 L1。
`BinaryReaderExtension/BinaryExtension`(含 `Read7BitEncodedInt32`)属于二进制解析能力,归 L1。
- [ ] `DataTable/DREnemy.cs`
- [ ] `DataTable/DRLevel.cs`
- [ ] `DataTable/DRLevelPhase.cs`
- [ ] `DataTable/DRLevelSpawnEntry.cs`
- [ ] `DataTable/DREvent.cs`
- [ ] `DataTable/DREntity.cs`
- [ ] `DataTable/DRBaseComp.cs`
- [ ] `DataTable/DRBearingComp.cs`
- [ ] `DataTable/DRMusic.cs`
- [ ] `DataTable/DRMuzzleComp.cs`
- [ ] `DataTable/DROutGameDropPool.cs`
- [ ] `DataTable/DRRarityTagBudget.cs`
- [ ] `DataTable/DRScene.cs`
- [ ] `DataTable/DRShopPrice.cs`
- [ ] `DataTable/DRSound.cs`
- [ ] `DataTable/DRTag.cs`
- [ ] `DataTable/DRTagConfig.cs`
- [ ] `DataTable/DRUIForm.cs`
- [ ] `DataTable/DRUISound.cs`
- [ ] `DataTable/DataTableExtension.cs`(含 Vector3/Color 解析)
- [ ] `DataTable/BinaryReaderExtension.cs`L1
- [ ] `DataTable/BinaryExtension.cs`L17bit 编码/加密字符串)
- [ ] `DataTable/TagRow.cs`(过渡态待下沉 L1当前包含 `IDataRow + ParseDataRow`
- [ ] `DataTable/RarityTagBudgetRow.cs`(过渡态待下沉 L1当前包含 `IDataRow + ParseDataRow`
### 策略 4Tilemap 接口抽象
| 文件 | 修改内容 |
|------|----------|
| `Scene/Map/MapTopologyService.cs` | `Tilemap``ITilemap` 接口 |
| `Scene/Map/TowerPlacementService.cs` | `Tilemap``ITilemap` 接口 |
| `Scene/Map/TowerSelectionPresenter.cs` | `Vector3``System.Numerics.Vector3` |
| `Scene/Map/MapCombatRuntimeBridge.cs` | Unity 类型 → 接口 |
| `Scene/Pathfinding/GridMapPathfinder.cs` | `Vector3Int` → 自定义 struct |
### 策略 5Constant.Layer 修复
- [ ] `Definition/Constant/Constant.Layer.cs``LayerMask.NameToLayer` → int 常量
### 策略 6Color 替换
- [ ] `Entity/EntityLogic/CombatSelectUseCaseConfigurator.cs``UnityEngine.Color` → 纯 C# struct
- [ ] `Procedure/ProcedureMain/RunState.cs``UnityEngine.Color` → 纯 C# struct
- [ ] `Utility/IconColorGenerator.cs``UnityEngine.Color` → 纯 C# struct
- [ ] `Utility/TowerIconComposeUtility.cs``UnityEngine.Color/Sprite` → 接口
### 策略 7TagEffectResolver
- [ ] `Definition/Tag/Combat/TagEffectResolver.cs``Mathf``System.Math`
---
## 阶段三L2 保持 Unity
以下文件属于 L2直接保留在 Unity 项目中,无需修改:
### Base3 个文件)
- [ ] `Base/GameEntry.cs`
- [ ] `Base/GameEntry.Builtin.cs`
- [ ] `Base/GameEntry.Custom.cs`
### Components7 个文件)
- [ ] `Components/BasicBaseComp.cs`
- [ ] `Components/BasicBearingComp.cs`
- [ ] `Components/InputComponent.cs`
- [ ] `Components/MovementComponent.cs`
- [ ] `Components/ShooterBullet.cs`
- [ ] `Components/ShooterMuzzleComp.cs`
- [ ] `Components/TowerController.cs`
### CustomComponent/*Component11 个文件)
- [ ] `CustomComponent/BuiltinDataComponent.cs`
- [ ] `CustomComponent/CombatNode/CombatNodeComponent.cs`
- [ ] `CustomComponent/EventNodeComponent.cs`
- [ ] `CustomComponent/HPBar/HPBarComponent.cs`
- [ ] `CustomComponent/InventoryGeneration/InventoryGenerationComponent.cs`
- [ ] `CustomComponent/PlayerInventory/PlayerInventoryComponent.cs`
- [ ] `CustomComponent/ResolutionAdapterComponent.cs`
- [ ] `CustomComponent/ShopNodeComponent.cs`
- [ ] `CustomComponent/SpriteCacheComponent.cs`
- [ ] `CustomComponent/TagRegistry/TagRegistryComponent.cs`
- [ ] `CustomComponent/UIRouterComponent.cs`
### Entity/EntityLogic7 个文件)
- [ ] `Entity/EntityLogic/EntityBase.cs`
- [ ] `Entity/EntityLogic/EnemyEntity.cs`
- [ ] `Entity/EntityLogic/TowerEntity.cs`
- [ ] `Entity/EntityLogic/BulletEntity.cs`
- [ ] `Entity/EntityLogic/Player.cs`
- [ ] `Entity/EntityLogic/MapEntity.cs`
- [ ] `Entity/EntityLogic/CombatSelectUseCaseConfigurator.cs`
### UI/View大量文件
所有继承 `UGuiForm` 的 View 类:
- [ ] `UI/Combat/View/CombatFinishForm.cs`
- [ ] `UI/Combat/View/CombatInfoForm.cs`
- [ ] `UI/Combat/View/CombatSelectBuildArea.cs`
- [ ] `UI/Combat/View/CombatSelectForm.cs`
- [ ] `UI/Combat/View/CombatSelectFuncArea.cs`
- [ ] `UI/Combat/View/TowerSelectItem.cs`
- [ ] `UI/Game/View/CombineArea.cs`
- [ ] `UI/Game/View/CombineSlotItem.cs`
- [ ] `UI/Game/View/CompArea.cs`
- [ ] `UI/Game/View/EventForm.cs`
- [ ] `UI/Game/View/EventOptionItem.cs`
- [ ] `UI/Game/View/MainForm.cs`
- [ ] `UI/Game/View/NodeItem.cs`
- [ ] `UI/Game/View/NodeMapForm.cs`
- [ ] `UI/Game/View/ParticipantArea.cs`
- [ ] `UI/Game/View/RepoForm.cs`
- [ ] `UI/Game/View/RepoItem.cs`
- [ ] `UI/Game/View/SellArea.cs`
- [ ] `UI/Game/View/TowerRepoItem.cs`
- [ ] `UI/General/View/DialogForm.cs`
- [ ] `UI/General/View/IconArea.cs`
- [ ] `UI/General/View/ItemDescForm.cs`
- [ ] `UI/General/View/RewardItem.cs`
- [ ] `UI/General/View/RewardSelectForm.cs`
- [ ] `UI/General/View/TagItem.cs`
- [ ] `UI/General/View/TowerIconArea.cs`
- [ ] `UI/Menu/View/MenuForm.cs`
- [ ] `UI/Menu/View/TestMenuForm.cs`
- [ ] `UI/Shop/View/GoodsItem.cs`
- [ ] `UI/Shop/View/ShopForm.cs`
- [ ] `UI/Templates/GameScene/View/DisplayItem.cs`
- [ ] `UI/Templates/GameScene/View/DisplayItemInfoForm.cs`
- [ ] `UI/Templates/GameScene/View/DisplayItemObject.cs`
- [ ] `UI/Templates/GameScene/View/DisplayListArea.cs`
- [ ] `UI/Templates/GameScene/View/HudForm.cs`
- [ ] `UI/Templates/GameScene/View/LevelUpForm.cs`
- [ ] `UI/Templates/GameScene/View/LevelUpRewardItem.cs`
- [ ] `UI/Templates/GameScene/View/ShopForm.cs`
- [ ] `UI/Templates/MenuScene/View/RoleItem.cs`
- [ ] `UI/Templates/MenuScene/View/RolePropertyArea.cs`
- [ ] `UI/Templates/MenuScene/View/SelectRoleForm.cs`
- [ ] `UI/Templates/MenuScene/View/SettingForm.cs`
- [ ] `UI/Templates/MenuScene/View/StartMenuForm.cs`
- [ ] `UI/HPBarItem.cs`
- [ ] `UI/CommonButton.cs`
- [ ] `UI/UpdateResourceForm.cs`
### UI/Controller多个文件
- [ ] `UI/Combat/Controller/CombatFinishFormController.cs`
- [ ] `UI/Combat/Controller/CombatInfoFormController.cs`
- [ ] `UI/Combat/Controller/CombatSelectFormController.cs`
- [ ] `UI/Game/Controller/EventFormController.cs`
- [ ] `UI/Game/Controller/MainFormController.cs`
- [ ] `UI/Game/Controller/NodeMapFormController.cs`
- [ ] `UI/Game/Controller/RepoFormController.cs`
- [ ] `UI/General/Controller/DialogFormController.cs`
- [ ] `UI/General/Controller/ItemDescFormController.cs`
- [ ] `UI/General/Controller/RewardSelectFormController.cs`
- [ ] `UI/Menu/Controller/MenuFormController.cs`
- [ ] `UI/Menu/Controller/TestMenuFormController.cs`
- [ ] `UI/Shop/Controller/ShopFormController.cs`
- [ ] `UI/Templates/GameScene/Controller/DisplayItemInfoFormController.cs`
- [ ] `UI/Templates/GameScene/Controller/HudFormController.cs`
- [ ] `UI/Templates/GameScene/Controller/LevelUpFormController.cs`
- [ ] `UI/Templates/GameScene/Controller/ShopFormController.cs`
- [ ] `UI/Templates/MenuScene/Controller/SelectRoleFormController.cs`
- [ ] `UI/Templates/MenuScene/Controller/StartMenuFormController.cs`
### Procedure14 个文件)
- [ ] `Procedure/Base/ProcedureBase.cs`
- [ ] `Procedure/Base/ProcedureChangeScene.cs`
- [ ] `Procedure/Base/ProcedureCheckResources.cs`
- [ ] `Procedure/Base/ProcedureCheckVersion.cs`
- [ ] `Procedure/Base/ProcedureInitResources.cs`
- [ ] `Procedure/Base/ProcedureLaunch.cs`
- [ ] `Procedure/Base/ProcedurePreload.cs`
- [ ] `Procedure/Base/ProcedureSplash.cs`
- [ ] `Procedure/Base/ProcedureUpdateResources.cs`
- [ ] `Procedure/Base/ProcedureUpdateVersion.cs`
- [ ] `Procedure/Base/ProcedureVerifyResources.cs`
- [ ] `Procedure/ProcedureMain/ProcedureMain.cs`
- [ ] `Procedure/ProcedureMenu.cs`
- [ ] `Procedure/ProcedureTest.cs`
### Scene4 个文件)
- [ ] `Scene/HideByBoundary.cs`
- [ ] `Scene/Map/House.cs`
- [ ] `Scene/Map/MapDataRefs.cs`
- [ ] `Scene/Map/Spawner.cs`
### PoolObjectBase3 个文件)
- [ ] `PoolObjectBase/HPBarItemObject.cs`
- [ ] `PoolObjectBase/RepoItemObject.cs`
- [ ] `PoolObjectBase/TowerRepoItemObject.cs`
### Network
- [ ] `Network/NetworkChannelHelper.cs`
### Editor3 个文件)
- [ ] `Editor/GameFrameworkConfigs.cs`
- [ ] `Editor/GeometryTDBuildEventHandler.cs`
- [ ] `Editor/SceneSwitchLeft.cs`
---
## 关键依赖链
```
L0/L1 边界阻塞链(纠偏后):
├── 领域规则L0依赖输入模型但不依赖 IDataRow/二进制解析
├── IDataRow/ParseDataRow/7bit 读取必须下沉至 L1DR*/Bridge/Mapper
└── L2 通过 L1 获取领域可用模型,不直接触达底层表解析
三层拆分目标架构2026-05-12 校准后):
├── L0: 纯领域模型/规则(不实现 IDataRow不包含 ParseDataRow
├── L1: DR* / Parser / Bridge / Mapper
│ └── Bridge: UGF DataTableComponent → L0 领域模型
└── L2: Unity 运行时/表现层编排
```
### 重构优先级
1. **第一波**Definition/Enum + Event ✅ 已完成
2. **第二波**Vector3 → System.Numerics.Vector3Mathf → System.Math ✅ **已完成**
3. **第三波**IDataRow 实现、TagRow/RarityTagBudgetRow、TagGenerationRuleRegistry ✅ **已完成(历史完成项,现已纠偏为过渡态)**
4. **第四波**:边界纠偏(已开始)——识别并标记 L0 中越界项为“过渡态待下沉”
5. **第五波**L1 DR* + Parser + BridgeUGF DataTable → L0 领域模型)
6. **第六波**GameEntry 静态调用 → 接口注入L1/L2
7. **第七波**Tilemap/Color 等 Unity 细节抽象L1/L2
8. **第八波**:清理过渡态,实现 L0 零框架依赖
---
## 第一波修改记录2026-04-30
### 进度统计
| 类别 | 源文件数 | 已迁移 | 完成率 |
|------|----------|--------|--------|
| Definition/Enum | 23 | 27* | 100%+ |
| Event | 35 | 35 | 100% |
| **小计** | **58** | **62** | **~34% of L0按当时旧口径统计** |
> *注Enum 源文件23个第一波新增4个枚举从其他层迁移故总计27个。`L0 总约180个文件` 为当时旧口径估算,**已不作为 2026-05-12 后的边界统计依据**。
### 新增文件
| 文件 | 说明 |
|------|------|
| `Definition/Enum/CombatSelectActionType.cs` | 从 `UI/Combat/Context/` 迁移 |
| `Definition/Enum/RunNodeType.cs` | 从 `Procedure/ProcedureMain/RunModel.cs` 迁移枚举 |
| `Definition/Enum/RunNodeStatus.cs` | 从 `Procedure/ProcedureMain/RunModel.cs` 迁移枚举 |
| `Definition/Enum/RunNodeCompletionStatus.cs` | 从 `Procedure/ProcedureMain/RunModel.cs` 迁移枚举 |
| `Definition/DataStruct/RunItemState.cs` | 新建,简化版 |
| `Definition/DataStruct/RunNodeCompletionSnapshot.cs` | 新建,简化版(移除了对 Unity 类型的依赖)|
### 修改文件
| 文件 | 修改内容 |
|------|----------|
| `Event/RepoForm/RepoItemClickedEventArgs.cs` | `UnityEngine.Vector2``System.Numerics.Vector2` |
| `Event/Combat/CombatSelectItemClickEventArgs.cs` | `using GeometryTD.UI` → 迁移的枚举 |
| `Event/Game/NodeCompleteEventArgs.cs` | 依赖迁移的枚举和数据结构 |
| `Event/Game/NodeEnterEventArgs.cs` | `using GeometryTD.Procedure` → 迁移的枚举 |
| `Event/Game/NodeMapNodeEnterRequestedEventArgs.cs` | `using GeometryTD.Procedure` → 迁移的枚举 |
### 命名空间统一
所有新增/修改的 Enum 文件使用 `GeometryTD.Definition` 命名空间(与原有文件保持一致)
---
## 第二波修改记录2026-04-30
### 进度统计
| 类别 | 源文件数 | 已迁移 | 说明 |
|------|----------|--------|------|
| Definition/DataStruct | 2 | 2 | AttackPayload, HitContextVector3 替换) |
| Definition/Tag | 17 | 17 | Tag系统TagDefinition、TagConfig系列、TagEffect系列等 |
| Entity/EntityLogic | 1 | 1 | EnemyTagStatusRuntimeMathf → System.Math |
| **小计** | **20** | **20** | - |
### 新增/迁移文件Mathf 替换)
| 文件 | 修改内容 |
|------|----------|
| `Entity/EntityLogic/EnemyTagStatusRuntime.cs` | Mathf → System.Math |
| `Definition/Tag/Combat/StatusEffects/FireTagEffect.cs` | 新建Mathf → System.Math |
| `Definition/Tag/Combat/StatusEffects/IceTagEffect.cs` | 新建Mathf → System.Math |
| `Definition/Tag/Metadata/TagDefinitionRegistry.cs` | 简化版,移除 DR* 依赖 |
### L0 构建状态
`dotnet build GeometryTD.Domain` **成功**0 警告 0 错误
### 阻塞说明
1. `TagDefinitionRegistry` 简化版已可用,`DRTag`/`DRTagConfig` 依赖已移除
2. `TagGenerationRuleRegistry` 等仍有 `Debug.Assert` 待替换
---
## 第三波修改记录2026-05-01
### 概述
当时采用方案L0 实现 `IDataRow` 接口L1 提供 `DataRowBase` 包装类。
**该方案已在 2026-05-12 边界纠偏后降级为“过渡态”**(原因:`IDataRow/ParseDataRow` 属于 L1 技术适配职责)。
```
[过渡态]
L0(当前物理位置): TagRow : IDataRow
L1(目标归位): DRTag/DataTableBridge/Parser
[目标态]
L0: 纯领域模型(不实现 IDataRow不含 ParseDataRow
L1: DataTable 解析 + 映射到 L0 模型
```
### 新增文件
| 文件 | 说明 |
|------|------|
| `DataTable/TagRow.cs` | 现状:实现 `IDataRow`**过渡态待下沉 L1** |
| `DataTable/RarityTagBudgetRow.cs` | 现状:实现 `IDataRow`**过渡态待下沉 L1** |
| `Definition/Tag/Generation/TagGenerationRule.cs` | 从 src-ref 迁移 |
| `Definition/Tag/Generation/RarityTagBudgetRule.cs` | 从 src-ref 迁移 |
| `Definition/Tag/Generation/TagGenerationRuleRegistry.cs` | 重构为使用 `IEnumerable<TagRow>`**现视为过渡态依赖** |
| `Definition/Tag/Generation/RarityTagBudgetRuleRegistry.cs` | 重构为使用 `IEnumerable<RarityTagBudgetRow>`**现视为过渡态依赖** |
### L0 构建状态
`dotnet build GeometryTD.Domain` **成功**0 警告 0 错误
### 待完成L1 部分)
- [ ] `DataTable/DRTag : DataRowBase` — 包装 TagRow
- [ ] `DataTable/DRRarityTagBudget : DataRowBase` — 包装 RarityTagBudgetRow
- [ ] `Bridge/DataTableBridge` — UGF DataTableComponent → L0 领域模型集合
---
## 验收标准
- [x] L0 独立构建成功(`dotnet build GeometryTD.Domain`)✅ **2026-04-30**
- [ ] L1 引用 L0 无循环依赖
- [ ] L2 引用 L1 无循环依赖
- [ ] 三层整体构建成功(`dotnet build Geometry-Tower-Defense-Base.sln`
- [ ] 原有游戏流程(战斗/商店/组装)在 Unity 中正常运行