MapData + Event 解耦已完成一轮收口

- `MapData` 已收口为纯初始化快照,不再承载 coin 写接口委托
- 已新增 `MapEntityLoadContext`
  - 用于把 `MapData` 快照与 coin 命令通道拆开传给地图加载
- `CombatLoadingState` 现在会组装:
  - `MapData`
  - `MapEntityLoadContext`
- `CombatLoadSession` / `EntityExtension.ShowMap(...)` 已切到 `MapEntityLoadContext`
- `MapEntity` 当前通过:
  - `MapEntityLoadContext` 获取初始快照与 coin 命令通道
  - `CombatCoinChangedEventArgs` 同步后续 coin 变化
- 已新增 `MapCombatRuntimeBridge`
  - 收口地图侧 coin 当前值、命令调用与事件订阅
- `MapEntity` 不再自己维护 `_currentCoin` 和 coin 事件订阅样板
This commit is contained in:
2026-03-07 20:00:39 +08:00
parent b38088c3ea
commit 3ad7d04b47
15 changed files with 224 additions and 121 deletions
@@ -7,7 +7,7 @@ namespace GeometryTD.UI
{
public class CombatFinishFormUseCase : IUIUseCase
{
private CombatScheduler _combatScheduler;
private ICombatSchedulerHost _combatSchedulerHost;
private CombatSettlementContext _settlementContext;
private bool _isSummaryPrepared;
@@ -27,14 +27,14 @@ namespace GeometryTD.UI
_isSummaryPrepared = true;
}
public CombatFinishFormUseCase(CombatScheduler combatScheduler)
internal CombatFinishFormUseCase(ICombatSchedulerHost combatSchedulerHost)
{
this._combatScheduler = combatScheduler;
_combatSchedulerHost = combatSchedulerHost;
}
public bool TryReturnToMenu()
{
return _combatScheduler.OnCombatFinishReturnRequested();
return _combatSchedulerHost != null && _combatSchedulerHost.OnCombatFinishReturnRequested();
}
private CombatFinishFormRawData BuildModel()
@@ -44,7 +44,7 @@ namespace GeometryTD.UI
_settlementContext = null;
}
BackpackInventoryData rewardInventory = _settlementContext?.RewardInventory;
BackpackInventoryData rewardInventory = _settlementContext?.Summary.RewardInventory;
if (rewardInventory == null)
{
rewardInventory = InventorySeedUtility.CreateSampleInventory();
@@ -52,8 +52,8 @@ namespace GeometryTD.UI
return new CombatFinishFormRawData
{
DefeatedEnemyCount = Mathf.Max(0, _settlementContext?.DefeatedEnemyCount ?? 0),
GainedGold = Mathf.Max(0, _settlementContext?.GainedGold ?? 0),
DefeatedEnemyCount = Mathf.Max(0, _settlementContext?.Summary.DefeatedEnemyCount ?? 0),
GainedGold = Mathf.Max(0, _settlementContext?.Summary.GainedGold ?? 0),
RewardInventory = rewardInventory,
CanReturn = true
};