88 lines
2.4 KiB
C#
88 lines
2.4 KiB
C#
using System.Threading;
|
|
using Alchemy.Inspector;
|
|
using Code.Audio;
|
|
using Code.UI;
|
|
using Cysharp.Threading.Tasks;
|
|
using UnityEngine;
|
|
|
|
namespace Code.GameplayServices
|
|
{
|
|
public class GameplayManager : MonoBehaviour
|
|
{
|
|
public static GameplayManager Instance { get; private set; }
|
|
|
|
private bool _onPause = true;
|
|
public bool OnPause => _onPause;
|
|
|
|
[TabGroup("Gameplay")]
|
|
[SerializeField] [Range(0f, 30f)] private float gameSpeed;
|
|
[TabGroup("Gameplay")]
|
|
[SerializeField] [Range(0f, 30f)] private float gameSpeedIncrement;
|
|
|
|
[TabGroup("UI")]
|
|
[SerializeField]
|
|
private RestartPanel restartPanel;
|
|
|
|
private float _currentGameSpeed;
|
|
private float _incrementedGameSpeed;
|
|
public float GameSpeed => _currentGameSpeed > 0.1f ? _currentGameSpeed + _incrementedGameSpeed : _currentGameSpeed;
|
|
|
|
private void Awake()
|
|
{
|
|
Instance = this;
|
|
_currentGameSpeed = gameSpeed;
|
|
}
|
|
|
|
public void RestartGame()
|
|
{
|
|
ResetGame();
|
|
ResumeGame();
|
|
}
|
|
public void PlayerDied()
|
|
{
|
|
PauseGame();
|
|
restartPanel.gameObject.SetActive(true);
|
|
PlayerScoreService.Instance.ResetScore();
|
|
AudioManager.Instance.PlayGameOver();
|
|
}
|
|
|
|
public void PauseGame()
|
|
{
|
|
_onPause = true;
|
|
_currentGameSpeed = 0f;
|
|
AudioManager.Instance.StopMusic();
|
|
_cycleTokenSource.Cancel();
|
|
}
|
|
public void ResumeGame()
|
|
{
|
|
_onPause = false;
|
|
_currentGameSpeed = gameSpeed;
|
|
AudioManager.Instance.StartMusic();
|
|
DifficultyCycle().Forget();
|
|
}
|
|
|
|
private void ResetGame()
|
|
{
|
|
_incrementedGameSpeed = 0f;
|
|
PassingObjectsManager.Instance.ResetObjects();
|
|
}
|
|
|
|
private CancellationTokenSource _cycleTokenSource;
|
|
private async UniTaskVoid DifficultyCycle()
|
|
{
|
|
_cycleTokenSource = new();
|
|
try
|
|
{
|
|
while (true)
|
|
{
|
|
await UniTask.WaitForSeconds(10).AttachExternalCancellation(_cycleTokenSource.Token);
|
|
_incrementedGameSpeed += gameSpeedIncrement;
|
|
}
|
|
}
|
|
catch
|
|
{
|
|
_cycleTokenSource.Dispose();
|
|
}
|
|
}
|
|
}
|
|
} |