From 75bbe25929112722853d0278c0492836b4a9f4ea Mon Sep 17 00:00:00 2001 From: Zenny Date: Mon, 4 Sep 2023 18:14:41 -0700 Subject: [PATCH] Basic game over imp --- Scripts/GameManager.cs | 19 +++++++++++-------- Scripts/Player.cs | 2 ++ Scripts/StageGUI.cs | 4 ++-- 3 files changed, 15 insertions(+), 10 deletions(-) diff --git a/Scripts/GameManager.cs b/Scripts/GameManager.cs index 2d53e57..55a428b 100644 --- a/Scripts/GameManager.cs +++ b/Scripts/GameManager.cs @@ -10,8 +10,6 @@ public partial class GameManager : Node [Signal] public delegate void ReselectCharacterEventHandler(Player player); - private bool _gameOver = false; - [Export] private Array PlayerScenes; @@ -86,6 +84,12 @@ public partial class GameManager : Node Players.ElementAt(0)._characterIndex = 0; if (Players.ElementAt(0).CharactersLeftOnStage.Any()) EmitSignal(SignalName.ReselectCharacter, Players.ElementAt(0)); + + if (!P1CharactersOut.Any() && !Players.ElementAt(0).CharactersLeftOnStage.Any()) + SetGameOver(Players.ElementAt(0), true); + + if (!P2CharactersOut.Any() && !Players.ElementAt(1).CharactersLeftOnStage.Any()) + SetGameOver(Players.ElementAt(1), true); } public void RemoveCharacter(Character2 character) @@ -109,7 +113,7 @@ public partial class GameManager : Node GetTree().Root.RemoveChild(character); GD.Print(Players.ElementAt(0).CharactersLeftOnStage.Select(x => x.Name).ToArray()); - + Players.ElementAt(0)._characterIndex = 0; if (Players.ElementAt(0).CharactersLeftOnStage.Any()) EmitSignal(SignalName.ReselectCharacter, Players.ElementAt(0)); @@ -119,7 +123,7 @@ public partial class GameManager : Node { P2CharactersOut.Add(character); Players.ElementAt(1).CharactersLeftOnStage.Remove(character); - + GetTree().Root.RemoveChild(character); Players.ElementAt(1)._characterIndex = 0; @@ -127,11 +131,12 @@ public partial class GameManager : Node EmitSignal(SignalName.ReselectCharacter, Players.ElementAt(1)); } - public void SetGameOver(bool isGameOver) + public void SetGameOver(Player player, bool isGameOver) { - _gameOver = isGameOver; + player.GameOver = isGameOver; if (isGameOver) EmitSignal(SignalName.OnGameOver); + GD.Print($"Game over for {player.Name}"); } public void OnLevelClear() @@ -159,6 +164,4 @@ public partial class GameManager : Node foreach (var player in Players) EmitSignal(SignalName.ReselectCharacter, player); } - - public bool IsGameOver => _gameOver; } diff --git a/Scripts/Player.cs b/Scripts/Player.cs index 32605ef..56d2b61 100644 --- a/Scripts/Player.cs +++ b/Scripts/Player.cs @@ -17,6 +17,8 @@ public partial class Player : Node3D public int _characterIndex = 0; + public bool GameOver = false; + public override void _Ready() { foreach (var character in PlayableCharacterScenes) diff --git a/Scripts/StageGUI.cs b/Scripts/StageGUI.cs index fbea284..7c83427 100644 --- a/Scripts/StageGUI.cs +++ b/Scripts/StageGUI.cs @@ -16,12 +16,12 @@ public partial class StageGUI : Control public void OnCharacterSelect(Player player) { - if (_gameManager.IsGameOver) + if (player.GameOver) return; if (player == _gameManager.Players.ElementAt(0)) { - var wheel1 = GetNode("CharacterSelect/Wheel"); + var wheel1 = GetNode("CharacterSelect/Wheel"); wheel1.FocusMode = FocusModeEnum.All; wheel1.GrabFocus(); wheel1.Visible = true;