86 lines
2.2 KiB
C#
86 lines
2.2 KiB
C#
using UnityEngine;
|
|
using UnityEngine.Events;
|
|
|
|
/// <summary>
|
|
/// 미니게임 성공, 퀘스트 완료, 버튼 이벤트 등에서 아이템을 지급할 때 사용합니다.
|
|
/// 예: 낚시 성공 이벤트 -> ItemReward.GiveReward()
|
|
/// </summary>
|
|
[DisallowMultipleComponent]
|
|
public class ItemReward : MonoBehaviour
|
|
{
|
|
[Header("Reference")]
|
|
[SerializeField] private InventoryManager inventoryManager;
|
|
|
|
[Header("Reward")]
|
|
[SerializeField] private InventoryItemType rewardItemType = InventoryItemType.Fish;
|
|
[SerializeField] private int rewardAmount = 1;
|
|
[SerializeField] private bool giveOnlyOnce = false;
|
|
|
|
[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 (inventoryManager == null && autoFindManager)
|
|
inventoryManager = FindFirstObjectByType<InventoryManager>();
|
|
}
|
|
|
|
public void GiveReward()
|
|
{
|
|
if (giveOnlyOnce && alreadyGiven)
|
|
{
|
|
onRewardAlreadyGiven?.Invoke();
|
|
|
|
if (showDebugLog)
|
|
Debug.Log("[ItemReward] 이미 지급된 아이템 보상입니다.");
|
|
|
|
return;
|
|
}
|
|
|
|
if (inventoryManager == null)
|
|
{
|
|
Debug.LogWarning("[ItemReward] InventoryManager가 연결되지 않았습니다.");
|
|
return;
|
|
}
|
|
|
|
int amount = Mathf.Max(1, rewardAmount);
|
|
inventoryManager.AddItem(rewardItemType, amount);
|
|
alreadyGiven = true;
|
|
|
|
onRewardGiven?.Invoke();
|
|
|
|
if (showDebugLog)
|
|
Debug.Log($"[ItemReward] {rewardItemType} +{amount}");
|
|
}
|
|
|
|
public void GiveRewardAmount(int amount)
|
|
{
|
|
rewardAmount = Mathf.Max(1, amount);
|
|
GiveReward();
|
|
}
|
|
|
|
public void ResetRewardState()
|
|
{
|
|
alreadyGiven = false;
|
|
}
|
|
|
|
public void SetRewardItemType(InventoryItemType itemType)
|
|
{
|
|
rewardItemType = itemType;
|
|
}
|
|
|
|
public void SetInventoryManager(InventoryManager manager)
|
|
{
|
|
inventoryManager = manager;
|
|
}
|
|
}
|