using UnityEngine; /// /// Interaction requirement that allows combining the follower's held item with this pickup if a valid combination rule exists. /// [RequireComponent(typeof(Pickup))] public class CombineWithBehavior : InteractionRequirementBase { /// /// Attempts to combine the follower's held item with this pickup's item. /// /// The follower attempting the interaction. /// True if the combination was successful, false otherwise. public override bool TryInteract(FollowerController follower) { var heldItem = follower.CurrentlyHeldItem; var pickup = GetComponent(); if (heldItem == null) { // DebugUIMessage.Show("You need an item to combine."); OnFailure?.Invoke(); return true; } if (pickup == null || pickup.itemData == null) { DebugUIMessage.Show("Target item is missing or invalid."); OnFailure?.Invoke(); return false; } var rule = GameManager.Instance.GetCombinationRule(heldItem, pickup.itemData); if (rule != null && rule.result != null) { // Remove both items and add result to follower's inventory follower.SetHeldItem(rule.result); follower.justCombined = true; OnSuccess?.Invoke(); return true; } else { string heldName = heldItem.itemName ?? "an item"; string targetName = pickup.itemData.itemName ?? "target item"; // DebugUIMessage.Show($"Cannot combine {heldName} with {targetName}."); OnFailure?.Invoke(); return true; } } }