64 lines
1.9 KiB
C#
64 lines
1.9 KiB
C#
using System.Threading;
|
|
using Cysharp.Threading.Tasks;
|
|
using UnityEngine;
|
|
|
|
namespace Code.GameplayServices
|
|
{
|
|
public class BonusService : MonoBehaviour
|
|
{
|
|
public static BonusService Instance { get; private set; }
|
|
private void Awake()
|
|
{
|
|
Instance = this;
|
|
}
|
|
|
|
public bool CoinBoost { get; private set; }
|
|
public bool Invincibility { get; private set; }
|
|
|
|
|
|
private CancellationTokenSource _coinBoostCancellationTokenSource;
|
|
|
|
public async UniTaskVoid GiveCoinBoost()
|
|
{
|
|
if (_coinBoostCancellationTokenSource != null && _coinBoostCancellationTokenSource.Token.CanBeCanceled)
|
|
_coinBoostCancellationTokenSource.Cancel();
|
|
|
|
_coinBoostCancellationTokenSource = new();
|
|
try
|
|
{
|
|
CoinBoost = true;
|
|
|
|
await UniTask.WaitForSeconds(5f)
|
|
.AttachExternalCancellation(_coinBoostCancellationTokenSource.Token);
|
|
|
|
CoinBoost = false;
|
|
}
|
|
catch
|
|
{
|
|
_coinBoostCancellationTokenSource.Dispose();
|
|
}
|
|
}
|
|
private CancellationTokenSource _invincibilityCancellationTokenSource;
|
|
|
|
public async UniTaskVoid GiveInvincibility()
|
|
{
|
|
if (_invincibilityCancellationTokenSource != null && _invincibilityCancellationTokenSource.Token.CanBeCanceled)
|
|
_invincibilityCancellationTokenSource.Cancel();
|
|
|
|
_invincibilityCancellationTokenSource = new();
|
|
try
|
|
{
|
|
Invincibility = true;
|
|
|
|
await UniTask.WaitForSeconds(5f)
|
|
.AttachExternalCancellation(_invincibilityCancellationTokenSource.Token);
|
|
|
|
Invincibility = false;
|
|
}
|
|
catch
|
|
{
|
|
_invincibilityCancellationTokenSource.Dispose();
|
|
}
|
|
}
|
|
}
|
|
} |