Some checks failed
Gitea Actions Demo / Explore-Gitea-Actions (push) Has been cancelled
Добавлены новые 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
85 lines
2.6 KiB
C#
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);
|
|
}
|
|
}
|
|
}
|
|
|