Danro/Assets/Scripts/UI/TopPanelTextController.cs
Danil Iarosh 78d7679e2b
Some checks failed
Gitea Actions Demo / Explore-Gitea-Actions (push) Has been cancelled
feat(prizes, ui): complete Mar 24-Apr 2 sprint ahead of schedule
- завершен спринт 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
2026-04-01 12:47:17 +03:00

66 lines
1.9 KiB
C#

using UnityEngine;
using TMPro;
using RR.Game2D.Core.Managers;
namespace RR.Common.UI
{
public class TopPanelTextController : MonoBehaviour
{
[SerializeField] private int livesCount;
[SerializeField] private int coinsCount;
[SerializeField] private string levelNumber;
[SerializeField] private TextMeshProUGUI livesText;
[SerializeField] private TextMeshProUGUI coinsText;
[SerializeField] private TextMeshProUGUI levelText;
private void OnEnable()
{
if (GameManager.Instance != null)
{
GameManager.Instance.CoinsChanged += OnCoinsChanged;
GameManager.Instance.LivesChanged += OnLivesChanged;
}
}
private void OnDisable()
{
if (GameManager.Instance != null)
{
GameManager.Instance.CoinsChanged -= OnCoinsChanged;
GameManager.Instance.LivesChanged -= OnLivesChanged;
}
}
void Start()
{
livesCount = GameManager.Instance.Lives;
coinsCount = GameManager.Instance.Coins;
levelNumber = $"{GameManager.Instance.World}-{GameManager.Instance.Stage}";
livesText.text = livesCount.ToString();
coinsText.text = FormatCoins(coinsCount);
levelText.text = levelNumber;
}
private void OnCoinsChanged(int newCoins)
{
if (coinsCount != newCoins)
{
coinsCount = newCoins;
coinsText.text = FormatCoins(coinsCount);
}
}
private void OnLivesChanged(int newLives)
{
livesText.text = newLives.ToString();
}
private static string FormatCoins(int totalCoins)
{
return (totalCoins % 100).ToString();
}
}
}