103 lines
2.9 KiB
C#
103 lines
2.9 KiB
C#
using CharacterSystem;
|
|
using System;
|
|
using UnityEngine;
|
|
|
|
public class TimerManager : MonoBehaviour
|
|
{
|
|
public event Action<Team> TimerEnded;
|
|
|
|
[SerializeField] private GameplayLevelBar _player1LevelBar;
|
|
[SerializeField] private GameplayLevelBar _player2LevelBar;
|
|
[SerializeField] private float _pveCharacterTime = 120f;
|
|
[SerializeField] private float _pvpTurnTime = 30f;
|
|
|
|
private GameMode _gameMode;
|
|
|
|
private Timer Player1Timer => _player1LevelBar.Timer;
|
|
private Timer Player2Timer => _player2LevelBar.Timer;
|
|
|
|
private void Awake()
|
|
{
|
|
Player1Timer.TimerEnded -= HandlePlayer1TimerEnded;
|
|
Player1Timer.TimerEnded += HandlePlayer1TimerEnded;
|
|
Player2Timer.TimerEnded -= HandlePlayer2TimerEnded;
|
|
Player2Timer.TimerEnded += HandlePlayer2TimerEnded;
|
|
}
|
|
|
|
private void OnDestroy()
|
|
{
|
|
Player1Timer.TimerEnded -= HandlePlayer1TimerEnded;
|
|
Player2Timer.TimerEnded -= HandlePlayer2TimerEnded;
|
|
}
|
|
|
|
public void SetupTimers(GameMode gameMode)
|
|
{
|
|
_gameMode = gameMode;
|
|
bool isPvp = gameMode == GameMode.pvp;
|
|
_player1LevelBar.gameObject.SetActive(true);
|
|
_player2LevelBar.gameObject.SetActive(isPvp);
|
|
|
|
if (isPvp)
|
|
{
|
|
RefreshPvpScores();
|
|
Player1Timer.StopAndReset();
|
|
Player2Timer.StopAndReset();
|
|
return;
|
|
}
|
|
|
|
_player1LevelBar.ConfigurePve(
|
|
CharactersController.CharacterIndex,
|
|
CharactersController.I);
|
|
Player1Timer.SetupTimer(_pveCharacterTime);
|
|
Player2Timer.StopAndReset();
|
|
}
|
|
|
|
public void StopAllTimers()
|
|
{
|
|
Player1Timer.StopAndReset();
|
|
Player2Timer.StopAndReset();
|
|
}
|
|
|
|
public void HideBars()
|
|
{
|
|
StopAllTimers();
|
|
_player1LevelBar.gameObject.SetActive(false);
|
|
_player2LevelBar.gameObject.SetActive(false);
|
|
}
|
|
|
|
public void StopTimer(Team player)
|
|
{
|
|
Timer timer = player == Team.Player1 ? Player1Timer : Player2Timer;
|
|
timer.StopTimer();
|
|
}
|
|
|
|
public void SetActiveTimer(Team currentPlayer)
|
|
{
|
|
Timer activeTimer = currentPlayer == Team.Player1 ? Player1Timer : Player2Timer;
|
|
Timer inactiveTimer = currentPlayer == Team.Player1 ? Player2Timer : Player1Timer;
|
|
|
|
if (_gameMode == GameMode.pvp)
|
|
{
|
|
inactiveTimer.StopAndReset();
|
|
activeTimer.SetupTimer(_pvpTurnTime);
|
|
}
|
|
|
|
activeTimer.StartTimer();
|
|
}
|
|
|
|
public void RefreshPvpScores()
|
|
{
|
|
if (GameManager.Instance == null)
|
|
return;
|
|
|
|
_player1LevelBar.ConfigurePvp(1, GameManager.Instance.player1score);
|
|
_player2LevelBar.ConfigurePvp(2, GameManager.Instance.player2score);
|
|
}
|
|
|
|
private void HandlePlayer1TimerEnded()
|
|
=> TimerEnded?.Invoke(Team.Player1);
|
|
|
|
private void HandlePlayer2TimerEnded()
|
|
=> TimerEnded?.Invoke(Team.Player2);
|
|
}
|