using Godot; using System.Linq; using static Godot.Projection; public partial class StageGUI : Control { [Signal] public delegate void OnCharacterSelectionMadeEventHandler(Player player); [Signal] public delegate void CapricornP1SelectedEventHandler(); [Signal] public delegate void CapricornP2SelectedEventHandler(); [Signal] public delegate void PiscesP1SelectedEventHandler(); [Signal] public delegate void PiscesP2SelectedEventHandler(); [Signal] public delegate void SagP1SelectedEventHandler(); [Signal] public delegate void SagP2SelectedEventHandler(); [Signal] public delegate void ScorpioP1SelectedEventHandler(); [Signal] public delegate void ScorpioP2SelectedEventHandler(); private GameManager _gameManager; public override void _Ready() { _gameManager = GetTree().Root.GetNode("Main/GameManager"); } public void OnCharacterSelect(Player player) { if (player.GameOver) return; 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)); ChangeBG(_gameManager.Players.ElementAt(0)); } if (Input.IsActionJustPressed("p1_left")) { _gameManager.SetToPreviousCharacter(_gameManager.Players.ElementAt(0)); ChangeBG(_gameManager.Players.ElementAt(0)); } if (Input.IsActionJustPressed("p1_fire")) { GD.Print("Selected character"); _gameManager.Players.ElementAt(0).IsSelectingCharacter = false; 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)); ChangeBG(_gameManager.Players.ElementAt(1)); } if (Input.IsActionJustPressed("p2_left")) { _gameManager.SetToPreviousCharacter(_gameManager.Players.ElementAt(1)); ChangeBG(_gameManager.Players.ElementAt(1)); } if (Input.IsActionJustPressed("p2_fire")) { GD.Print("Selected character"); _gameManager.Players.ElementAt(1).IsSelectingCharacter = false; EmitSignal(SignalName.OnCharacterSelectionMade, _gameManager.Players.ElementAt(1)); GetTree().Paused = false; } } } private void ChangeBG(Player player) { var name = player.CharactersLeftOnStage.ElementAt(player._characterIndex).Name; GD.Print(name); switch (name) { case "CapricornP1": EmitSignal(SignalName.CapricornP1Selected); break; case "CapricornP2": EmitSignal(SignalName.CapricornP2Selected); break; case "ScorpioP1": EmitSignal(SignalName.ScorpioP1Selected); break; case "ScorpioP2": EmitSignal(SignalName.ScorpioP2Selected); break; case "PiscesP1": EmitSignal(SignalName.PiscesP1Selected); break; case "PiscesP2": EmitSignal(SignalName.PiscesP2Selected); break; case "MegamiP1": EmitSignal(SignalName.SagP1Selected); break; case "MegamiP2": EmitSignal(SignalName.SagP2Selected); break; default: break; } } private void OnFirstPlayerCharacterSelect() { var player = _gameManager.Players.ElementAt(0); OnCharacterSelect(player); } private void OnSecondPlayerCharacterSelect() { var player = _gameManager.Players.ElementAt(1); OnCharacterSelect(player); } }