using Godot; using Godot.Collections; using System.Linq; public partial class Main : Node { [Export] public Array Levels; [Export] public PackedScene GameManager; public int NumberOfPlayers = 0; public void LoadLevel(int indexToLoad, int numberOfPlayers) { var sceneToLoad = Levels.ElementAt(indexToLoad); CallDeferred(nameof(DeferredGoToScene), sceneToLoad); NumberOfPlayers = numberOfPlayers; var gameManager = GameManager.Instantiate(); AddChild(gameManager); var gameManagerInstance = (GameManager)gameManager; gameManagerInstance.OnHandleCharacterSelectUI(gameManagerInstance.Players.ElementAt(0)); if (numberOfPlayers == 2) gameManagerInstance.OnHandleCharacterSelectUI(gameManagerInstance.Players.ElementAt(1)); var bgmPlayer = GetTree().Root.GetNode("BgmPlayer"); bgmPlayer.ProcessMode = ProcessModeEnum.Always; bgmPlayer.SetBGMFromFilepath("Audio/BGM/LevelTheme.ogg"); bgmPlayer.PlayBGM(); GetTree().Paused = true; } public void LoadNextLevel(int currentSceneIndex) { if (currentSceneIndex < Levels.Count()) { var currentScene = Levels.ToList().ElementAt(currentSceneIndex); var nextScene = currentSceneIndex + 1; CallDeferred(nameof(DeferredGoToScene), Levels.ElementAt(nextScene), currentScene); } } private void DeferredGoToScene(PackedScene sceneToAdd) { var nextScene = GD.Load(sceneToAdd.ResourcePath); var newScene = nextScene.Instantiate(); GetTree().Root.AddChild(newScene); GetTree().Paused = true; } private void DeferredGoToScene(PackedScene sceneToAdd, PackedScene sceneToRemove) { GetTree().GetFirstNodeInGroup("Level").QueueFree(); var nextScene = GD.Load(sceneToAdd.ResourcePath); var newScene = nextScene.Instantiate(); GetTree().Root.AddChild(newScene); GetTree().Paused = true; } }