sega 826ff5782a Доработать игровые режимы, призы и настройки
Добавить таймеры и шкалы прогресса, расширить призовую систему и контроль остатков, восстановить настройки и обновить таблицу призов главного меню.
2026-09-14 10:47:25 +03:00

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.GetCharactersArray());
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);
}