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; }