using Godot; using System; public partial class Loader : Control { private ProgressBar progressBar; private int sceneLoaded = 0; private string[] scenesToLoad = { "res://lab.tscn", "res://player.tscn" }; // Called when the node enters the scene tree for the first time. public override void _Ready() { progressBar = GetNode("ProgressBar"); string nextScene = GameManager.NextScene; if (nextScene != null) { GameManager.NextScene = "res://lab.tscn"; } ResourceLoader.LoadThreadedRequest(scenesToLoad[sceneLoaded]); progressBar.MaxValue = 100 * scenesToLoad.Length; } // Called every frame. 'delta' is the elapsed time since the previous frame. public override void _Process(double delta) { Godot.Collections.Array progress = new(); switch(ResourceLoader.LoadThreadedGetStatus(scenesToLoad[sceneLoaded], progress)) { case ResourceLoader.ThreadLoadStatus.InProgress: progressBar.Value = 100 * sceneLoaded + (int)((float)progress[0] * 100); break; case ResourceLoader.ThreadLoadStatus.Loaded: sceneLoaded++; if(sceneLoaded < scenesToLoad.Length) { ResourceLoader.LoadThreadedRequest(scenesToLoad[sceneLoaded]); } else { var transit = GetNode("/root/SceneTransit"); transit.Transit("res://lab.tscn", false); } break; default: GD.Print("Error loading scene: " + scenesToLoad[sceneLoaded]); break; } } }