94 lines
2.4 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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