Start Tag System
This commit is contained in:
+42
-5
@@ -1,6 +1,6 @@
|
||||
# CodeX TODO
|
||||
|
||||
最后更新:2026-03-09
|
||||
最后更新:2026-03-10
|
||||
|
||||
> 目标:基于当前仓库现状,为 `docs/TODO.md` 的 M1 收口补一份更可执行的补充顺序。
|
||||
> 原则:先收主流程,再补硬规则,最后统一文档与验收口径。
|
||||
@@ -130,7 +130,7 @@
|
||||
| [x] | S4-03 | 先固化 Tag 系统设计与首发范围 | `docs/TagSystemDesign.md`<br>`docs/CodeX-TODO.md` | Tag 的来源、汇总、生效与首发集合口径固定 |
|
||||
| [x] | S4-04 | 实现组件实例 Tag 的统一生成入口 | `Assets/GameMain/Scripts/Definition/`<br>`Assets/GameMain/Scripts/CustomComponent/PlayerInventory/` | 掉落、商店、初始种子、事件奖励共用同一生成结果 |
|
||||
| [x] | S4-05 | 实现组塔后的 Tag 汇总与展示入口 | `Assets/GameMain/Scripts/Definition/`<br>`Assets/GameMain/Scripts/CustomComponent/PlayerInventory/`<br>`Assets/GameMain/Scripts/UI/` | 组件 Tag 可汇总为塔级结果,且 UI 展示口径一致 |
|
||||
| [ ] | S4-06 | 实现首批基础 Tag 的战斗生效 | `Assets/GameMain/Scripts/Entity/`<br>`Assets/GameMain/Scripts/Components/`<br>`Assets/GameMain/Scripts/Definition/` | 首发 6~8 个基础 Tag 至少完成一批可验证效果 |
|
||||
| [ ] | S4-06 | 实现首批基础 Tag 的战斗生效 | `Assets/GameMain/Scripts/Entity/`<br>`Assets/GameMain/Scripts/Components/`<br>`Assets/GameMain/Scripts/Definition/` | 首发 6~8 个基础 Tag 至少完成一批可验证效果,且战斗入口与状态运行时结构可继续扩展 |
|
||||
| [ ] | S4-07 | 补齐 Tag 规则与数据表的映射关系 | `Assets/GameMain/Scripts/DataTable/`<br>`Assets/GameMain/Scripts/Definition/` | 表字段不是只存在而未被消费,Tag 参数可配置可解释 |
|
||||
|
||||
> 2026-03-09 更新:`InventoryRarityRuleService` 已落地;塔品质计算与组件品质归一化已统一收口,`PlayerInventoryTowerAssemblyService`、`ShopFormUseCase`、`EnemyDropResolver`、`InventorySeedUtility` 已接入同一规则入口。你已确认 Unity Test Runner 中 `Assets/Tests/EditMode` 全部通过,其中包含新增的 `InventoryRarityRuleServiceTests`。
|
||||
@@ -140,6 +140,12 @@
|
||||
> 2026-03-09 更新:`S4-04` 已落地 `InventoryTagRuleService` 与 `InventoryTagSourceType`;组件实例 Tag 现在统一按 `PossibleTag + Tag.txt.MinRarity + 品质预算` 生成,并只保留当前正式首发 7 个 Tag。`ShopFormUseCase`、`EnemyDropResolver`、`InventorySeedUtility` 已接入该入口,样例库存的组件与塔展示 Tag 已同步为统一结果;同时新增 `InventoryTagRuleServiceTests`。当前 CLI 下 `dotnet build GeometryTD.sln` 仍因本机缺少 Unity 引用和 `Unity.SourceGenerators*.dll` 失败,未能替代 Unity Test Runner 完成最终验证。
|
||||
>
|
||||
> 2026-03-09 更新:`S4-05` 已新增 `TagRuntimeData` 与 `TowerTagAggregationService`;组塔与样例塔现在统一生成塔级 `TagRuntimes`,并保留兼容 `Tags` 投影。`RepoForm`、`CombatFinishForm`、`ItemDescForm` 的塔展示已切到聚合结果,重复 Tag 以 `xN` 文本显示;组件展示仍沿用组件实例 `Tags`。同时新增 `TowerTagAggregationServiceTests`;本轮改动后的最终验证仍以 Unity Test Runner 实跑结果为准。
|
||||
>
|
||||
> 2026-03-10 更新:`S4-06` 已完成第一段落地。战斗链现在已从旧的 `damage + AttackPropertyType` 入口提升为携带 `TagRuntimeData[]` 的命中载荷;`AttackPayload`、`HitContext`、`TagEffectResolver`、`EnemyTagStatusRuntime` 已接入主命中链。当前已实际生效的基础 Tag 为 `Fire`、`Ice`、`Crit`、`Execution`:其中 `Fire` 已改为独立 DOT 公式,并按 `EnemyEntity` 每帧提供的 `deltaTime` 连续结算;`Ice` 已有独立减速状态;`Crit` 与 `Execution` 已进入命中前数值修正。状态类 Tag 已按“每个 Tag 各自配置文件、状态文件、效果文件”的方式拆开,`EnemyTagStatusRuntime` 只负责按激活 Tag 动态 Tick,不再持有具体 Tag 字段。
|
||||
>
|
||||
> 2026-03-10 更新:当前 `S4-06` 仍未整体完成。`Shatter`、`Inferno`、`AbsoluteZero` 仍处于“已注册但 no-op 占位”的状态;`BurnSpread`、`IgniteBurst`、`FreezeMask`、`Pierce`、`Overpenetrate` 仍只有分类与占位路由,没有实际战斗效果。因此当前仓库状态应视为“首批 4 个基础 Tag 已进入战斗,首发 7 个 Tag 尚未收满”,而不是 `S4-06` 全量完成。
|
||||
>
|
||||
> 2026-03-10 更新:`S4-07` 仍未开始正式收口。当前 Tag 参数仍主要承载在代码侧 `TagConfigRegistry` 与各 Tag 配置类中,`Tag.txt` / DataTable 仍只提供基础字典与 `MinRarity` 输入;文档中约定的 `TagRule` 表、触发阶段、权重、效果参数等尚未形成 DataRow 与运行时消费闭环。因此 `S4-07` 继续保持未完成状态。
|
||||
|
||||
### S4-01 边界结论
|
||||
|
||||
@@ -168,6 +174,36 @@
|
||||
- 当前正式首发基础集合为:`Fire`、`Ice`、`Crit`、`Execution`、`Shatter`、`Inferno`、`AbsoluteZero`。
|
||||
- `BurnSpread`、`Pierce`、`Overpenetrate`、`FreezeMask`、`IgniteBurst` 默认放到后续扩展阶段,不作为 `S4` 当前完成标准。
|
||||
|
||||
### S4 当前进度结论(2026-03-10)
|
||||
|
||||
- `S4-02 ~ S4-05` 已完成,品质、组件实例 Tag 生成、塔级 `TagRuntimeData` 汇总、以及 UI 展示口径都已收口。
|
||||
- `S4-06` 已完成第一阶段:战斗链已支持 Tag 透传与统一结算,`Fire`、`Ice`、`Crit`、`Execution` 已有可验证效果,状态类 Tag 的内部结构也已从集中字段改为注册式运行时。
|
||||
- 当前 `S4-06` 的未完成部分集中在首发剩余 3 个 Tag:`Shatter`、`Inferno`、`AbsoluteZero`。它们虽然已进入 `TagType`、配置类、注册表和占位效果类,但还没有实际战斗语义。
|
||||
- `BurnSpread`、`IgniteBurst`、`FreezeMask`、`Pierce`、`Overpenetrate` 已进入分类与配置骨架,但仍属于后续扩展,不计入当前 `S4` 的完成标准。
|
||||
- `S4-07` 仍未开始正式实现。当前仓库只有“代码内注册表配置”,还没有把 `TagRule` 设计回写成 DataTable / DataRow / 运行时消费链。
|
||||
|
||||
### S4-06 当前代码状态
|
||||
|
||||
- 命中链路已统一为 `AttackPayload -> HitContext -> TagEffectResolver`,子弹命中时不再只传裸 `damage`。
|
||||
- `Tower` 侧的 `TagRuntimes` 已能透传到战斗,且保留了旧 `Tags -> TagRuntimes` 的兼容入口,避免旧塔或旧展示数据在战斗中完全失效。
|
||||
- 状态类 Tag 现在按单 Tag 文件拆分:
|
||||
- 配置:每个 Tag 一个 `TagConfig`
|
||||
- 运行时状态:每个状态类 Tag 一个 `TagState`
|
||||
- 效果:每个状态类 Tag 一个 `TagEffect`
|
||||
- `EnemyTagStatusRuntime` 已不再硬编码 `burn/slow` 字段,而是按激活的状态类 Tag 动态调度 Tick。
|
||||
- `Fire` 已改为独立 DOT 公式:当前使用独立 `BurnDamagePerSecondPerStack`,并按敌人实体每帧提供的 `deltaTime` 连续结算,不再依赖命中伤害或内部 `TickInterval`。
|
||||
- `Ice` 仍是独立减速状态,移速倍率通过状态运行时聚合得到。
|
||||
- `Crit`、`Execution` 已通过数值修正链路生效;`Shatter` 仍仅有占位配置与入口,没有实际增伤逻辑。
|
||||
|
||||
### S4 后续执行计划
|
||||
|
||||
1. 先补完 `S4-06` 的首发缺口,只做正式首发集合剩余的 `Shatter`、`Inferno`、`AbsoluteZero`,不提前展开传播、爆炸、穿透、多命中体系。
|
||||
2. `Shatter` 优先接入现有命中前数值修正链,直接消费“目标已减速”这一当前已存在的状态查询能力。
|
||||
3. `Inferno` 与 `AbsoluteZero` 优先作为对已有 `Fire` / `Ice` 的强化 Tag 落地,不额外引入第二套状态系统;要求仍沿用当前“单 Tag 配置 + 单 Tag 效果 + 注册式状态运行时”的结构。
|
||||
4. 首发 7 个 Tag 全部进入战斗并补齐对应 EditMode 测试后,再将 `S4-06` 标记为完成。
|
||||
5. 之后进入 `S4-07`:新增并消费 `TagRule` 表或等价 DataTable 映射,把当前代码内的 Tag 参数逐步迁移为可配置数据,而不是继续堆在 `TagConfigRegistry` 默认值里。
|
||||
6. `S4-07` 完成标准仍以“表字段被实际消费、参数可解释、运行时与文档口径一致”为准,不要求一步到位把全部 12 个 Tag 都配置化。
|
||||
|
||||
## 阶段 S5 - 收口耐久规则
|
||||
|
||||
| 状态 | ID | 任务 | 交付物路径 | 验收标准 |
|
||||
@@ -191,7 +227,7 @@
|
||||
1. 先做 `S1`,把主流程真正收成一条稳定可验收的链。
|
||||
2. `S2` 已完成口径对齐,`NodeMapForm` 不再作为 M1 阻塞项。
|
||||
3. 接下来优先做 `S3`,补齐出战合法性,解决 `P0-10`。
|
||||
4. 再做 `S4`,统一品质 / Tag 的规则口径,解决 `P0-11`。
|
||||
4. 再做 `S4`,统一品质 / Tag 的规则口径,解决 `P0-11`。其中当前优先级已经收口为:先补完 `S4-06` 的首发 7 Tag,再做 `S4-07` 的数据表映射。
|
||||
5. 最后做 `S5`,决定耐久是完整收口还是同步缩范围,解决 `P0-12`。
|
||||
6. 全部完成后做 `S6`,补测试并同步文档状态。
|
||||
|
||||
@@ -199,8 +235,9 @@
|
||||
|
||||
1. `S1` 与 `S2` 已完成口径收口,可直接进入规则侧收尾
|
||||
2. `S3-01 ~ S3-04` 已完成,当前可转入 `S4`
|
||||
3. 接下来决定 `S4` 和 `S5` 是完整实现还是同步缩范围
|
||||
4. 最后补 `S6-01 ~ S6-04`
|
||||
3. 当前先继续完成 `S4-06`,补齐 `Shatter`、`Inferno`、`AbsoluteZero`
|
||||
4. 然后进入 `S4-07`,把 `TagRule` / DataTable 映射真正接进运行时
|
||||
5. 最后补 `S6-01 ~ S6-04`
|
||||
|
||||
## 备注
|
||||
|
||||
|
||||
@@ -465,3 +465,205 @@ Tag 触发阶段固定拆成四段:
|
||||
- 第一批战斗效果优先做状态类与数值修正类,不优先做穿透 / 爆炸 / 传播
|
||||
- MVP 正式首发集合固定为 `Fire`、`Ice`、`Crit`、`Execution`、`Shatter`、`Inferno`、`AbsoluteZero`
|
||||
- `BurnSpread` 明确后移,不作为当前首发集合成员
|
||||
|
||||
# 总体结构
|
||||
|
||||
我们设计 3 个流派方向:
|
||||
|
||||
1. 🔥 元素爆发流(AOE清场)
|
||||
|
||||
2. ❄ 控制叠层流(减速控制)
|
||||
|
||||
3. 🎯 穿透暴击流(单体爆发)
|
||||
|
||||
每个流派 4 个 Tag,其中:
|
||||
|
||||
- 2 个基础属性 Tag
|
||||
|
||||
- 1 个机制 Tag
|
||||
|
||||
- 1 个高阶(稀有)Tag
|
||||
|
||||
总 Tag 数 = 12
|
||||
|
||||
## 一、🔥 元素爆发流
|
||||
|
||||
核心定位:
|
||||
|
||||
> 中等频率攻击 + 元素叠层 + 击杀爆炸清场
|
||||
|
||||
## 4 个 Tag
|
||||
### 1️⃣ Fire(基础)
|
||||
|
||||
效果:
|
||||
|
||||
- 攻击附带灼烧(持续伤害)
|
||||
|
||||
- 可叠加 3 层
|
||||
|
||||
### 2️⃣ BurnSpread(机制)
|
||||
|
||||
触发:
|
||||
|
||||
- 目标死亡时将灼烧传播给周围 2 个敌人
|
||||
|
||||
### 3️⃣ IgniteBurst(组合触发)
|
||||
|
||||
触发条件:
|
||||
|
||||
- 同一塔 ≥2 Fire Tag
|
||||
|
||||
效果:
|
||||
|
||||
- 满层灼烧爆炸(小范围AOE)
|
||||
|
||||
4️⃣ Inferno(稀有)
|
||||
|
||||
品质限定:紫及以上
|
||||
|
||||
效果:
|
||||
|
||||
爆炸伤害 ×2
|
||||
|
||||
灼烧叠层上限 +2
|
||||
|
||||
流派触发逻辑
|
||||
条件 效果
|
||||
1 Fire 基础DOT
|
||||
2 Fire IgniteBurst 激活
|
||||
Fire + BurnSpread 爆炸后传播
|
||||
Inferno + 2 Fire 大范围爆炸
|
||||
二、❄ 控制叠层流
|
||||
|
||||
核心定位:
|
||||
|
||||
降速 + 冻结 + 稳定推进
|
||||
|
||||
4 个 Tag
|
||||
1️⃣ Ice(基础)
|
||||
|
||||
效果:
|
||||
|
||||
攻击附带减速
|
||||
|
||||
可叠加 5 层
|
||||
|
||||
2️⃣ FreezeMark(机制)
|
||||
|
||||
触发:
|
||||
|
||||
目标叠满 5 层冻结 1 秒
|
||||
|
||||
3️⃣ Shatter(组合触发)
|
||||
|
||||
触发:
|
||||
|
||||
冻结目标受到暴击时额外伤害
|
||||
|
||||
4️⃣ AbsoluteZero(稀有)
|
||||
|
||||
品质限定:紫及以上
|
||||
|
||||
效果:
|
||||
|
||||
冻结时间 +50%
|
||||
|
||||
冻结爆裂产生小范围伤害
|
||||
|
||||
流派触发逻辑
|
||||
条件 效果
|
||||
1 Ice 减速
|
||||
Ice + FreezeMark 满层冻结
|
||||
冻结 + Shatter 爆裂伤害
|
||||
AbsoluteZero 群控升级
|
||||
三、🎯 穿透暴击流
|
||||
|
||||
核心定位:
|
||||
|
||||
低频高伤 + 直线穿透 + 单体爆发
|
||||
|
||||
4 个 Tag
|
||||
1️⃣ Pierce(基础)
|
||||
|
||||
效果:
|
||||
|
||||
子弹穿透 2 个敌人
|
||||
|
||||
2️⃣ Crit(基础)
|
||||
|
||||
效果:
|
||||
|
||||
+15% 暴击率
|
||||
|
||||
3️⃣ Overpenetrate(机制)
|
||||
|
||||
触发:
|
||||
|
||||
穿透第一个敌人后伤害提升 30%
|
||||
|
||||
4️⃣ Execution(稀有)
|
||||
|
||||
品质限定:紫及以上
|
||||
|
||||
效果:
|
||||
|
||||
暴击对生命低于30%目标伤害 ×2
|
||||
|
||||
流派触发逻辑
|
||||
条件 效果
|
||||
Pierce 直线清场
|
||||
Crit 随机爆发
|
||||
Pierce + Crit Overpenetrate 激活
|
||||
Execution 斩杀强化
|
||||
四、品质与 Tag 关系设计
|
||||
|
||||
建议规则:
|
||||
|
||||
品质 Tag 数量
|
||||
白 1
|
||||
绿 1
|
||||
蓝 2
|
||||
紫 2 + 稀有概率
|
||||
红 3(含稀有)
|
||||
|
||||
这样:
|
||||
|
||||
低品质仍有存在价值
|
||||
|
||||
高品质增加构筑复杂度
|
||||
|
||||
稀有 Tag 不会泛滥
|
||||
|
||||
五、组合系统可视化建议
|
||||
|
||||
在组装界面显示:
|
||||
|
||||
🔥 元素爆发(已激活)
|
||||
|
||||
灼烧爆炸
|
||||
|
||||
传播效果
|
||||
|
||||
❄ 冰霜控制(未激活)
|
||||
|
||||
需要 FreezeMark
|
||||
|
||||
这样玩家会有“完成拼图”的感觉。
|
||||
|
||||
六、数值安全机制(防止爆炸)
|
||||
|
||||
每个机制必须有:
|
||||
|
||||
触发冷却(0.5~1秒)
|
||||
|
||||
最大叠层限制
|
||||
|
||||
爆炸不触发爆炸(防无限连锁)
|
||||
|
||||
群体上限目标数
|
||||
|
||||
例如:
|
||||
|
||||
BurnSpread 最多传播 3 次。
|
||||
|
||||
否则后期怪物多时会帧率爆炸。
|
||||
Reference in New Issue
Block a user