84 lines
3.0 KiB
C#
84 lines
3.0 KiB
C#
using GeometryTD.Definition;
|
|
using GeometryTD.UI;
|
|
using UnityGameFramework.Runtime;
|
|
|
|
namespace GeometryTD.CustomComponent
|
|
{
|
|
public sealed class CombatSettlementCommitter
|
|
{
|
|
public void CommitSettlementInventory(CombatSettlementContext settlementContext)
|
|
{
|
|
if (settlementContext == null || settlementContext.Flags.IsCommitted)
|
|
{
|
|
return;
|
|
}
|
|
|
|
BackpackInventoryData rewardInventory = settlementContext.Result.RewardInventory ?? new BackpackInventoryData();
|
|
GameEntry.PlayerInventory?.MergeInventory(rewardInventory);
|
|
settlementContext.Result.RewardInventory = rewardInventory;
|
|
settlementContext.Summary.RewardInventory = rewardInventory;
|
|
settlementContext.Result.Endurance.AffectedTowerCount = ApplyDeferredSettlementEndurance(settlementContext);
|
|
settlementContext.Flags.IsCommitted = true;
|
|
}
|
|
|
|
public void ApplySelectedReward(CombatSettlementContext settlementContext, RewardSelectItemRawData selectedReward)
|
|
{
|
|
if (settlementContext?.Result.RewardInventory == null || selectedReward?.SourceItem == null)
|
|
{
|
|
return;
|
|
}
|
|
|
|
TryAppendRewardComponent(settlementContext.Result.RewardInventory, selectedReward.SourceItem);
|
|
settlementContext.Summary.RewardInventory = settlementContext.Result.RewardInventory;
|
|
}
|
|
|
|
private static int ApplyDeferredSettlementEndurance(CombatSettlementContext settlementContext)
|
|
{
|
|
if (settlementContext == null ||
|
|
settlementContext.Result.Endurance.EnduranceLossPerComponent <= 0f ||
|
|
settlementContext.Result.Endurance.TargetTowerInstanceIds.Count <= 0)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
PlayerInventoryComponent inventory = GameEntry.PlayerInventory;
|
|
if (inventory == null)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
return inventory.ReduceTowerEndurance(
|
|
settlementContext.Result.Endurance.TargetTowerInstanceIds,
|
|
settlementContext.Result.Endurance.EnduranceLossPerComponent);
|
|
}
|
|
|
|
private static bool TryAppendRewardComponent(BackpackInventoryData rewardInventory, TowerCompItemData selectedItem)
|
|
{
|
|
if (rewardInventory == null || selectedItem == null)
|
|
{
|
|
return false;
|
|
}
|
|
|
|
if (selectedItem is MuzzleCompItemData muzzleComp)
|
|
{
|
|
rewardInventory.MuzzleComponents.Add(muzzleComp);
|
|
return true;
|
|
}
|
|
|
|
if (selectedItem is BearingCompItemData bearingComp)
|
|
{
|
|
rewardInventory.BearingComponents.Add(bearingComp);
|
|
return true;
|
|
}
|
|
|
|
if (selectedItem is BaseCompItemData baseComp)
|
|
{
|
|
rewardInventory.BaseComponents.Add(baseComp);
|
|
return true;
|
|
}
|
|
|
|
return false;
|
|
}
|
|
}
|
|
}
|