48 lines
1.4 KiB
C#
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;
|
|
}
|
|
}
|
|
} |