using System;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using TMPro;
using RR.Common.Managers;
using RR.Common.Settings;
using RR.Game2D.Core.Managers;
namespace RR.Common.UI
{
///
/// Контроллер баннера выигрыша.
/// Модальное окно, которое отображается при победе игрока.
///
public class WinBannerController : Modal
{
[Header("Элементы баннера выигрыша")]
[SerializeField] private TextMeshProUGUI winText;
[SerializeField] private Button mainMenuButton;
[Header("QR-коды")]
[Tooltip("Контейнер для размещения QR-кодов. QR-коды создаются динамически.")]
[SerializeField] private RectTransform qrCodesContainer;
///
/// Событие, вызываемое при закрытии баннера выигрыша.
///
public event Action WinBannerDismissed;
private readonly List _createdQRCodeObjects = new();
protected override void Awake()
{
base.Awake();
if (mainMenuButton)
{
mainMenuButton.onClick.AddListener(OnMainMenuClicked);
}
}
///
/// Показывает баннер выигрыша с указанным временем игры.
///
/// Время игры в секундах
public void ShowWin(float gameTime)
{
if (winText)
{
winText.text = $"Время игры: {TimeFormatHelper.FormatTime(gameTime)}";
}
// Отображаем QR-коды
DisplayQRCodes();
Open();
}
///
/// Отображает QR-коды из PrizeSystemManager.
/// Создаёт объекты полностью динамически без префаба.
///
private void DisplayQRCodes()
{
// Очищаем ранее созданные QR-коды
ClearQRCodes();
if (qrCodesContainer == null) return;
// Проверяем настройку показа QR-кодов
if (SettingsManager.Instance == null || !SettingsManager.Instance.GetBool("prizes.giveBigPrize"))
return;
if (PrizeSystemManager.Instance == null) return;
Texture2D[] qrCodes = PrizeSystemManager.Instance.GetQRCodes();
if (qrCodes == null || qrCodes.Length == 0) return;
// Создаём QR-коды динамически
foreach (Texture2D qrTexture in qrCodes)
{
if (qrTexture == null) continue;
// Создаём GameObject с Image
GameObject qrObject = new GameObject("QRCode", typeof(RectTransform), typeof(Image));
qrObject.transform.SetParent(qrCodesContainer, false);
// Конвертируем Texture2D в Sprite
Sprite qrSprite = Sprite.Create(
qrTexture,
new Rect(0, 0, qrTexture.width, qrTexture.height),
new Vector2(0.5f, 0.5f)
);
// Настраиваем Image
Image image = qrObject.GetComponent();
image.sprite = qrSprite;
image.raycastTarget = false;
_createdQRCodeObjects.Add(qrObject);
}
}
///
/// Очищает созданные QR-код объекты.
///
private void ClearQRCodes()
{
foreach (GameObject obj in _createdQRCodeObjects)
{
if (obj != null)
{
Destroy(obj);
}
}
_createdQRCodeObjects.Clear();
}
private void OnMainMenuClicked()
{
Close();
WinBannerDismissed?.Invoke();
if (GameManager.Instance)
{
GameManager.Instance.SetPause(false);
GameManager.Instance.LoadScene("MainMenu", false);
}
}
protected override void OnDisable()
{
base.OnDisable();
ClearQRCodes();
}
}
}