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