geometry-tower-defense/Assets/GameMain/Scripts/UI/Combat/UseCase/CombatFinishFormUseCase.cs

74 lines
2.3 KiB
C#

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
};
}
}
}