using System.Collections.Generic;
using UnityEngine;
///
/// Определяет хватает ли денег для прохождения в режимы
///
public class PaymentGate : MonoBehaviour
{
[SerializeField] private PaymentUI paymentUI;
public Dictionary gameModeAccess { get; private set; }
private List cachedGameModes;
public void Initialize(List gameModes)
{
FillAccessDictionary(gameModes);
cachedGameModes = new List(gameModeAccess.Keys);
WalletManager.OnBalanceChanged += Refresh;
paymentUI.GamemodeChosen += TryEnterGameMode;
}
private void OnDestroy()
{
WalletManager.OnBalanceChanged -= Refresh;
paymentUI.GamemodeChosen -= TryEnterGameMode;
}
public void Refresh(int currentBalance)
{
foreach (var gameMode in cachedGameModes)
{
gameModeAccess[gameMode] = EnoughMoney(gameMode, currentBalance);
}
paymentUI.Refresh();
}
public void TryEnterGameMode(GameMode gameMode)
{
if(!gameModeAccess.ContainsKey(gameMode))
{
Debug.LogError($"Не найдена запись о доступе в режим {gameMode.name}");
return;
}
if (gameModeAccess[gameMode])
{
WalletManager.TryTakeMoney(gameMode.Price);
SceneLoader.LoadScene(gameMode.SceneName);
}
else
{
Debug.Log($"Режим {gameMode.Alias} недоступен");
}
}
private void FillAccessDictionary(List gameModes)
{
gameModeAccess = new Dictionary();
foreach (GameMode gameMode in gameModes)
gameModeAccess[gameMode] = EnoughMoney(gameMode, WalletManager.Balance);
}
private bool EnoughMoney(GameMode gameMode, int balance) => balance >= gameMode.Price;
}