From 76c6696eadf11c1ce4f92d2a09ed8889d26c1f0e Mon Sep 17 00:00:00 2001 From: Chandler Cox Date: Fri, 21 Apr 2023 08:36:56 -0500 Subject: [PATCH 1/4] Add saving and re-opening all active scenes between editor sessions. --- Source/Editor/Editor.cs | 53 +++++++++++++++++++++++++++++++---------- 1 file changed, 40 insertions(+), 13 deletions(-) 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)); } From c93b41a88d839aac31876c791f23dafe281dc983 Mon Sep 17 00:00:00 2001 From: Chandler Cox Date: Fri, 21 Apr 2023 10:34:40 -0500 Subject: [PATCH 2/4] Small Cleanup --- Source/Editor/Editor.cs | 1 - 1 file changed, 1 deletion(-) diff --git a/Source/Editor/Editor.cs b/Source/Editor/Editor.cs index bf51dd323..1f4725ef7 100644 --- a/Source/Editor/Editor.cs +++ b/Source/Editor/Editor.cs @@ -691,7 +691,6 @@ namespace FlaxEditor { lastSceneIds.Add(Guid.Empty); } - //var lastSceneId = Level.ScenesCount > 0 ? Level.Scenes[0].ID : Guid.Empty; var lastSceneSpawn = Windows.EditWin.Viewport.ViewRay; ProjectCache.SetCustomData(ProjectDataLastScene, JsonSerializer.Serialize(lastSceneIds)); ProjectCache.SetCustomData(ProjectDataLastSceneSpawn, JsonSerializer.Serialize(lastSceneSpawn)); From 918140bc6dbc19c7b881ea100eb88018339b983f Mon Sep 17 00:00:00 2001 From: Chandler Cox Date: Sat, 22 Apr 2023 12:04:57 -0500 Subject: [PATCH 3/4] Change List to Guid[] when deserializing. --- Source/Editor/Editor.cs | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/Source/Editor/Editor.cs b/Source/Editor/Editor.cs index 1f4725ef7..11e16f1ef 100644 --- a/Source/Editor/Editor.cs +++ b/Source/Editor/Editor.cs @@ -325,8 +325,7 @@ namespace FlaxEditor { if (ProjectCache.TryGetCustomData(ProjectDataLastScene, out var lastSceneIdName)) { - var lastSceneList = JsonSerializer.Deserialize>(lastSceneIdName); - + var lastSceneList = JsonSerializer.Deserialize(lastSceneIdName); foreach (var scene in lastSceneList) { var lastScene = scene; @@ -448,8 +447,7 @@ namespace FlaxEditor { if (ProjectCache.TryGetCustomData(ProjectDataLastScene, out var lastSceneIdName)) { - var lastSceneList = JsonSerializer.Deserialize>(lastSceneIdName); - + var lastSceneList = JsonSerializer.Deserialize(lastSceneIdName); foreach (var sceneId in lastSceneList) { var lastScene = ContentDatabase.Find(sceneId); @@ -677,7 +675,7 @@ namespace FlaxEditor // Start exit StateMachine.GoToState(); - // Cache last opened scene + // Cache last opened scenes { List lastSceneIds = new List(); if (Level.ScenesCount > 0) From 6fd636b421856c04c7c2a1d025d946aec2e29baa Mon Sep 17 00:00:00 2001 From: Chandler Cox Date: Fri, 28 Apr 2023 09:33:24 -0500 Subject: [PATCH 4/4] Change to serialize list as array --- Source/Editor/Editor.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Source/Editor/Editor.cs b/Source/Editor/Editor.cs index 11e16f1ef..498c8cbd9 100644 --- a/Source/Editor/Editor.cs +++ b/Source/Editor/Editor.cs @@ -690,7 +690,7 @@ namespace FlaxEditor lastSceneIds.Add(Guid.Empty); } var lastSceneSpawn = Windows.EditWin.Viewport.ViewRay; - ProjectCache.SetCustomData(ProjectDataLastScene, JsonSerializer.Serialize(lastSceneIds)); + ProjectCache.SetCustomData(ProjectDataLastScene, JsonSerializer.Serialize(lastSceneIds.ToArray())); ProjectCache.SetCustomData(ProjectDataLastSceneSpawn, JsonSerializer.Serialize(lastSceneSpawn)); }