diff --git a/Source/Editor/Editor.cs b/Source/Editor/Editor.cs index 70f52268c..32293c8d1 100644 --- a/Source/Editor/Editor.cs +++ b/Source/Editor/Editor.cs @@ -292,6 +292,30 @@ namespace FlaxEditor } _areModulesInited = true; + // Preload initial scene asset + { + var startupSceneMode = Options.Options.General.StartupSceneMode; + if (startupSceneMode == GeneralOptions.StartupSceneModes.LastOpened && !ProjectCache.HasCustomData(ProjectDataLastScene)) + startupSceneMode = GeneralOptions.StartupSceneModes.ProjectDefault; + switch (startupSceneMode) + { + case GeneralOptions.StartupSceneModes.ProjectDefault: + { + if (string.IsNullOrEmpty(GameProject.DefaultScene)) + break; + JsonSerializer.ParseID(GameProject.DefaultScene, out var defaultSceneId); + Internal_LoadAsset(ref defaultSceneId); + break; + } + case GeneralOptions.StartupSceneModes.LastOpened: + { + if (ProjectCache.TryGetCustomData(ProjectDataLastScene, out var lastSceneIdName) && Guid.TryParse(lastSceneIdName, out var lastSceneId)) + Internal_LoadAsset(ref lastSceneId); + break; + } + } + } + InitializationStart?.Invoke(); // Start Editor initialization ending phrase (will wait for scripts compilation result) @@ -1418,6 +1442,9 @@ namespace FlaxEditor [MethodImpl(MethodImplOptions.InternalCall)] internal static extern void Internal_DeserializeSceneObject(IntPtr sceneObject, string json); + [MethodImpl(MethodImplOptions.InternalCall)] + internal static extern void Internal_LoadAsset(ref Guid id); + #endregion } } diff --git a/Source/Editor/Managed/ManagedEditor.Internal.cpp b/Source/Editor/Managed/ManagedEditor.Internal.cpp index 2ef78052e..4e3f5f1f1 100644 --- a/Source/Editor/Managed/ManagedEditor.Internal.cpp +++ b/Source/Editor/Managed/ManagedEditor.Internal.cpp @@ -1025,6 +1025,11 @@ public: sceneObject->Deserialize(document, modifier.Value); } + static void LoadAsset(Guid* id) + { + Content::LoadAsync(*id); + } + static void InitRuntime() { ADD_INTERNAL_CALL("FlaxEditor.Editor::IsDevInstance", &IsDevInstance); @@ -1070,6 +1075,7 @@ public: ADD_INTERNAL_CALL("FlaxEditor.Editor::Internal_GetVisualScriptPreviousScopeFrame", &GetVisualScriptPreviousScopeFrame); ADD_INTERNAL_CALL("FlaxEditor.Editor::Internal_EvaluateVisualScriptLocal", &EvaluateVisualScriptLocal); ADD_INTERNAL_CALL("FlaxEditor.Editor::Internal_DeserializeSceneObject", &DeserializeSceneObject); + ADD_INTERNAL_CALL("FlaxEditor.Editor::Internal_LoadAsset", &LoadAsset); } };