PJ/Assets/scripts/dotfs_scripts/UI_MailItem.cs

112 lines
No EOL
4 KiB
C#
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using UnityEngine;
using UnityEngine.UI;
using TMPro;
using System.Text;
public class UI_MailItem : MonoBehaviour
{
[Header("UI Components")]
[SerializeField] private TMP_Text titleText;
[SerializeField] private TMP_Text senderText;
[SerializeField] private Image iconImage;
[SerializeField] private Button interactionButton;
[SerializeField] private CanvasGroup canvasGroup;
[SerializeField] private GameObject newMailIndicator;
[SerializeField] private ShopVisualConfig visualConfig;
[Header("Settings")]
[SerializeField] private MailIconDatabase iconDb;
private MailEntry _mailData;
private void Awake()
{
if (interactionButton == null)
interactionButton = GetComponent<Button>();
if (canvasGroup == null)
canvasGroup = GetComponent<CanvasGroup>();
if (interactionButton != null)
interactionButton.onClick.AddListener(OnItemClicked);
}
private void OnItemClicked()
{
if (_mailData != null && MANAGER_WindowsBase.Instance != null && MANAGER_WindowsBase.Instance.UI != null)
{
MANAGER_WindowsBase.Instance.UI.ShowMailDetails(_mailData);
}
}
public void Setup(MailEntry data)
{
// 1. Сохраняем ссылку на данные
_mailData = data;
// 2. ПРИСВАИВАЕМ ТЕКСТ (Данные теперь берутся из visuals и content)
// В MailContent обычно лежит заголовок (subject/title),
// а в MailVisuals — имя отправителя.
if (titleText != null && data.content != null)
{
// Если в MailContent поле называется 'title' или 'subject'
// Замените .title на нужное имя из вашего класса MailContent
titleText.text = FormatCustomTags(data.content.title);
}
if (senderText != null && data.visuals != null)
{
senderText.text = data.visuals.sender_name;
}
// 3. ИКОНКА
if (iconImage != null && data.visuals != null && iconDb != null)
{
Sprite foundIcon = iconDb.GetIcon(data.visuals.icon_id);
if (foundIcon != null)
{
iconImage.sprite = foundIcon;
}
else
{
// Если иконка не найдена, удаляем объект, на котором висит Image
Destroy(iconImage.gameObject);
// Обнуляем ссылку, чтобы другие части кода не пытались к ней обратиться
iconImage = null;
}
}
// 4. СОСТОЯНИЯ (Через Менеджер)
bool claimed = MANAGER_Mail.Instance.IsRewardClaimed(data.id);
bool read = MANAGER_Mail.Instance.IsMailRead(data.id);
// 5. ВИЗУАЛ
if (interactionButton != null)
interactionButton.interactable = !claimed;
if (canvasGroup != null)
canvasGroup.alpha = claimed ? 0.4f : 1.0f;
if (newMailIndicator != null)
newMailIndicator.SetActive(!read && !claimed);
}
private string FormatCustomTags(string rawText)
{
if (string.IsNullOrEmpty(rawText) || visualConfig == null) return rawText;
StringBuilder sb = new StringBuilder(rawText);
// Используем цвета из конфига, переводя их в Hex
sb.Replace("[y]", $"<color={visualConfig.GetHex(visualConfig.yellowTag)}>");
sb.Replace("[b]", $"<color={visualConfig.GetHex(visualConfig.blueTag)}>");
sb.Replace("[r]", $"<color={visualConfig.GetHex(visualConfig.redTag)}>");
sb.Replace("[o]", $"<color={visualConfig.GetHex(visualConfig.orangeTag)}>");
sb.Replace("[/c]", "</color>");
return sb.ToString();
}
}