supervisor-simulator/scripts/Loader.cs
2024-11-29 22:56:50 +08:00

48 lines
1.4 KiB
C#

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>("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<SceneTransit>("/root/SceneTransit");
transit.Transit("res://lab.tscn", false);
}
break;
default:
GD.Print("Error loading scene: " + scenesToLoad[sceneLoaded]);
break;
}
}
}