using GeometryTD.CustomComponent; using GeometryTD.Definition; using UnityEngine; namespace GeometryTD.UI { public class CombatFinishFormUseCase : IUIUseCase { private readonly RepoFormUseCase _repoFormUseCase = new RepoFormUseCase(); private CombatScheduler _combatScheduler; private int _defeatedEnemyCount; private int _gainedGold; private BackpackInventoryData _rewardInventory; private bool _isSummaryPrepared; public CombatFinishFormRawData CreateInitialModel() { return BuildModel(); } public CombatFinishFormRawData TryRefresh() { return BuildModel(); } public void SetSummary(int defeatedEnemyCount, int gainedGold, BackpackInventoryData rewardInventory = null) { _defeatedEnemyCount = Mathf.Max(0, defeatedEnemyCount); _gainedGold = Mathf.Max(0, gainedGold); _rewardInventory = rewardInventory; _isSummaryPrepared = true; } public CombatFinishFormUseCase(CombatScheduler combatScheduler) { this._combatScheduler = combatScheduler; } public bool TryReturnToMenu() { return _combatScheduler.OnCombatFinishReturnRequested(); } private CombatFinishFormRawData BuildModel() { if (!_isSummaryPrepared) { _defeatedEnemyCount = GameEntry.CombatNode != null ? Mathf.Max(0, GameEntry.CombatNode.LastDefeatedEnemyCount) : 0; _gainedGold = GameEntry.CombatNode != null ? Mathf.Max(0, GameEntry.CombatNode.LastGainedGold) : 0; _rewardInventory = null; } BackpackInventoryData rewardInventory = _rewardInventory; if (rewardInventory == null) { RepoFormRawData repoRawData = _repoFormUseCase.CreateInitialModel(); rewardInventory = repoRawData != null ? repoRawData.Inventory : null; } return new CombatFinishFormRawData { DefeatedEnemyCount = _defeatedEnemyCount, GainedGold = _gainedGold, RewardInventory = rewardInventory, CanReturn = true }; } } }