83 lines
2.8 KiB
C#
83 lines
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);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|