using CharacterSystem; using System.Collections.Generic; using UnityEngine; using UnityEngine.Serialization; public class EndGameHandler : MonoBehaviour { [SerializeField, FormerlySerializedAs("winPanel")] private PveWinPanel _winPanel; [SerializeField, FormerlySerializedAs("lossPanel")] private PveLossPanel _lossPanel; [SerializeField, FormerlySerializedAs("pvpWinPanel")] private PvpWinPanel _pvpWinPanel; [SerializeField, FormerlySerializedAs("drawPanel")] private PveLossPanel _drawPanel; public void HandleEndGame(Team lastPlayer, GameMode gameMode, CheckResult lastResult) { Debug.Log("Конец игры"); GameManager.Instance.turnTracker.EnableTimer(false); if (lastResult.Draw) DrawHandler(gameMode); else WinHandler(lastPlayer, gameMode, lastResult.WinningIndexes); } private void DrawHandler(GameMode gameMode) { if (gameMode == GameMode.pve) { EventBus.TriggerEvent(GameEvent.Draw); _drawPanel.Open(GameManager.Instance.ContinueAfterPveDraw); } else { GameManager gameManager = GameManager.Instance; _pvpWinPanel.Open( Team.None, false, gameManager.player1score, gameManager.player2score, gameManager.ContinueAfterPvpRound); } } private void WinHandler(Team winner, GameMode gameMode, HashSet<(int row, int col)> winChipsCoords) { Debug.Log($"Победа {winner}; Режим {gameMode}"); PlayWinChipsAnimation(winChipsCoords); if (gameMode == GameMode.pve) { if (winner == Team.Player1) { EventBus.TriggerEvent(GameEvent.PlayerWin); _winPanel.Open(); } else { EventBus.TriggerEvent(GameEvent.BotWin); _lossPanel.Open(GameManager.Instance.ContinueAfterPveLoss); } } else { GameManager gameManager = GameManager.Instance; DualAvatarController.Instance?.PlayWin(winner); gameManager.IncreaseScore(winner); bool isMatchWin = gameManager.HasPvpMatchWinner(winner); _pvpWinPanel.Open( winner, isMatchWin, gameManager.player1score, gameManager.player2score, isMatchWin ? gameManager.RestartPvpMatch : gameManager.ContinueAfterPvpRound); } } private void PlayWinChipsAnimation(HashSet<(int row, int col)> winChipsCoords) { Chip[,] grid = Board.Instance.Grid; foreach ((int row, int col) winCoord in winChipsCoords) grid[winCoord.col, winCoord.row].WinAnimation(); } }