From 73ac3485aa05ca6f0193be35bca465cb4fef44b5 Mon Sep 17 00:00:00 2001 From: max Date: Sat, 29 Jul 2023 16:06:03 +0200 Subject: [PATCH] Load additive closes #9 --- Editor/ScenePartitionSO.cs | 37 +++++++++++++++++++++++++ Editor/ScenePartitionSceneViewEditor.cs | 10 +++++++ 2 files changed, 47 insertions(+) diff --git a/Editor/ScenePartitionSO.cs b/Editor/ScenePartitionSO.cs index 849bd33..11cb951 100644 --- a/Editor/ScenePartitionSO.cs +++ b/Editor/ScenePartitionSO.cs @@ -235,6 +235,35 @@ public void LoadPartitions(ulong[] ids) } } + public void LoadPartitionsAdditive(ulong[] ids) + { + using (new ProfilerUtility.ProfilerScope($"{nameof(LoadPartitions)}")) + { + SortedSet partitionIds = new SortedSet(); + + // Additive partitions to load. + for (int i = 0; i < ids.Length; i++) + { + SortedSet connections = ScenePartitionUtils.FindDeeplyLinkedObjects(Data.ScenePartitions, ids[i]); + foreach (ulong c in connections) + { + partitionIds.Add(c); + } + } + + // Partitions already loaded. + if (Data.HasLoadedPartitions) + { + foreach (KeyValuePair item in Data.LoadedScenePartitions) + { + partitionIds.Add(item.Key); + } + } + + LoadScenePartitions(partitionIds); + } + } + private SortedSet GetAlwaysLoadIds() { SortedSet partitionIds = new SortedSet(); @@ -336,6 +365,14 @@ public void LoadCell(int gridId) } } + public void LoadCellAdditive(int gridId) + { + if (Data.SceneGrid.Grid.TryGetValue(gridId, out GridList ids)) + { + LoadPartitionsAdditive(ids.list.ToArray()); + } + } + public void ClearCache() { data = null; diff --git a/Editor/ScenePartitionSceneViewEditor.cs b/Editor/ScenePartitionSceneViewEditor.cs index f0b06a2..8dbb070 100644 --- a/Editor/ScenePartitionSceneViewEditor.cs +++ b/Editor/ScenePartitionSceneViewEditor.cs @@ -66,6 +66,7 @@ private static void HandleDuringSceneGui(SceneView sceneView) GenericMenu menu = new GenericMenu(); menu.AddItem(new GUIContent($"Load {gridId}"), false, Load, gridId); + menu.AddItem(new GUIContent($"LoadAdditive {gridId}"), false, LoadAdditive, gridId); menu.ShowAsContext(); Event.current.Use(); @@ -95,5 +96,14 @@ private static void Load(object gridId) scenePartitionSO.LoadCell(cellId); } + + private static void LoadAdditive(object gridId) + { + if (scenePartitionSO == null) return; + if (gridId == null) return; + if (gridId is not int cellId) return; + + scenePartitionSO.LoadCellAdditive(cellId); + } } } \ No newline at end of file