diff --git a/Scenes/Characters/P1PlayerScorpio.tscn b/Scenes/Characters/P1PlayerScorpio.tscn index ee60479..3bb5d00 100644 --- a/Scenes/Characters/P1PlayerScorpio.tscn +++ b/Scenes/Characters/P1PlayerScorpio.tscn @@ -12,8 +12,6 @@ size = Vector3(0.822782, 0.527059, 0.80108) size = Vector3(0.822782, 0.527059, 0.80108) [node name="PlayerScorpio" type="CharacterBody3D" groups=["Player"]] -collision_layer = 0 -collision_mask = 4097 script = ExtResource("1_mn5ui") _fireProjectile = ExtResource("2_uayjr") _altFireProjectile = ExtResource("3_tw078") diff --git a/Scenes/Characters/P2PlayerScorpio.tscn b/Scenes/Characters/P2PlayerScorpio.tscn index 812c77f..69124ff 100644 --- a/Scenes/Characters/P2PlayerScorpio.tscn +++ b/Scenes/Characters/P2PlayerScorpio.tscn @@ -12,8 +12,6 @@ size = Vector3(0.822782, 0.527059, 0.80108) size = Vector3(0.822782, 0.527059, 0.80108) [node name="PlayerScorpio" type="CharacterBody3D" groups=["Player"]] -collision_layer = 0 -collision_mask = 4097 script = ExtResource("1_5q5l0") _fireProjectile = ExtResource("2_iw8b0") _altFireProjectile = ExtResource("3_61xde") diff --git a/Scenes/Player1.tscn b/Scenes/Player1.tscn index aa1b5bb..1180cfd 100644 --- a/Scenes/Player1.tscn +++ b/Scenes/Player1.tscn @@ -9,7 +9,7 @@ [node name="Player1" type="Node3D" node_paths=PackedStringArray("SpawnPoint")] script = ExtResource("1_ctl2x") SpawnPoint = NodePath("Marker3D") -PlayableCharacters = Array[PackedScene]([ExtResource("2_7c6mk"), ExtResource("3_mtqa2"), ExtResource("4_1xs5f")]) +PlayableCharacterScenes = Array[PackedScene]([ExtResource("2_7c6mk"), ExtResource("3_mtqa2"), ExtResource("4_1xs5f")]) [node name="Marker3D" type="Marker3D" parent="."] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -3.5, 0.123, 5.513) diff --git a/Scenes/Player2.tscn b/Scenes/Player2.tscn index 356dedb..40c84c6 100644 --- a/Scenes/Player2.tscn +++ b/Scenes/Player2.tscn @@ -9,7 +9,7 @@ [node name="Player2" type="Node3D" node_paths=PackedStringArray("SpawnPoint")] script = ExtResource("1_k788q") SpawnPoint = NodePath("Marker3D") -PlayableCharacters = Array[PackedScene]([ExtResource("2_w2id2"), ExtResource("3_8owb2"), ExtResource("4_w8v7n")]) +PlayableCharacterScenes = Array[PackedScene]([ExtResource("2_w2id2"), ExtResource("3_8owb2"), ExtResource("4_w8v7n")]) [node name="Marker3D" type="Marker3D" parent="."] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 2.5, 0, 5.609) diff --git a/Scripts/AreaExit.cs b/Scripts/AreaExit.cs index 2e7cef9..93f1433 100644 --- a/Scripts/AreaExit.cs +++ b/Scripts/AreaExit.cs @@ -1,4 +1,5 @@ using Godot; +using System.Linq; public partial class AreaExit : Node3D { @@ -15,10 +16,15 @@ public partial class AreaExit : Node3D private void OnExitEntered(Node3D node) { - GD.Print("Exit reached"); + if (node.GetType() == typeof(Character1)) + _gameManager.RemoveCharacterAndAddToExit((Character1)node); + if (node.GetType() == typeof(Character2)) + _gameManager.RemoveCharacterAndAddToExit((Character2)node); + var main = GetTree().Root.GetNode
("/root/Main"); - main.LoadNextLevel(_levelIndex); - if (node is Player player) - player.SpawnPoint.SetPlayerPosition(player); + if (!_gameManager.Players.ElementAt(0).CharactersLeftOnStage.Any()) + { + main.LoadNextLevel(_levelIndex); + } } } diff --git a/Scripts/GameManager.cs b/Scripts/GameManager.cs index f3add1d..7b386b6 100644 --- a/Scripts/GameManager.cs +++ b/Scripts/GameManager.cs @@ -16,14 +16,19 @@ public partial class GameManager : Node [Export] private Array PlayerScenes; + public Array P1CharactersOut = new Array(); + public Array P2CharactersOut = new Array(); + public IEnumerable Players = new List(); + public override void _Ready() { foreach (var playerScene in PlayerScenes) { var player = playerScene.Instantiate(); Players = Players.Append((Player)player); + GetTree().Root.AddChild(player); } } @@ -32,33 +37,57 @@ public partial class GameManager : Node EmitSignal(SignalName.ReselectCharacter, player); } - public void SetToNextCharacter(Player player) => _characterIndex = (++_characterIndex) % player.PlayableCharacters.Count(); + public void SetToNextCharacter(Player player) + { + _characterIndex = (++_characterIndex) % player.CharactersLeftOnStage.Count(); + GD.Print(player.CharactersLeftOnStage.ElementAt(_characterIndex)); + } - public void SetToPreviousCharacter(Player player) => _characterIndex = _characterIndex == 0 ? player.PlayableCharacters.Count() - 1 : --_characterIndex; + public void SetToPreviousCharacter(Player player) + { + _characterIndex = _characterIndex == 0 ? player.CharactersLeftOnStage.Count() - 1 : --_characterIndex; + } public void ResetPlayerPosition(Player player) { player.SpawnPoint.SetPlayerPosition(player.SelectedCharacter); + GD.Print(player.CharactersLeftOnStage.ElementAt(_characterIndex)); } public void OnCharacterSelected(Player player) { GD.Print("Instancing..."); - var selectedCharacter = player.PlayableCharacters[_characterIndex].Instantiate(); - player.SelectedCharacter = selectedCharacter as Character; + var selectedCharacter = player.CharactersLeftOnStage[_characterIndex]; + player.SelectedCharacter = selectedCharacter; GetTree().Root.AddChild(player.SelectedCharacter); player.SpawnPoint.SetPlayerPosition(player.SelectedCharacter); } public void RemoveCharacter(Player player) { - player.PlayableCharacters.Remove(player.PlayableCharacters.ElementAt(_characterIndex)); + player.CharactersLeftOnStage.Remove(player.CharactersLeftOnStage.ElementAt(_characterIndex)); player.SelectedCharacter?.QueueFree(); _characterIndex = 0; - if (player.PlayableCharacters.Count() > 0) + if (player.CharactersLeftOnStage.Count() > 0) EmitSignal(SignalName.ReselectCharacter, player); } + public void RemoveCharacterAndAddToExit(Character1 character) + { + P1CharactersOut.Add(character); + Players.ElementAt(0).CharactersLeftOnStage.Remove(character); + GetTree().Root.RemoveChild(character); + _characterIndex = 0; + } + + public void RemoveCharacterAndAddToExit(Character2 character) + { + P2CharactersOut.Add(character); + Players.ElementAt(1).CharactersLeftOnStage.Remove(character); + GetTree().Root.RemoveChild(character); + _characterIndex = 0; + } + public void SetGameOver(bool isGameOver) { _gameOver = isGameOver; diff --git a/Scripts/Main.cs b/Scripts/Main.cs index 928fd4c..bacef21 100644 --- a/Scripts/Main.cs +++ b/Scripts/Main.cs @@ -35,7 +35,6 @@ public partial class Main : Node private void DeferredGoToScene(PackedScene sceneToAdd) { - GD.Print(sceneToAdd.ResourcePath); var nextScene = GD.Load(sceneToAdd.ResourcePath); var newScene = nextScene.Instantiate(); GetTree().Root.AddChild(newScene); @@ -43,7 +42,6 @@ public partial class Main : Node private void DeferredGoToScene(PackedScene sceneToAdd, PackedScene sceneToRemove) { - GD.Print(sceneToAdd.ResourcePath); GetTree().GetFirstNodeInGroup("Level").QueueFree(); var nextScene = GD.Load(sceneToAdd.ResourcePath); var newScene = nextScene.Instantiate(); diff --git a/Scripts/Player.cs b/Scripts/Player.cs index e219ded..3030011 100644 --- a/Scripts/Player.cs +++ b/Scripts/Player.cs @@ -7,9 +7,21 @@ public partial class Player : Node3D public SpawnPoint SpawnPoint; [Export] - public Array PlayableCharacters; + public Array PlayableCharacterScenes; + + public Array CharactersLeftOnStage = new Array(); public Character SelectedCharacter; public bool IsSelectingCharacter = false; + + public override void _Ready() + { + foreach (var character in PlayableCharacterScenes) + { + var instance = character.Instantiate(); + GD.Print(instance); + CharactersLeftOnStage.Add((Character)instance); + } + } }