diff --git a/Source/Editor/Editor.cs b/Source/Editor/Editor.cs index 4d2cf4346..bf51dd323 100644 --- a/Source/Editor/Editor.cs +++ b/Source/Editor/Editor.cs @@ -323,8 +323,16 @@ namespace FlaxEditor } case GeneralOptions.StartupSceneModes.LastOpened: { - if (ProjectCache.TryGetCustomData(ProjectDataLastScene, out var lastSceneIdName) && Guid.TryParse(lastSceneIdName, out var lastSceneId)) - Internal_LoadAsset(ref lastSceneId); + if (ProjectCache.TryGetCustomData(ProjectDataLastScene, out var lastSceneIdName)) + { + var lastSceneList = JsonSerializer.Deserialize>(lastSceneIdName); + + foreach (var scene in lastSceneList) + { + var lastScene = scene; + Internal_LoadAsset(ref lastScene); + } + } break; } } @@ -438,18 +446,25 @@ namespace FlaxEditor } case GeneralOptions.StartupSceneModes.LastOpened: { - if (ProjectCache.TryGetCustomData(ProjectDataLastScene, out var lastSceneIdName) && Guid.TryParse(lastSceneIdName, out var lastSceneId)) + if (ProjectCache.TryGetCustomData(ProjectDataLastScene, out var lastSceneIdName)) { - var lastScene = ContentDatabase.Find(lastSceneId); - if (lastScene is SceneItem) - { - Editor.Log("Loading last opened scene"); - Scene.OpenScene(lastSceneId); + var lastSceneList = JsonSerializer.Deserialize>(lastSceneIdName); - // Restore view - if (ProjectCache.TryGetCustomData(ProjectDataLastSceneSpawn, out var lastSceneSpawnName)) - Windows.EditWin.Viewport.ViewRay = JsonSerializer.Deserialize(lastSceneSpawnName); + foreach (var sceneId in lastSceneList) + { + var lastScene = ContentDatabase.Find(sceneId); + if (!(lastScene is SceneItem)) + continue; + + Editor.Log($"Loading last opened scene: {lastScene.ShortName}"); + if (sceneId == lastSceneList[0]) + Scene.OpenScene(sceneId); + else + Level.LoadSceneAsync(sceneId); } + // Restore view + if (ProjectCache.TryGetCustomData(ProjectDataLastSceneSpawn, out var lastSceneSpawnName)) + Windows.EditWin.Viewport.ViewRay = JsonSerializer.Deserialize(lastSceneSpawnName); } break; } @@ -664,9 +679,21 @@ namespace FlaxEditor // Cache last opened scene { - var lastSceneId = Level.ScenesCount > 0 ? Level.Scenes[0].ID : Guid.Empty; + List lastSceneIds = new List(); + if (Level.ScenesCount > 0) + { + foreach (var scene in Level.Scenes) + { + lastSceneIds.Add(scene.ID); + } + } + else + { + lastSceneIds.Add(Guid.Empty); + } + //var lastSceneId = Level.ScenesCount > 0 ? Level.Scenes[0].ID : Guid.Empty; var lastSceneSpawn = Windows.EditWin.Viewport.ViewRay; - ProjectCache.SetCustomData(ProjectDataLastScene, lastSceneId.ToString()); + ProjectCache.SetCustomData(ProjectDataLastScene, JsonSerializer.Serialize(lastSceneIds)); ProjectCache.SetCustomData(ProjectDataLastSceneSpawn, JsonSerializer.Serialize(lastSceneSpawn)); }