62 lines
1.9 KiB
C#
62 lines
1.9 KiB
C#
using System.Collections.Generic;
|
||
using UnityEngine;
|
||
|
||
/// <summary>
|
||
/// Определяет хватает ли денег для прохождения в режимы
|
||
/// </summary>
|
||
public class PaymentGate : MonoBehaviour
|
||
{
|
||
[SerializeField] private PaymentUI paymentUI;
|
||
public Dictionary<GameMode, bool> gameModeAccess { get; private set; }
|
||
private List<GameMode> cachedGameModes;
|
||
public void Initialize(List<GameMode> gameModes)
|
||
{
|
||
FillAccessDictionary(gameModes);
|
||
cachedGameModes = new List<GameMode>(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.TakeMoney(gameMode.Price);
|
||
SceneLoader.LoadScene(gameMode.SceneName);
|
||
}
|
||
else
|
||
{
|
||
Debug.Log($"Режим {gameMode.Alias} недоступен");
|
||
}
|
||
}
|
||
|
||
private void FillAccessDictionary(List<GameMode> gameModes)
|
||
{
|
||
gameModeAccess = new Dictionary<GameMode, bool>();
|
||
foreach (GameMode gameMode in gameModes)
|
||
gameModeAccess[gameMode] = EnoughMoney(gameMode, WalletManager.Balance);
|
||
}
|
||
|
||
private bool EnoughMoney(GameMode gameMode, int balance) => balance >= gameMode.Price;
|
||
}
|