Some checks failed
Gitea Actions Demo / Explore-Gitea-Actions (push) Has been cancelled
- завершен спринт 24 марта - 2 апреля с опережением плана и закрытием задач раньше срока - расширена и стабилизирована система призов: добавлены и доработаны QR-tier конфиги, новые типы и модели данных, сохранение `qrCodes` в `prizes.json`, fallback-логика и синхронизация через `PrizeSystemManager`, `PrizeDatabase` и `LevelPrizeConfig` - переработан flow настройки QR-призов: добавлены `QRCodeSettingsModal` и связанный UI-код, разнесены короткий текст приза и полный текст сообщения, добавлены шаблоны форматирования, корректная подстановка текста в QR и в UI-модалках, а также сохранение конфигурации между запусками - доработан flow суперприза и текстовых настроек: добавлены fallback-правила показа, корректная обработка пустых строк и строк из одних пробелов, обновлены binders и показ текста в меню - реализована и обновлена отдельная настройка витрины: добавлена `PrizeStandSettingsModal`, обновлена навигация строк, логика выбора ячейки и порогов очков, циклический выбор ячеек, ускорение изменения значений и исправления для keyboard/gamepad UX - доработана игровая модалка витрины `PrizeStandModal`: добавлен вывод очков игрока, форматируемый текст счета, улучшено отображение ячеек и связанная логика выбора приза - исправлен подсчет очков и интеграция с prize flow: `ScoreSystem` переведен на событийное обновление текущего счета, добавлены `CurrentScore`, `CurrentScoreChanged` и корректный display score, витрина и связанные UI-элементы теперь получают актуальные очки, а не нулевые или несвоевременные preview-значения - переработаны модальные окна и навигация UI: улучшены `Modal`, `ModalManager`, `UIRowPointer`, `RulesModal`, `QRCodeModal`, `PrizeStandModal`, `LevelPrizeSettingsModal` и др., чтобы фокус, указатель и submit работали консистентно без мыши - обновлен win/prize UI: доработаны `WinBannerController`, `GameEndUIController`, `MainMenu`, `QRCodeUIController`, `TopPanelTextController` и настройки UI, улучшены тексты баннеров, отображение призов и итогового счета - обновлены сцены и ассеты под новый flow: `MainMenu`, `Level UI`, prefab'ы строк настроек и кнопок, глобальные префабы, шрифты TMP, иконки, recovery-данные и ресурсы UI - добавлены вспомогательные UI-компоненты и служебные скрипты: `ButtonTextFocusColor`, `SelectableDescriptionTarget`, `QRTier` и другие изменения, поддерживающие новый конфигурируемый prize UI
72 lines
2.6 KiB
C#
72 lines
2.6 KiB
C#
using RR.Common.Managers;
|
||
using RR.Game2D.Core.Managers;
|
||
using UnityEngine;
|
||
using UnityEngine.UI;
|
||
|
||
namespace RR.Common.UI
|
||
{
|
||
/// <summary>
|
||
/// УСТАРЕВШИЙ контроллер QR-кодов.
|
||
/// Логика отображения QR-кодов полностью перенесена в WinBannerController:
|
||
/// QR-коды генерируются в PrizeSystemManager и показываются ТОЛЬКО при победе (GameWonEvent).
|
||
/// Удалите этот компонент со сцены и используйте WinBannerController.
|
||
/// </summary>
|
||
[System.Obsolete("Используйте WinBannerController — QR-коды показываются только при победе через PrizeSystemManager.")]
|
||
public class QRCodeUIController : MonoBehaviour
|
||
{
|
||
[SerializeField] private Transform content;
|
||
|
||
private PrizeSystemManager _prizeSystemManager;
|
||
private GameObject[] _qrCodes;
|
||
|
||
private void Start()
|
||
{
|
||
Debug.LogWarning("[QRCodeUIController] Этот компонент устарел. " +
|
||
"Удалите его со сцены — QR-коды управляются через WinBannerController.");
|
||
|
||
_prizeSystemManager = PrizeSystemManager.Instance;
|
||
|
||
GameManager.Instance.GameWonEvent += AddQRCodes;
|
||
}
|
||
|
||
private void OnDestroy()
|
||
{
|
||
if (GameManager.Instance != null)
|
||
GameManager.Instance.GameWonEvent -= AddQRCodes;
|
||
}
|
||
|
||
private void AddQRCodes(float _)
|
||
{
|
||
if (_qrCodes != null) ClearQRCodes();
|
||
|
||
Texture2D[] qrCodesImages = _prizeSystemManager.GetQRCodes(RR.Common.Prizes.QRTier.None);
|
||
_qrCodes = new GameObject[qrCodesImages.Length];
|
||
|
||
for (int i = 0; i < qrCodesImages.Length; i++)
|
||
{
|
||
_qrCodes[i] = new GameObject("QRCode_" + i, typeof(RectTransform), typeof(Image));
|
||
_qrCodes[i].transform.SetParent(content, false);
|
||
|
||
Sprite sprite = Sprite.Create(qrCodesImages[i],
|
||
new Rect(0, 0, qrCodesImages[i].width,
|
||
qrCodesImages[i].height),
|
||
new Vector2(0.5f, 0.5f));
|
||
|
||
_qrCodes[i].GetComponent<Image>().sprite = sprite;
|
||
}
|
||
}
|
||
|
||
private void ClearQRCodes()
|
||
{
|
||
if (_qrCodes == null) return;
|
||
|
||
foreach (GameObject qrCode in _qrCodes)
|
||
{
|
||
Destroy(qrCode);
|
||
}
|
||
|
||
_qrCodes = null;
|
||
}
|
||
}
|
||
}
|