using UnityEngine; using UnityEngine.Events; public class MemoryPieceReward : MonoBehaviour { [Header("Reference")] [SerializeField] private MemoryProgressManager memoryProgressManager; [Header("Reward")] [SerializeField] private int rewardAmount = 1; [SerializeField] private bool giveOnlyOnce = true; [Header("Auto Find")] [SerializeField] private bool autoFindManager = true; [Header("Events")] public UnityEvent onRewardGiven; public UnityEvent onRewardAlreadyGiven; [Header("Debug")] [SerializeField] private bool showDebugLog = true; private bool alreadyGiven; private void Awake() { if (memoryProgressManager == null && autoFindManager) memoryProgressManager = FindFirstObjectByType(); } public void GiveReward() { if (giveOnlyOnce && alreadyGiven) { onRewardAlreadyGiven?.Invoke(); if (showDebugLog) Debug.Log("[MemoryPieceReward] 이미 지급된 기억의 조각입니다."); return; } if (memoryProgressManager == null) { Debug.LogWarning("[MemoryPieceReward] MemoryProgressManager가 연결되지 않았습니다."); return; } memoryProgressManager.AddMemoryPiece(rewardAmount); alreadyGiven = true; onRewardGiven?.Invoke(); if (showDebugLog) Debug.Log($"[MemoryPieceReward] 기억의 조각 +{rewardAmount}"); } public void ResetReward() { alreadyGiven = false; } }