92 lines
2.4 KiB
C#
92 lines
2.4 KiB
C#
using System;
|
|
using UnityEngine;
|
|
|
|
public static class WalletManager
|
|
{
|
|
public static int Balance { get; private set; }
|
|
|
|
/// <summary>
|
|
/// Колбэк при любом изменении баланса. Аргумент - новый баланс.
|
|
/// </summary>
|
|
public static event Action<int> OnBalanceChanged;
|
|
|
|
/// <summary>
|
|
/// Колбэк при увеличении баланса. Аргумент - на сколько увеличилось
|
|
/// </summary>
|
|
public static event Action<int> OnBalanceAdd;
|
|
|
|
/// <summary>
|
|
/// Колбэк при попытке уменьшения баланса. Аргумент 1 - успешна ли попытка снятия; Аргумент 2 - на сколько мы пытались уменьшить баланс
|
|
/// </summary>
|
|
public static event Action<bool, int> OnPaymentAttempt;
|
|
|
|
private static string BalancePrefsKey;
|
|
|
|
public static void Initialize(WalletManagerConfig config)
|
|
{
|
|
BalancePrefsKey = config.BalancePrefsKey;
|
|
|
|
if (config.KeepMoneyBetweenSessions)
|
|
{
|
|
Load();
|
|
}
|
|
}
|
|
|
|
public static void OnCoin()
|
|
{
|
|
AddMoney(SettingsManager.GetInt(SettingKey.ImpulsePrice, 10));
|
|
}
|
|
|
|
public static void AddMoney(int amount)
|
|
{
|
|
Balance += amount;
|
|
CountersSystem.Add(CountersSystem.CounterType.Revenue, amount);
|
|
|
|
OnBalanceChanged?.Invoke(Balance);
|
|
OnBalanceAdd?.Invoke(amount);
|
|
|
|
Save();
|
|
}
|
|
|
|
public static bool TryTakeMoney(int amount)
|
|
{
|
|
bool success = default;
|
|
|
|
if (amount < 0)
|
|
{
|
|
Debug.LogError("Попытка снять отрицательную сумму");
|
|
return false;
|
|
}
|
|
|
|
if (Balance - amount >= 0)
|
|
{
|
|
success = true;
|
|
Balance -= amount;
|
|
OnBalanceChanged?.Invoke(Balance);
|
|
}
|
|
else
|
|
{
|
|
success = false;
|
|
}
|
|
|
|
OnPaymentAttempt?.Invoke(success, amount);
|
|
Save();
|
|
return success;
|
|
}
|
|
|
|
public static void ResetBalance()
|
|
{
|
|
Balance = 0;
|
|
OnBalanceChanged?.Invoke(Balance);
|
|
Save();
|
|
}
|
|
|
|
private static void Save() => PlayerPrefs.SetInt(BalancePrefsKey, Balance);
|
|
|
|
private static void Load()
|
|
{
|
|
Balance = PlayerPrefs.GetInt(BalancePrefsKey, 0);
|
|
OnBalanceChanged?.Invoke(Balance);
|
|
}
|
|
}
|