Rework loading maps to be asynchronous, change debug menu so that its not completely pausing the game
This commit is contained in:
41
Zennysoft.Game.Ma/src/utils/SceneLoader.cs
Normal file
41
Zennysoft.Game.Ma/src/utils/SceneLoader.cs
Normal file
@@ -0,0 +1,41 @@
|
||||
using Godot;
|
||||
using System.Linq;
|
||||
|
||||
namespace Zennysoft.Game.Ma;
|
||||
|
||||
public partial class SceneLoader : Node
|
||||
{
|
||||
private string _sceneToLoad;
|
||||
private bool _loading = false;
|
||||
|
||||
[Signal]
|
||||
public delegate void SceneLoadedEventHandler();
|
||||
|
||||
public Node LoadedScene { get; private set; }
|
||||
|
||||
public void LoadSceneRequest(string sceneToLoad)
|
||||
{
|
||||
ResourceLoader.LoadThreadedRequest(sceneToLoad);
|
||||
_sceneToLoad = sceneToLoad;
|
||||
_loading = true;
|
||||
}
|
||||
|
||||
private void LoadScene()
|
||||
{
|
||||
_loading = false;
|
||||
var scene = (PackedScene)ResourceLoader.LoadThreadedGet(_sceneToLoad);
|
||||
LoadedScene = scene.Instantiate();
|
||||
EmitSignal(SignalName.SceneLoaded);
|
||||
}
|
||||
|
||||
public override void _Process(double delta)
|
||||
{
|
||||
if (!_loading)
|
||||
return;
|
||||
|
||||
var progress = new Godot.Collections.Array();
|
||||
ResourceLoader.LoadThreadedGetStatus(_sceneToLoad, progress);
|
||||
if ((double)progress.Single() == 1)
|
||||
LoadScene();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user