94 lines
2.4 KiB
C#
94 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()
|
||
{
|
||
Debug.Log("Кошелек принял сигнал с платежки");
|
||
AddMoney(10);
|
||
}
|
||
|
||
public static void AddMoney(int amount)
|
||
{
|
||
Balance += amount;
|
||
|
||
OnBalanceChanged?.Invoke(Balance);
|
||
OnBalanceAdd?.Invoke(amount);
|
||
|
||
Save();
|
||
}
|
||
|
||
public static bool TakeMoney(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);
|
||
}
|
||
}
|