diff --git a/src/SharpIDE.Godot/IdeWindow.cs b/src/SharpIDE.Godot/IdeWindow.cs index b072c21..ae40f64 100644 --- a/src/SharpIDE.Godot/IdeWindow.cs +++ b/src/SharpIDE.Godot/IdeWindow.cs @@ -11,19 +11,22 @@ namespace SharpIDE.Godot; /// public partial class IdeWindow : Control { - private readonly PackedScene _solutionPickerScene = ResourceLoader.Load("res://Features/SlnPicker/SlnPicker.tscn"); - private readonly PackedScene _ideRootScene = ResourceLoader.Load("res://IdeRoot.tscn"); + private const string SlnPickerScenePath = "res://Features/SlnPicker/SlnPicker.tscn"; + private const string IdeRootScenePath = "res://IdeRoot.tscn"; + private PackedScene? _solutionPickerScene; + private PackedScene? _ideRootScene; private IdeRoot? _ideRoot; private SlnPicker? _slnPicker; public override void _Ready() { + ResourceLoader.LoadThreadedRequest(SlnPickerScenePath); + ResourceLoader.LoadThreadedRequest(IdeRootScenePath); MSBuildLocator.RegisterDefaults(); GodotServiceDefaults.AddServiceDefaults(); //GetWindow().SetMinSize(new Vector2I(1152, 648)); - - PickSolution(true); + Callable.From(() => PickSolution(true)).CallDeferred(); } // public override void _ExitTree() @@ -39,6 +42,7 @@ public partial class IdeWindow : Control public void PickSolution(bool fullscreen = false) { if (_slnPicker is not null) throw new InvalidOperationException("Solution picker is already active"); + _solutionPickerScene ??= (PackedScene)ResourceLoader.LoadThreadedGet(SlnPickerScenePath); _slnPicker = _solutionPickerScene.Instantiate(); if (fullscreen) { @@ -60,6 +64,7 @@ public partial class IdeWindow : Control _ = Task.GodotRun(async () => { var slnPathTask = _slnPicker.GetSelectedSolutionPath(); + _ideRootScene ??= (PackedScene)ResourceLoader.LoadThreadedGet(IdeRootScenePath); var ideRoot = _ideRootScene.Instantiate(); ideRoot.IdeWindow = this; var slnPath = await slnPathTask;