diff --git a/Assets/Scripts/Managers/MatchManager.cs b/Assets/Scripts/Managers/MatchManager.cs index e582393..c217d26 100644 --- a/Assets/Scripts/Managers/MatchManager.cs +++ b/Assets/Scripts/Managers/MatchManager.cs @@ -140,6 +140,9 @@ namespace Managers /// A change in the matches progression. public void UpdateMatchCondition(MatchConditionUpdate update) { + // Quit updating when the round is over + if (CurrentMatchResult.IsRoundWon) + return; Player updatedPlayer = null; foreach (Player p in PlayerManager.G.MatchPlayers) { @@ -169,7 +172,7 @@ namespace Managers else { Log.Info($"Round {CurrentMatchResult.RoundsPlayed} of {MatchRule.rounds} has ended." + - $"{CurrentMatchResult.Winner?.name} won this round."); + $"{CurrentMatchResult.Winner?.playerName} won this round."); AnnounceRoundWinner(CurrentMatchResult); } } @@ -278,11 +281,12 @@ namespace Managers UIManager.G.Announcments.QueueAnnounceText($"{mr.Winner.playerName}" + " has won the Round! \n" + $"They won {winnerStats.RoundsWon} out of {MatchRule.rounds}.", - 1.618f); + 3f); - await Tween.Delay(1.618f * 0.33f); + await Tween.Delay(3f * 0.33f); matchState = MatchState.Pause; - await Tween.Delay(1.618f * 0.66f); + ResetRound(); + await Tween.Delay(3f * 0.66f); ResetMatchCharacters(); @@ -305,6 +309,14 @@ namespace Managers SetupMatchPlayerStatistics(); } + /// + /// Resets the round statistics. + /// + public void ResetRound() + { + CurrentMatchResult.IsRoundWon = false; + } + /// /// Initializes the match, waits for match begin /// confirmation by the players and counts down to start. diff --git a/Assets/Scripts/Managers/UIManager.cs b/Assets/Scripts/Managers/UIManager.cs index bda75fa..5e90f87 100644 --- a/Assets/Scripts/Managers/UIManager.cs +++ b/Assets/Scripts/Managers/UIManager.cs @@ -129,21 +129,29 @@ namespace Managers public void ShowPauseMenu(Transform transform) { + hUD?.Hide(); PauseMenu?.Show(transform); } public void HidePauseMenu() { PauseMenu?.Hide(); + hUD?.Show(); } public void ShowMatchEndMenu(Transform transform) { + hUD?.Hide(); MatchEndMenu?.Show(transform); } public void HideMatchEndMenu() { MatchEndMenu?.Hide(); + hUD?.Show(); + } + public void ShowHUD() + { + hUD?.Show(); } public void HideHUD() diff --git a/Assets/Scripts/MatchLogic.cs b/Assets/Scripts/MatchLogic.cs index 1efd065..56ea836 100644 --- a/Assets/Scripts/MatchLogic.cs +++ b/Assets/Scripts/MatchLogic.cs @@ -66,6 +66,7 @@ namespace GameLogic /// Indicates whether a round or the whole match was won /// public bool IsMatchWon { get; private set; } + public bool IsRoundWon { get; set; } public int RoundsPlayed { get; private set; } public Player Winner { get; private set; } public List Opponents { get; private set; } @@ -86,25 +87,35 @@ namespace GameLogic Opponents = mps.Keys.Where(player => player != Winner).ToList(); mps[Winner].RoundsWon += 1; RoundsPlayed += 1; + IsRoundWon = true; } else { Winner = null; } - // TODO: this is wrong winning 2 rounds can decide the match + + foreach (Player p in mps.Keys) + { + if (mps[p].RoundsWon > rules.rounds / 2) + { + IsMatchWon = true; + Winner = p; + Opponents = mps.Keys.Where(player => player != Winner).ToList(); + return; + } + } + if (RoundsPlayed == rules.rounds) { IsMatchWon = true; Winner = mps.Aggregate((p1, p2) => p1.Value.RoundsWon > p2.Value.RoundsWon ? p1 : p2).Key; Opponents = mps.Keys.Where(player => player != Winner).ToList(); + return; } - else + foreach (var statistic in mps.Values) { - foreach (var statistic in mps.Values) - { - statistic.IsOut = false; - } + statistic.IsOut = false; } } } diff --git a/Assets/Scripts/UI/HUD.cs b/Assets/Scripts/UI/HUD.cs index daa16d1..65a3e99 100644 --- a/Assets/Scripts/UI/HUD.cs +++ b/Assets/Scripts/UI/HUD.cs @@ -36,4 +36,9 @@ public class HUD : MonoBehaviour canvas.enabled = false; } + public void Show() + { + canvas.enabled = true; + } + }