using System.Collections.Generic; using UnityEditor; using UnityEngine; namespace VertexColor.ScenePartition.Editor { public class ScenePartitionEditorWindow : EditorWindow { private const int cellSize = 10; private Vector2 scrollPos = Vector2.zero; private bool foldoutGroupEnabled = false; [MenuItem("Window/ScenePartition")] public static void ShowExample() { ScenePartitionEditorWindow window = GetWindow(); window.titleContent = new GUIContent($"{nameof(ScenePartitionEditorWindow)}"); } private void OnGUI() { EditorGUILayout.LabelField("Cache", EditorStyles.boldLabel); using (new EditorGUILayout.HorizontalScope()) { if (GUILayout.Button("Save", EditorStyles.miniButtonLeft)) { ScenePartitionSS.Save(); } if (GUILayout.Button("Clear", EditorStyles.miniButtonRight)) { ScenePartitionSS.Save(); } } EditorGUIUtils.HorizontalLine(); DrawSceneDataCache(); } private void DrawSceneDataCache() { using (EditorGUIUtils.FoldoutHeaderScope foldoutGroup = new EditorGUIUtils.FoldoutHeaderScope("SceneDataCache", ref foldoutGroupEnabled)) { if (!foldoutGroupEnabled) return; using (EditorGUILayout.ScrollViewScope scope = new EditorGUILayout.ScrollViewScope(scrollPos)) { scrollPos = scope.scrollPosition; using (new EditorGUI.DisabledGroupScope(true)) { ScenePartitionSS scenePartitionSS = ScenePartitionSS.instance; foreach (KeyValuePair sceneData in scenePartitionSS.SceneDataCache) { if (sceneData.Key == null || sceneData.Value == null) continue; EditorGUILayout.LabelField($"{sceneData.Key.name}"); if (sceneData.Value.HasCreatedPartitions) { EditorGUILayout.LabelField($"scenePartitions"); foreach (KeyValuePair scenePartition in sceneData.Value.ScenePartitions) { EditorGUILayout.LongField((long)scenePartition.Key); } } EditorGUILayout.Space(); if (sceneData.Value.HasLoadedPartitions) { EditorGUILayout.LabelField($"loadedScenePartitions"); foreach (KeyValuePair scenePartition in sceneData.Value.LoadedScenePartitions) { EditorGUILayout.LongField((long)scenePartition.Value.id); } } if (sceneData.Value.SceneGrid != null) { EditorGUILayout.LabelField($"generatedSceneGrid"); foreach (KeyValuePair item in sceneData.Value.SceneGrid.Grid) { EditorGUILayout.IntField("gridId", item.Key); EditorGUI.indentLevel++; foreach (ulong id in item.Value.list) { EditorGUILayout.LongField((long)id); } EditorGUI.indentLevel--; } } } } } } } } }