Danro/Assets/Scripts/UI/UICreditsTextController.cs
Danil Iarosh 3944534cd0
Some checks failed
Gitea Actions Demo / Explore-Gitea-Actions (push) Has been cancelled
feat: Implement balance system and fix pause bug
- Добавлена система баланса игры (BalanceManager) для управления внутриигровой валютой
- Баланс начисляется за импульсы оплаты и списывается за начало/продолжение игры
- При старте игры весь внесенный баланс списывается, а жизни начисляются в соответствии с количеством оплат
- Добавлены проверки достаточности баланса для начала и продолжения игры
- Интегрирован BalanceManager с PaymentManager и GameManager
- Исправлен баг с возможностью снятия паузы при показе баннера проигрыша/победы
- Добавлена блокировка переключения паузы через IsActive флаг в PauseMenu
- Жизни больше не могут уйти в минус при повторной смерти во время показа баннера
- Настройки стоимости импульса, начала и продолжения игры берутся из SettingsManager
2026-02-09 11:31:34 +03:00

111 lines
3.9 KiB
C#
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using RR.Game2D.Core.Managers;
using RR.Common.Settings;
using RR.Common.Managers;
using TMPro;
using UnityEngine;
namespace RR.Common.UI
{
public class UICreditsTextController : MonoBehaviour
{
// UI elements
[SerializeField] private TextMeshProUGUI livesIncreaseText;
[SerializeField] private TextMeshProUGUI livesText;
// Strings to display
[SerializeField] private string livesIncreaseString = "{0}";
[SerializeField] private string livesString = "У вас будет {0}";
private GameManager _gameManager;
private SettingsManager _settingsManager;
private BalanceManager _balanceManager;
private void Start()
{
_gameManager = GameManager.Instance;
_balanceManager = BalanceManager.Instance;
if (_gameManager == null) return;
_settingsManager = _gameManager.Settings;
if (_settingsManager == null) _settingsManager = SettingsManager.Instance;
UpdateLivesText();
UpdateLivesIncreaseText();
// Подписываемся на изменение баланса для пересчета жизней
if (_balanceManager != null)
{
_balanceManager.OnBalanceChanged.AddListener(OnBalanceChanged);
}
if (_settingsManager != null)
{
_settingsManager.OnSettingsLoaded += UpdateLivesIncreaseText;
_settingsManager.OnSettingsSaved += UpdateLivesIncreaseText;
_settingsManager.OnSettingsLoaded += OnSettingsChanged;
_settingsManager.OnSettingsSaved += OnSettingsChanged;
}
}
private void OnDestroy()
{
if (_gameManager == null) _gameManager = GameManager.Instance;
if (_balanceManager != null)
{
_balanceManager.OnBalanceChanged.RemoveListener(OnBalanceChanged);
}
if (_settingsManager != null)
{
_settingsManager.OnSettingsLoaded -= UpdateLivesIncreaseText;
_settingsManager.OnSettingsSaved -= UpdateLivesIncreaseText;
_settingsManager.OnSettingsLoaded -= OnSettingsChanged;
_settingsManager.OnSettingsSaved -= OnSettingsChanged;
}
}
private void OnBalanceChanged(int newBalance)
{
UpdateLivesText();
}
private void OnSettingsChanged()
{
UpdateLivesText();
}
private void UpdateLivesIncreaseText()
{
if (_settingsManager != null)
livesIncreaseText.text = string.Format(livesIncreaseString, _settingsManager.GetInt("gameplay.additionalLives"));
}
private void UpdateLivesText()
{
if (_gameManager == null || _balanceManager == null || _settingsManager == null)
return;
int currentBalance = _balanceManager.CurrentBalance;
int impulseCost = _settingsManager.GetInt("payment.paymentImpulseCost");
int startLives = _settingsManager.GetInt("gameplay.startLives");
int livesIncrement = _settingsManager.GetInt("gameplay.additionalLives");
if (impulseCost <= 0) impulseCost = 10;
// Рассчитываем количество жизней на основе баланса
int totalImpulses = currentBalance / impulseCost;
int totalLives = startLives;
if (totalImpulses > 0)
{
int additionalImpulses = totalImpulses - 1;
totalLives = startLives + (additionalImpulses * livesIncrement);
}
livesText.text = string.Format(livesString, totalLives);
}
}
}