using CharacterSystem; using System; using UnityEngine; public class TimerManager : MonoBehaviour { public event Action 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); }