83 lines
No EOL
2.8 KiB
C#
83 lines
No EOL
2.8 KiB
C#
using UnityEngine;
|
||
using TMPro;
|
||
using UnityEngine.UI;
|
||
|
||
public class UI_QuestItem : MonoBehaviour
|
||
{
|
||
[SerializeField] private TextMeshProUGUI titleText;
|
||
[SerializeField] private TextMeshProUGUI descText;
|
||
[SerializeField] private TextMeshProUGUI progressText;
|
||
[SerializeField] private Button claimButton;
|
||
|
||
private QuestData _data;
|
||
|
||
public void Setup(QuestData data)
|
||
{
|
||
if (data == null)
|
||
{
|
||
Debug.LogError($"[UI_QuestItem] {gameObject.name}: Setup called with NULL data!");
|
||
return;
|
||
}
|
||
|
||
_data = data;
|
||
|
||
// Логируем, что данные получены
|
||
Debug.Log($"[UI_QuestItem] Setting up quest: ID={_data.id}, Title={_data.title}");
|
||
|
||
if (titleText != null) titleText.text = _data.title;
|
||
else Debug.LogWarning($"[UI_QuestItem] {gameObject.name}: titleText reference is missing!");
|
||
|
||
if (descText != null) descText.text = _data.description;
|
||
|
||
UpdateUI();
|
||
|
||
if (claimButton != null)
|
||
{
|
||
claimButton.onClick.RemoveAllListeners();
|
||
claimButton.onClick.AddListener(() => {
|
||
Debug.Log($"[UI_QuestItem] Claim button clicked for quest: {_data.id}");
|
||
MANAGER_QuestProgress.Instance.ClaimReward(_data);
|
||
});
|
||
}
|
||
}
|
||
|
||
public void UpdateUI()
|
||
{
|
||
if (_data == null) return;
|
||
|
||
if (MANAGER_QuestProgress.Instance == null)
|
||
{
|
||
Debug.LogError("[UI_QuestItem] MANAGER_QuestProgress Instance is missing!");
|
||
return;
|
||
}
|
||
|
||
int current = MANAGER_QuestProgress.Instance.GetProgress(_data.id);
|
||
bool isDone = MANAGER_QuestProgress.Instance.IsQuestReady(_data);
|
||
bool isClaimed = MANAGER_QuestProgress.Instance.IsQuestCompleted(_data.id);
|
||
|
||
Debug.Log($"[UI_QuestItem] Updating UI for {_data.id}: Progress={current}/{_data.requiredAmount}, Ready={isDone}, Claimed={isClaimed}");
|
||
|
||
if (progressText != null)
|
||
{
|
||
progressText.text = isClaimed ? "Завершено!" : $"{current} / {_data.requiredAmount}";
|
||
}
|
||
|
||
if (claimButton != null)
|
||
{
|
||
claimButton.interactable = isDone && !isClaimed;
|
||
}
|
||
|
||
// КРИТИЧЕСКАЯ ПРОВЕРКА: Если квест выполнен, ты его скрываешь.
|
||
// Если данные загрузились как "уже выполненные", объект исчезнет сразу после спавна.
|
||
if (isClaimed)
|
||
{
|
||
Debug.Log($"[UI_QuestItem] Quest {_data.id} is already claimed. Hiding object.");
|
||
gameObject.SetActive(false);
|
||
}
|
||
else
|
||
{
|
||
// На всякий случай включаем, если он был выключен в префабе
|
||
gameObject.SetActive(true);
|
||
}
|
||
}
|
||
} |