Commit Graph

70 Commits

Author SHA1 Message Date
SepComet aa44170d56 InventoryGenerationComponent + TagRegistryComponent 收口 2026-03-13 11:06:14 +08:00
SepComet 0c92fd9886 调整 OutGameDropPool 表定义 + 添加部分组件定义 2026-03-13 10:08:12 +08:00
SepComet 26aaa945a9 G3 finish 2026-03-13 09:46:59 +08:00
SepComet 53b6b261dd InventoryGenerationComponent G2 2026-03-12 17:34:00 +08:00
SepComet f67888a8da 拆分 UIController 组装 Context 职责 + 描述文本滚动展示 2026-03-12 16:45:20 +08:00
SepComet 4962b98714 重构
- 统一 ItemDescForm/RewardItem/GoodsItem 的描述格式
- 减少组件属性的 Clone 数量,目前只在合并仓库、组装防御塔时才进行复制
- 删除先前留下的冗余 fallback 代码
2026-03-12 15:58:14 +08:00
SepComet 9e59865368 G1-04 2026-03-12 13:33:35 +08:00
SepComet 99ed963faa G1-01 + G1-02 2026-03-12 13:20:02 +08:00
SepComet 3840f8e65a S7-03 + S7-04 + S7-05 2026-03-12 11:24:38 +08:00
SepComet 185ea43323 S7-01 + S7-02 2026-03-12 10:46:11 +08:00
SepComet 09ebe6e3f3 S6 回归与文档收尾 2026-03-11 21:19:53 +08:00
SepComet 8c8f786013 S5 finish 2026-03-11 17:24:15 +08:00
SepComet 9c5871b518 S5-04 2026-03-11 16:48:26 +08:00
SepComet 113decb414 S5-01 + S5-02 + S5-03 2026-03-11 15:36:18 +08:00
SepComet c019f9f527 S4 收尾 2026-03-11 15:02:44 +08:00
SepComet 515fe95441 S4-07 process 3
- 组件 Tag 数量预算不再写死在 ResolveTagBudget(...) 里,而是走 RarityTagBudget.txt -> DRRarityTagBudget -> RarityTagBudgetRuleRegistry -> InventoryTagRuleService 这条表驱动链。
- TagBudget.txt:1 新增了按品质的 MinCount/MaxCount,预算缓存和加载入口分别在 RarityTagBudgetRuleRegistry.cs:7 和 ProcedurePreload.cs:18。
- 生成逻辑已经接到新规则,InventoryTagRuleService.cs:10 现在会先按 Tag.txt 过滤/加权,再按 RarityTagBudget 决定抽几个 Tag。
2026-03-11 13:16:33 +08:00
SepComet b1b68ebde5 S4-07 process 2
当前 `Tag.txt -> DRTag -> TagGenerationRuleRegistry` 已形成组件 Tag 生成规则闭环:
- `InventoryTagRuleService` 不再主要依赖内部 `MinRarity` 硬编码,而是统一消费 `DRTag` 提供的 `MinRarity + Weight`
- `ShopFormUseCase`、`EnemyDropResolver`、`InventorySeedUtility` 也已切回这一统一入口。
- 现阶段的职责边界明确为:`Tag.txt` 负责基础字典与生成规则,`TagConfig.txt` 负责触发阶段、描述与效果参数。
2026-03-11 11:20:16 +08:00
SepComet 9de2e50262 S4-07 process 1 2026-03-11 10:18:14 +08:00
SepComet 52f9e212b9 Start Tag System 2026-03-10 13:11:30 +08:00
SepComet 34ef001ef3 - S4-03 | 先固化 Tag 系统设计与首发范围
- S4-04 | 实现组件实例 Tag 的统一生成入口
- S4-05 | 实现组塔后的 Tag 汇总与展示入口
2026-03-09 21:06:43 +08:00
SepComet 73b7adedb8 - S4-01 先确定 M1 需要的品质 / Tag
- S4-02 把品质计算整理成单一入口 规则边界
- S4-03 先固化 Tag 系统设计与首发范围
2026-03-09 20:34:22 +08:00
SepComet 2d09b01c55 fix
- TowerSelectItem 显示问题
- CombatSelectForm 不同分辨率的适配
2026-03-09 19:59:11 +08:00
SepComet af20eeecfa 阶段 S3 - 收口出战合法性 2026-03-09 19:47:46 +08:00
SepComet 88641f17b0 S3-01 + S3-02 2026-03-09 17:50:49 +08:00
SepComet 793a87c171 补全 S1 测试
- 调整 CombatNode 正常结束与异常的变量语义,现在是 DidCombatWin 与 Exception
- 补充测试样例
- 完成 S1 目标
2026-03-08 21:10:03 +08:00
SepComet 1023239880 迁移测试文件,建立主程序集 2026-03-08 18:08:13 +08:00
SepComet 548bc77ba6 规范类命名 2026-03-08 17:00:21 +08:00
SepComet 47ed27bebb 补充事件参数 + 完善 UI 设计
- 事件节点在 EventNodeComponent.cs 的 StartEvent/EndEvent 会携带 runId/nodeId/nodeType/sequenceIndex
- 商店节点在 ShopNodeComponent.cs 也会带同一套字段
- 战斗节点通过 CombatNodeComponent.cs 把上下文传进 CombatScheduler,再由 CombatRunningPhaseState.cs 发 NodeEnterEventArgs、由   CombatSchedulerFlowCoordinator.cs 发 NodeCompleteEventArgs
- NodeCompleteEventArgs.cs 现在新增了 SequenceIndex
- 各种 UI 的覆盖问题
2026-03-08 11:51:00 +08:00
SepComet 5c6f9bf3a4 RunNode 接入游戏主流程
- NodeMapForm:节点地图
    - NodeItem:节点入口
2026-03-08 11:27:51 +08:00
SepComet c81bf97903 调整项目目录 2026-03-08 09:29:09 +08:00
SepComet c04c049c6a 添加商店 UI 2026-03-07 22:50:15 +08:00
SepComet 2b86582ff7 固定 10 节点大关的生成层,但还没有接入主流程
- 新增了 FixedRunNodeSequenceBuilder.cs,现在 Plain 主题会固定生成 1战 2事 3战 4店 5战 6事 7战 8店 9事 10Boss。普通战斗节点的 LinkedLevelId 固定映射为 1 -> 2 -> 3 -> 1,第 10 个 Boss 节点固定绑定 Level 4。

- RunStateFactory.cs 增加了 CreateFixedRun(...),可以直接创建带 10 节点固定序列的 RunState。RunModel.cs 也补了几个只读查询:NodeCount、GetNodeBySequenceIndex(...)、IsBossNode(...),方便后面接真实流程。
2026-03-07 21:52:39 +08:00
SepComet 5afcaafff7 实现单局 Run 模型的基础落地
- 核心改动在 RunModel.cs、RunStateFactory.cs 和 RunStateAdvanceService.cs。现在项目里有了 RunNodeType / RunNodeStatus / RunNodeSeed / RunNodeState / RunState,并支持用预置节点序列创建 Run,以及在节点完成后推进、更新局内库存快照、标记通关或失败。

- 库存边界也补上了。PlayerInventoryComponent.cs 新增了 ReplaceInventorySnapshot(...),底层通过 PlayerInventoryStateStore.cs 重建工作副本,避免后续把 Run 真值硬塞回 PlayerInventory 内部状态。

- 节点事件载体已经扩展为可承载 Run 上下文,同时保留原来的无参 Create() 以兼容现有调用点。相关改动在 NodeEnterEventArgs.cs 和 NodeCompleteEventArgs.cs。

- 我还补了纯模型编辑器测试,覆盖 Run 创建、节点推进、失败标记和事件快照克隆,文件在 RunStateTests.cs。
2026-03-07 21:45:13 +08:00
SepComet 380f901c1a refactor 8:
- CombatScheduler 不再反向访问 GameEntry.CombatNode。现在由 CombatNodeComponent.cs:322 在初始化时把完成回调传进 scheduler,运行时回调保存在 CombatSchedulerRuntimeContext.cs:27,完成时由 CombatSchedulerFlowCoordinator.cs:245 触发;主题解析也只看当前战斗上下文,不再回退查 facade,见 CombatSchedulerFlowCoordinator.cs:161。同时把 MapEntity 的 coin 回调改成直接连到资源真值来源 CombatLoadingState.cs:56,并把 ICombatSchedulerHost 上那两个资源转发接口删掉,见 ICombatSchedulerHost.cs:5。

- 地图加载入口也收紧了。CombatLoadSession 现在要求必须有 MapEntityLoadContext.InitialMapData,不再走隐式兜底,见 CombatLoadSession.cs:227。EntityExtension 删除了 ShowMap(MapData) 旧重载,当前只保留 ShowMap(MapEntityLoadContext),见 EntityExtension.cs:52;MapEntity 也不再接受裸 MapData 的遗留分支,见 MapEntity.cs:263。
2026-03-07 21:01:03 +08:00
basil 703fd6f540 Refine combat settlement exit flow 2026-03-07 20:09:50 +08:00
SepComet 3ad7d04b47 MapData + Event 解耦已完成一轮收口
- `MapData` 已收口为纯初始化快照,不再承载 coin 写接口委托
- 已新增 `MapEntityLoadContext`
  - 用于把 `MapData` 快照与 coin 命令通道拆开传给地图加载
- `CombatLoadingState` 现在会组装:
  - `MapData`
  - `MapEntityLoadContext`
- `CombatLoadSession` / `EntityExtension.ShowMap(...)` 已切到 `MapEntityLoadContext`
- `MapEntity` 当前通过:
  - `MapEntityLoadContext` 获取初始快照与 coin 命令通道
  - `CombatCoinChangedEventArgs` 同步后续 coin 变化
- 已新增 `MapCombatRuntimeBridge`
  - 收口地图侧 coin 当前值、命令调用与事件订阅
- `MapEntity` 不再自己维护 `_currentCoin` 和 coin 事件订阅样板
2026-03-07 20:00:39 +08:00
SepComet b38088c3ea refactor 7:
- 拆分 CombatScheduler,将公用方法与字段拆分为:
    - FlowCoordinator
    - RuntimeContext
- 地图侧现在收口为“MapData 初始快照 + CombatCoinChangedEventArgs 同步 + 独立命令桥接”
2026-03-07 19:42:17 +08:00
SepComet eb818e6295 - 添加 CombatFailedState 执行路径
- CombatInfoForm 测试异常方法
2026-03-07 18:45:25 +08:00
SepComet 3badbe9212 文件迁移 2026-03-07 18:26:28 +08:00
SepComet ab7c7172b8 refactor 6:
- CombatInfoFormUseCase.cs 改成回调驱动:
    - 不再直接读 GameEntry.CombatNode
    - 由 CombatLoadSession.cs 在打开 CombatInfoForm 前注入 modelProvider 和 TryEndCombat 回调
- CombatSelectFormUseCase.cs 的默认 coin provider 改成返回 0,不再偷偷 fallback 到 GameEntry.CombatNode
- CombatFinishFormUseCase.cs 去掉了未准备 summary 时对 GameEntry.CombatNode 的兜底读取
- MapData.cs 进一步补充了战斗初始快照:
    - InventorySnapshot
    - ParticipantTowerSnapshot
- CombatLoadingState.cs 现在会把这些背包/参战塔快照也一起打进 MapData
- MapEntity.cs 配置建塔面板时不再直接读 PlayerInventory,改为用 MapData 里的快照
2026-03-07 15:22:24 +08:00
SepComet ca7b2f2dca refactor 5:
- MapData.cs 现在会携带战斗初始上下文:
    - InitialCoin
    - 建塔 TowerStatsData 快照
    - TryConsumeCoin / AddCoin 运行时回调
- CombatLoadingState.cs 负责从 CombatInRunResourceManager 读取 coin 和 build stats 快照,组装 MapData 后再交给加载链。
- CombatLoadSession.cs 改成接收外部构造好的 MapData,不再自己只塞一个 LevelId。
- CombatScheduler.cs 不再在 Start() 里直接发起地图加载,加载细节回到 CombatLoadingState。
- MapEntity.cs 已经不再直接读 GameEntry.CombatNode 的 coin / build count / build stats,也不再通过它做 coin 读写:
    - 初始 coin 和 build stats 从 MapData 读取
    - 后续 coin 通过 CombatCoinChangedEventArgs 同步
    - 建塔/升级/拆塔时的 coin 变更通过 MapData 注入回调执行
2026-03-07 15:12:18 +08:00
SepComet ccb4738b96 refactor 5:
- CombatSettlementFlowService.cs 负责结算上下文构建、基地血量奖励修正、奖励选择准备、奖励追加、结算背包提交、FinishForm 摘要准备。
- CombatSettlementContext.cs 变成独立共享上下文,不再作为 CombatScheduler 内部私有类。
- 状态链改成各司其职:
    - CombatSettlementState.cs 负责结束战斗现场并构建结算上下文。
    - CombatRewardSelectionState.cs 只负责进入奖励选择流程。
    - CombatFinishFormState.cs 只负责提交结算背包并打开 FinishForm。
- CombatScheduler.cs 删除了大块结算/奖励构建细节,保留状态切换、共享运行时和少量桥接回调。
2026-03-07 15:05:59 +08:00
SepComet e488a2ca0f refactor 4:
- CombatWaitingForPhaseEndState.cs 不再调用旧的 PhaseLoopRuntime.ShouldEndCurrentPhase(...),改为构造 PhaseEndConditionContext,再通过
PhaseEndConditionFactory.Create(currentPhase.EndType) 执行判定。
- PhaseLoopRuntime.cs 删除了旧的 phase 结束规则实现,现在只保留 phase 运行时数据管理,职责和架构文档一致。
- 为了让 BossDeadPhaseEndCondition 真正可用,我补了 boss 真值链路:
    - EnemyLifecycleTracker.cs 现在会跟踪存活 boss。
    - EnemyManager.cs 暴露 HasAliveBoss,并在 EntryType.Boss 刷怪时标记 boss 身份。
2026-03-07 14:45:42 +08:00
SepComet 91eeeaaeea refactor 3:
- EnemyManager.cs 不再计算 droppedCoin / droppedGold / baseDamage,只在敌人隐藏完成后区分“击杀”还是“非击杀到家”,并把 DREnemy 上报给 CombatScheduler。
- CombatScheduler.cs 新增统一入口:
  - OnEnemyDefeated(DREnemy enemy):通过 EnemyDropResolver 解析掉落,再调用 CombatInRunResourceManager 入账,并按结果决定是否触发局外掉落判定。
  - OnEnemyReachedBase(DREnemy enemy):从 enemy.BaseDamage 解析伤害,再统一扣减基地血量。
2026-03-07 14:42:19 +08:00
SepComet 853886797c refactor 2: 迁移局内资源真值
- CombatInRunResourceManager 现在持有并管理:
    - CurrentCoin
    - CurrentBaseHp
    - MaxBaseHp
    - GainedCoin / GainedGold
    - 本局 BuildTowerStats 快照
    - 奖励背包快照
    - CombatInRunResourceManager.cs:38
    - CombatInRunResourceManager.cs:46
    - CombatInRunResourceManager.cs:89
    - CombatInRunResourceManager.cs:156
- CombatScheduler 变成资源访问入口,不再通过 CombatNodeComponent 持有 coin/baseHp/build stats 真值。
    - 启动时先初始化局内资源。
    - 对外提供 CurrentCoin / CurrentGold / CurrentBaseHp / CurrentBuildTowerCount
    - 提供 TryConsumeCoin / AddCoin / TryGetBuildTowerStats
- CombatNodeComponent 已退回 facade:
    - 不再保存 _currentCoin / _currentGold / _currentBaseHp / _currentBuildTowerStats
    - 只做只读转发和启动/结束协调
- 资源变化事件现在由资源管理器发布,并补上了 delta 字段:

额外修正
- Reset() 现在会清掉奖励背包里的 ParticipantTowerInstanceIds,避免跨局残留。
- TryConsumeCoin(0) 保持原先返回 true 的语义。
2026-03-07 11:41:47 +08:00
SepComet 1d7c5b80d9 refactor 1: 新增/重命名类定义
- 将资源服务类型从 CombatResourceManager 重命名为 CombatInRunResourceManager,并同步更新现有引用。
    - CombatScheduler.cs:28
    - CombatInRunResourceManager.cs:11
    - CombatFinishFormState.cs:22
- 新增掉落解析骨架:
    - EnemyDropResolveContext.cs:6
    - EnemyDropResolveResult.cs:3
    - EnemyDropResolver.cs:7
- 新增 phase end condition 骨架:
    - IPhaseEndCondition.cs:5
    - PhaseEndConditionContext.cs:5
    - PhaseEndConditionFactory.cs:5
    - 以及 4 个实现类:
        - NonePhaseEndCondition
        - TimeElapsedPhaseEndCondition
        - EnemiesClearedPhaseEndCondition
        - BossDeadPhaseEndCondition
2026-03-07 11:30:44 +08:00
SepComet 0ff04f02f4 拆分 CombatScheduler 状态机到独立文件 2026-03-07 11:21:07 +08:00
SepComet 34446ae42a Update CombatNodeArchitecture.md 2026-03-06 21:02:40 +08:00
SepComet 8a478982f8 补充参战防御塔进入战斗逻辑
- 将 Inventory 中参战的防御塔数据传递到 CombatSelectForm 中
- 为防御塔的图标展示添加 TowerRepoItem 与 TowerIconArea 适配防御塔的三层 Image
2026-03-05 13:44:49 +08:00
SepComet 9db9aeabcd 重构
- 重构 `RepoItem`,统一点击事件
- 重构 `PlayerInventoryComponent`:
    - `PlayerInventoryStateStore`:状态与库存写模型
    - `PlayerInventoryTowerAssemblyService`:炮塔组装域
    - `PlayerInventoryTowerRosterService`:编队/耐久域
    - `InventoryParticipantUtility`/`InventoryCloneUtility`/`InventorySeedUtility`:通用工具类
2026-03-04 22:04:51 +08:00