using System.Threading.Tasks; using Babushka.scripts.CSharp.Common.SceneManagement; using Godot; namespace Babushka.scripts.CSharp.Common; public partial class SceneTransition : Node { [Export] private PackedScene _sceneToLoad; [Export] private string[] _sceneNamesToLoad; [Export] private int _sceneIndex; [Export] private Node? _sceneInstanceParent; [Export] private bool _unloadSelf = true; // todo: remove and replace with indexed system public void LoadScene() { Node sceneInstance = _sceneToLoad.Instantiate(); if(_sceneInstanceParent != null) _sceneInstanceParent.AddChild(sceneInstance); else { GetTree().Root.AddChild(sceneInstance); } if (_unloadSelf) { QueueFree(); } } public void LoadSceneAtIndex(int index) { string sceneName = _sceneNamesToLoad[index]; SceneTransitionThreaded.Instance.ChangeSceneToFileThreaded(sceneName); UnloadAfterDelay(); } private async void UnloadAfterDelay() { await ToSignal(GetTree().CreateTimer(1.0f), "timeout"); // 1.0f seconds if (_unloadSelf) { QueueFree(); } } public void Quit() { GetTree().Quit(); } }