using Godot; using System.Linq; using static Godot.Projection; public partial class StageGUI : Control { [Signal] public delegate void OnCharacterSelectionMadeEventHandler(Player player); private GameManager _gameManager; public override void _Ready() { _gameManager = GetTree().Root.GetNode("Main/GameManager"); } public void OnCharacterSelect(Player player) { if (player.GameOver) return; if (player == _gameManager.Players.ElementAt(0)) { var wheel1 = GetNode("CharacterSelect/Wheel"); wheel1.FocusMode = FocusModeEnum.All; wheel1.GrabFocus(); wheel1.Visible = true; } else if (player == _gameManager.Players.ElementAt(1)) { var wheel2 = GetNode("CharacterSelect/Wheel2"); wheel2.FocusMode = FocusModeEnum.All; wheel2.GrabFocus(); wheel2.Visible = true; } player.IsSelectingCharacter = true; } public override void _Process(double delta) { if (_gameManager.Players.ElementAt(0).IsSelectingCharacter) { if (Input.IsActionJustPressed("p1_right")) _gameManager.SetToNextCharacter(_gameManager.Players.ElementAt(0)); if (Input.IsActionJustPressed("p1_left")) _gameManager.SetToPreviousCharacter(_gameManager.Players.ElementAt(0)); if (Input.IsActionJustPressed("p1_fire")) { GD.Print("Selected character"); _gameManager.Players.ElementAt(0).IsSelectingCharacter = false; var wheel1 = GetNode("CharacterSelect/Wheel"); wheel1.Hide(); EmitSignal(SignalName.OnCharacterSelectionMade, _gameManager.Players.ElementAt(0)); GetTree().Paused = false; } } if (_gameManager.Players.Count() == 2 && _gameManager.Players.ElementAt(0).IsSelectingCharacter) { if (Input.IsActionJustPressed("p2_right")) _gameManager.SetToNextCharacter(_gameManager.Players.ElementAt(1)); if (Input.IsActionJustPressed("p2_left")) _gameManager.SetToPreviousCharacter(_gameManager.Players.ElementAt(1)); if (Input.IsActionJustPressed("p2_fire")) { GD.Print("Selected character"); _gameManager.Players.ElementAt(1).IsSelectingCharacter = false; var wheel2 = GetNode("CharacterSelect/Wheel2"); wheel2.Hide(); EmitSignal(SignalName.OnCharacterSelectionMade, _gameManager.Players.ElementAt(1)); GetTree().Paused = false; } } } private void OnFirstPlayerCharacterSelect() { var player = _gameManager.Players.ElementAt(0); OnCharacterSelect(player); } private void OnSecondPlayerCharacterSelect() { var player = _gameManager.Players.ElementAt(1); OnCharacterSelect(player); } }