81 lines
2.2 KiB
C#
81 lines
2.2 KiB
C#
using System.Collections.Generic;
|
|
using Cielonos.MainGame.Rewards;
|
|
using UnityEngine;
|
|
|
|
namespace Cielonos.MainGame.Inventory.Collections
|
|
{
|
|
public class Recycler : ConsumableBase, ICombatRewardModifierProvider
|
|
{
|
|
private RecyclerCombatRewardModifier _modifier;
|
|
|
|
public override void OnObtained()
|
|
{
|
|
base.OnObtained();
|
|
RegisterCombatRewardModifiers(RunManager.Instance);
|
|
}
|
|
|
|
public override void OnDiscarded()
|
|
{
|
|
base.OnDiscarded();
|
|
_modifier?.Expire();
|
|
}
|
|
|
|
public void RegisterCombatRewardModifiers(RunManager runManager)
|
|
{
|
|
if (runManager == null || stackAmount <= 0)
|
|
{
|
|
return;
|
|
}
|
|
|
|
if (_modifier == null || _modifier.IsExpired)
|
|
{
|
|
_modifier = new RecyclerCombatRewardModifier(this);
|
|
}
|
|
|
|
runManager.AddCombatRewardModifier(_modifier);
|
|
}
|
|
|
|
private class RecyclerCombatRewardModifier : ICombatRewardModifier
|
|
{
|
|
private readonly Recycler _owner;
|
|
private bool _expired;
|
|
|
|
public RecyclerCombatRewardModifier(Recycler owner)
|
|
{
|
|
_owner = owner;
|
|
}
|
|
|
|
public bool IsExpired => _expired || _owner == null || _owner.stackAmount <= 0;
|
|
|
|
public void Modify(CombatRewardContext context, List<CombatRewardInstruction> rewards)
|
|
{
|
|
if (IsExpired || RunManager.Instance == null || !RunManager.Instance.IsNormalCombatNode(context.NodeType))
|
|
{
|
|
return;
|
|
}
|
|
|
|
if (!_owner.Use(1))
|
|
{
|
|
return;
|
|
}
|
|
|
|
rewards.Add(new CombatRewardInstruction
|
|
{
|
|
type = CombatRewardInstructionType.SupplyPack,
|
|
count = 1,
|
|
});
|
|
Debug.Log("[Recycler] 自动使用,额外生成一个 SupplyPack。");
|
|
}
|
|
|
|
public void OnDispatched(CombatRewardContext context)
|
|
{
|
|
}
|
|
|
|
public void Expire()
|
|
{
|
|
_expired = true;
|
|
}
|
|
}
|
|
}
|
|
}
|