M1 回合制战斗架构收敛与 1v1 攻击闭环:BattleRuntime 内核、组件唯一入口、UI 数据驱动与 EditMode 测试

- 删除中间契约(BattleStartRequest/BattlePlayerInput/BattleReturnPlan/桥接与策略接口/FlowState),收敛为 BattleViewState/BattleStep/一层 BattleEvent
- 新增内部 BattleRuntime/BattleUnit/BattleStatus 共享上下文;TurnBattleComponent 成为唯一外部入口,吸收启动/暂停/回写职责
- 内核支持 1v1 攻击闭环:效果公式、HP/MP 钳制、阵亡、Victory/TotalDefeat、敌人随机决策;敌人行动间歇 0.6s 由组件协程编排并经 StepListener 推送
- UI:玩家卡片/敌人槽/回合槽按战局重建,图标配置驱动(含新增 EnemyConfig.Icon),每轮刷新一次 TurnSlots 且轮内只移动高亮
- 新增 Tests 程序集 + InternalsVisibleTo,25 个 BattleRuntime 纯逻辑用例全部通过
This commit is contained in:
huangjun
2026-09-02 08:42:04 +08:00
parent 8413c2688b
commit 7dcac0ac87
65 changed files with 3067 additions and 1225 deletions
@@ -241,7 +241,6 @@ namespace SepCore.Editor
i == 0 ? Ink : MutedWhite, TextAlignmentOptions.Center, FontStyles.Bold);
BattleTurnSlotItem slot = slotRect.gameObject.AddComponent<BattleTurnSlotItem>();
slot.ConfigureEditor(marker.gameObject, icon, label);
RegisterReference(slot, "turnSlot" + (i + 1));
}
}
@@ -292,7 +291,6 @@ namespace SepCore.Editor
Image mpFill = CreateBar(cardRect, "MP", contentX, 112f, 242f, Blue, mp, maxMp, out TextMeshProUGUI mpText);
BattleActorCardItem card = cardRect.gameObject.AddComponent<BattleActorCardItem>();
card.ConfigureEditor(marker.gameObject, icon, hpFill, mpFill, name, hpText, mpText);
RegisterReference(card, "playerCard" + (index + 1));
}
@@ -330,7 +328,6 @@ namespace SepCore.Editor
Image hpFill = CreateEnemyBar(slotRect, hp[i], maxHp[i], out TextMeshProUGUI hpText);
BattleEnemySlotItem slot = slotRect.gameObject.AddComponent<BattleEnemySlotItem>();
slot.ConfigureEditor(targetButton, selected.gameObject, icon, hpFill, name, hpText);
RegisterReference(slot, "enemySlot" + (i + 1));
}
}