Danro/Assets/Scripts/UI/GamePriceDisplay.cs
Danil Iarosh c1d8cb89c9
Some checks failed
Gitea Actions Demo / Explore-Gitea-Actions (push) Has been cancelled
feat: add UI animator, game price display, improve lighting reliability
Добавлены новые UI-компоненты и исправлена надёжность подсветки

- Добавлен UIElementAnimator — универсальный аниматор UI-элементов (покачивание, движение вверх-вниз, пульсация масштаба)
- Добавлен GamePriceDisplay — отображение стоимости игры из настроек (payment.startGameCost, payment.currency)
- Добавлен метод StartIdleEffects() в GameManager для гарантированного запуска мигания шапки и последовательности эффектов
- Исправлена подсветка, не включавшаяся при переходе в главное меню: OnSceneLoaded теперь вызывает StartIdleEffects()
- Исправлено восстановление подсветки при переподключении платы: ComSystemManager использует StartIdleEffects() для MainMenu
- Добавлены LightController.IsHatOn и ResendHatState() для корректного отслеживания состояния шапки
- Исправлено зависание спецэффектов при мигании шапки: LightSequence теперь переотправляет команду эффекта каждые 2 сек
- Убраны дублирующиеся вызовы Blink/SetLight из LoadScene (теперь обрабатывается в OnSceneLoaded)
- Обновлена сцена MainMenu, ассеты шрифтов, удалён старый префаб Coin
2026-03-05 17:03:03 +03:00

85 lines
2.6 KiB
C#

using RR.Common.Managers;
using RR.Common.Settings;
using TMPro;
using UnityEngine;
namespace RR.Common.UI
{
/// <summary>
/// Отображает стоимость одной игры.
/// Значения берутся из настроек: <c>payment.startGameCost</c>, <c>payment.paymentImpulseCost</c>,
/// <c>payment.currency</c>.
/// </summary>
[AddComponentMenu("RR/UI/Game Price Display")]
[RequireComponent(typeof(TextMeshProUGUI))]
public class GamePriceDisplay : MonoBehaviour
{
[Header("Формат отображения")]
[Tooltip("Формат строки. {0} — стоимость, {1} — валюта")]
[SerializeField] private string format = "{0} {1}";
[Tooltip("Текст при бесплатной игре")]
[SerializeField] private string freeGameText = "Бесплатно";
private TextMeshProUGUI _text;
private SettingsManager _settingsManager;
private void Awake()
{
_text = GetComponent<TextMeshProUGUI>();
}
private void Start()
{
_settingsManager = SettingsManager.Instance;
if (_settingsManager != null)
{
_settingsManager.OnSettingsLoaded += UpdateDisplay;
_settingsManager.OnSettingsSaved += UpdateDisplay;
}
UpdateDisplay();
}
private void OnDestroy()
{
if (_settingsManager != null)
{
_settingsManager.OnSettingsLoaded -= UpdateDisplay;
_settingsManager.OnSettingsSaved -= UpdateDisplay;
}
}
private void UpdateDisplay()
{
if (_text == null) return;
if (_settingsManager == null)
{
_settingsManager = SettingsManager.Instance;
if (_settingsManager == null) return;
}
bool isFreeGame = _settingsManager.GetBool("payment.freeGame");
if (isFreeGame)
{
_text.text = freeGameText;
return;
}
int startGameCost = _settingsManager.GetInt("payment.startGameCost");
int impulseCost = _settingsManager.GetInt("payment.paymentImpulseCost");
if (impulseCost <= 0) impulseCost = 10;
if (startGameCost <= 0) startGameCost = impulseCost;
string currency = _settingsManager.GetString("payment.currency");
_text.text = string.Format(format, startGameCost, currency);
}
}
}