99 lines
3.5 KiB
C#
99 lines
3.5 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using GeometryTD.DataTable;
|
|
using GeometryTD.Definition;
|
|
using GeometryTD.UI;
|
|
using UnityEngine;
|
|
using UnityGameFramework.Runtime;
|
|
|
|
namespace GeometryTD.CustomComponent
|
|
{
|
|
public sealed class CombatSettlementService
|
|
{
|
|
private const int RewardSelectDisplayCount = 3;
|
|
private readonly CombatSettlementCalculator _calculator = new();
|
|
private readonly CombatSettlementCommitter _committer = new();
|
|
|
|
public CombatSettlementContext BuildSettlementContext(
|
|
bool didCombatWin,
|
|
DRLevel currentLevel,
|
|
int defeatedEnemyCount,
|
|
CombatRunResourceStore resourceStore)
|
|
{
|
|
return _calculator.BuildSettlementContext(
|
|
didCombatWin,
|
|
currentLevel,
|
|
defeatedEnemyCount,
|
|
resourceStore);
|
|
}
|
|
|
|
public void CommitSettlementInventory(CombatSettlementContext settlementContext)
|
|
{
|
|
_committer.CommitSettlementInventory(settlementContext);
|
|
}
|
|
|
|
public bool TryPrepareRewardSelection(
|
|
CombatSettlementContext settlementContext,
|
|
int displayPhaseIndex,
|
|
LevelThemeType themeType,
|
|
RewardSelectFormUseCase rewardSelectFormUseCase,
|
|
Action<RewardSelectItemRawData> onRewardSelected,
|
|
Action onGiveUp)
|
|
{
|
|
if (settlementContext == null || rewardSelectFormUseCase == null)
|
|
{
|
|
return false;
|
|
}
|
|
|
|
IReadOnlyList<TowerCompItemData> candidateItems = GameEntry.InventoryGeneration.BuildRewardCandidates(
|
|
displayPhaseIndex,
|
|
themeType,
|
|
RewardSelectDisplayCount);
|
|
if (candidateItems == null || candidateItems.Count <= 0)
|
|
{
|
|
settlementContext.Flags.ShouldOpenRewardSelection = false;
|
|
return false;
|
|
}
|
|
|
|
rewardSelectFormUseCase.SetCallbacks(onRewardSelected, onGiveUp);
|
|
rewardSelectFormUseCase.ConfigureRewardCandidates(
|
|
candidateItems,
|
|
displayCount: RewardSelectDisplayCount,
|
|
refreshCost: 0,
|
|
allowRefreshOnce: false,
|
|
allowGiveUp: false,
|
|
tipText: "基地满血奖励:请选择 1 个组件");
|
|
|
|
RewardSelectFormRawData rawData = rewardSelectFormUseCase.CreateInitialModel();
|
|
if (rawData == null || rawData.RewardItems == null || rawData.RewardItems.Length <= 0)
|
|
{
|
|
settlementContext.Flags.ShouldOpenRewardSelection = false;
|
|
return false;
|
|
}
|
|
|
|
settlementContext.Flags.DidEnterRewardSelection = true;
|
|
GameEntry.UIRouter.OpenUI(UIFormType.RewardSelectForm, rawData);
|
|
return true;
|
|
}
|
|
|
|
public void ApplySelectedReward(CombatSettlementContext settlementContext, RewardSelectItemRawData selectedReward)
|
|
{
|
|
_committer.ApplySelectedReward(settlementContext, selectedReward);
|
|
}
|
|
|
|
public void OpenCombatFinishForm(
|
|
CombatSettlementContext settlementContext,
|
|
CombatFinishFormUseCase combatFinishFormUseCase)
|
|
{
|
|
if (settlementContext == null || combatFinishFormUseCase == null)
|
|
{
|
|
return;
|
|
}
|
|
|
|
combatFinishFormUseCase.SetSummary(settlementContext);
|
|
GameEntry.UIRouter.OpenUI(UIFormType.CombatFinishForm);
|
|
}
|
|
|
|
}
|
|
}
|