Some checks failed
Gitea Actions Demo / Explore-Gitea-Actions (push) Has been cancelled
- Добавлена система баланса игры (BalanceManager) для управления внутриигровой валютой - Баланс начисляется за импульсы оплаты и списывается за начало/продолжение игры - При старте игры весь внесенный баланс списывается, а жизни начисляются в соответствии с количеством оплат - Добавлены проверки достаточности баланса для начала и продолжения игры - Интегрирован BalanceManager с PaymentManager и GameManager - Исправлен баг с возможностью снятия паузы при показе баннера проигрыша/победы - Добавлена блокировка переключения паузы через IsActive флаг в PauseMenu - Жизни больше не могут уйти в минус при повторной смерти во время показа баннера - Настройки стоимости импульса, начала и продолжения игры берутся из SettingsManager
111 lines
3.9 KiB
C#
111 lines
3.9 KiB
C#
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);
|
||
}
|
||
}
|
||
} |