Files
Cielonos/Assets/Scripts/MainGame/Items/Consumables/Recycler.cs
SoulliesOfficial 39b43680a9 爆更
2026-07-18 03:16:20 -04:00

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