supervisor-simulator/scripts/Loader.cs

56 lines
1.7 KiB
C#

using Godot;
using System;
using System.Collections.Generic;
public partial class Loader : Control
{
private ProgressBar _progressBar;
private int _sceneLoaded = 0;
private List<string> _resToLoad = new (){
"res://scenes/lab.tscn",
"res://scenes/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://scenes/lab.tscn";
}
// resToLoad.AddRange(Res.Accessory);
// resToLoad.AddRange(Res.Body);
// resToLoad.AddRange(Res.Eye);
// resToLoad.AddRange(Res.Hair);
// resToLoad.AddRange(Res.Outfit);
// resToLoad.AddRange(Res.Smartphone);
ResourceLoader.LoadThreadedRequest(_resToLoad[_sceneLoaded]);
_progressBar.MaxValue = 100 * _resToLoad.Count;
SetProcess(true);
}
// 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(_resToLoad[_sceneLoaded], progress))
{
case ResourceLoader.ThreadLoadStatus.InProgress:
_progressBar.Value = 100 * _sceneLoaded + (int)((float)progress[0] * 100);
break;
case ResourceLoader.ThreadLoadStatus.Loaded:
_sceneLoaded++;
if(_sceneLoaded < _resToLoad.Count) {
ResourceLoader.LoadThreadedRequest(_resToLoad[_sceneLoaded]);
} else {
SetProcess(false);
GetTree().ChangeSceneToFile("res://scenes/lab.tscn");
}
break;
default:
GD.Print("Error loading scene: " + _resToLoad[_sceneLoaded]);
break;
}
}
}