2026-06-19 UI, UI로직

This commit is contained in:
skrwns304@gmail.com
2026-06-19 14:27:40 +09:00
parent b751a9ed66
commit b1e85a5b89
549 changed files with 18058 additions and 20 deletions

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