2026-06-19 UI, UI로직
This commit is contained in:
85
Assets/My project/Inventory/Scripts/ItemReward.cs
Normal file
85
Assets/My project/Inventory/Scripts/ItemReward.cs
Normal file
@@ -0,0 +1,85 @@
|
||||
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;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user