using Godot; using Godot.Collections; using System.Linq; public partial class StageGUI : Control { [Signal] public delegate void OnCharacterSelectionMadeEventHandler(Character player); [Signal] public delegate void CapricornSelectedEventHandler(Player player); [Signal] public delegate void PiscesSelectedEventHandler(Player player); [Signal] public delegate void SagittariusSelectedEventHandler(Player player); [Signal] public delegate void ScorpioSelectedEventHandler(Player player); [Signal] public delegate void OnPlayerGameOverEventHandler(Player player); [Signal] public delegate void OnGameOverEventHandler(Array players); private GameManager _gameManager; public override void _EnterTree() { _gameManager = GetTree().Root.GetNode("Main/GameManager"); } public void OnCharacterSelect(Player player) { if (player.GameOver) return; player.IsSelectingCharacter = true; ChangeBG(player); } public override void _Process(double delta) { var playersSelecting = _gameManager.Players.Where(x => x.IsSelectingCharacter); foreach (var player in playersSelecting) { if (Input.IsActionJustPressed(player.PlayerInput.Right())) { _gameManager.SetToNextCharacter(player); ChangeBG(player); } if (Input.IsActionJustPressed(player.PlayerInput.Left())) { _gameManager.SetToPreviousCharacter(player); ChangeBG(player); } if (Input.IsActionJustPressed(player.PlayerInput.Fire())) { GD.Print("Selected character"); player.IsSelectingCharacter = false; EmitSignal(SignalName.OnCharacterSelectionMade, player); GetTree().Paused = false; } } foreach (var player in _gameManager.Players) { if (player.GameOver) EmitSignal(SignalName.OnPlayerGameOver, player); } if (!_gameManager.IsGameOverScreenOn && _gameManager.Players.All(x => x.GameOver)) { EmitSignal(SignalName.OnGameOver, new Array(_gameManager.Players)); } } private void ChangeBG(Player player) { var name = player.CharactersLeftOnStage.ElementAt(player.CharacterIndex).Name; GD.Print(name); switch (name) { case "Capricorn": EmitSignal(SignalName.CapricornSelected, player); break; case "Scorpio": EmitSignal(SignalName.ScorpioSelected, player); break; case "Pisces": EmitSignal(SignalName.PiscesSelected, player); break; case "Sagittarius": EmitSignal(SignalName.SagittariusSelected, player); break; } } }