diff --git a/Editor/ScenePartitionSceneViewEditor.cs b/Editor/ScenePartitionSceneViewEditor.cs index fe461dd..86b4a6e 100644 --- a/Editor/ScenePartitionSceneViewEditor.cs +++ b/Editor/ScenePartitionSceneViewEditor.cs @@ -6,7 +6,7 @@ namespace VertexColor.ScenePartition.Editor [InitializeOnLoad] public class ScenePartitionSceneViewEditor : UnityEditor.Editor { - private const int cellSize = 10; + private static ScenePartitionSO scenePartitionSO = null; static ScenePartitionSceneViewEditor() { @@ -16,24 +16,50 @@ static ScenePartitionSceneViewEditor() private static void HandleDuringSceneGui(SceneView sceneView) { if (Event.current.modifiers != EventModifiers.Control) return; + if (!ScenePartitionUtils.TryGetScenePartitionSOForActiveScene(out scenePartitionSO)) return; + int cellSize = scenePartitionSO.Data.SceneGrid.cellSize; Vector3 gridPosition = CalculateGridPosition(Event.current.mousePosition); - int gridId = SceneGrid.CalculateGridPosition(gridPosition, 10); + int gridId = SceneGrid.CalculateGridPosition(gridPosition, cellSize); - int x = Mathf.FloorToInt(gridPosition.x / cellSize); - int z = Mathf.FloorToInt(gridPosition.z / cellSize); + { // Draw Cells. + foreach (int id in scenePartitionSO.Data.SceneGrid.Grid.Keys) + { + (int x, int y) = SceneGrid.IntToIntPair(id); - Vector3 cellOrign = new Vector3(x * cellSize, 0, z * cellSize); - Vector3[] lines = new Vector3[] { - new Vector3(0, 0, 0) + cellOrign, new Vector3(0, 0, cellSize) + cellOrign, // Left Bottom -> Left Top - new Vector3(cellSize, 0, 0) + cellOrign, new Vector3(cellSize, 0, cellSize) + cellOrign, // Right Bottom -> Right Top - new Vector3(0, 0, 0) + cellOrign, new Vector3(cellSize, 0, 0) + cellOrign, // Left Bottom -> Right Bottom - new Vector3(0, 0, cellSize) + cellOrign, new Vector3(cellSize, 0, cellSize) + cellOrign, // Left Top -> Right Top - }; + Vector3 cellOrign = new Vector3(x * cellSize, 0, y * cellSize); + Vector3[] lines = new Vector3[] { + new Vector3(0, 0, 0) + cellOrign, new Vector3(0, 0, cellSize) + cellOrign, // Left Bottom -> Left Top + new Vector3(cellSize, 0, 0) + cellOrign, new Vector3(cellSize, 0, cellSize) + cellOrign, // Right Bottom -> Right Top + new Vector3(0, 0, 0) + cellOrign, new Vector3(cellSize, 0, 0) + cellOrign, // Left Bottom -> Right Bottom + new Vector3(0, 0, cellSize) + cellOrign, new Vector3(cellSize, 0, cellSize) + cellOrign, // Left Top -> Right Top + }; - Handles.DrawDottedLines(lines, 10.0f); - Handles.Label(cellOrign + new Vector3(cellSize * 0.5f, 0, cellSize * 0.5f), new GUIContent($"{gridId}")); + Handles.DrawLines(lines); + } + } + if (!scenePartitionSO.Data.SceneGrid.Grid.ContainsKey(gridId)) return; + + { // Draw Selection. + int x = Mathf.FloorToInt(gridPosition.x / cellSize); + int z = Mathf.FloorToInt(gridPosition.z / cellSize); + + Vector3 cellOrign = new Vector3(x * cellSize, 0, z * cellSize); + Vector3[] lines = new Vector3[] { + new Vector3(0, 0, 0) + cellOrign, new Vector3(0, 0, cellSize) + cellOrign, // Left Bottom -> Left Top + new Vector3(cellSize, 0, 0) + cellOrign, new Vector3(cellSize, 0, cellSize) + cellOrign, // Right Bottom -> Right Top + new Vector3(0, 0, 0) + cellOrign, new Vector3(cellSize, 0, 0) + cellOrign, // Left Bottom -> Right Bottom + new Vector3(0, 0, cellSize) + cellOrign, new Vector3(cellSize, 0, cellSize) + cellOrign, // Left Top -> Right Top + }; + + Color c = Handles.color; + Handles.color = Color.yellow; + Handles.DrawLines(lines); + Handles.color = c; + } + + // Context menu to load. if (Event.current.button == 1 && Event.current.type == EventType.MouseDown) { GenericMenu menu = new GenericMenu(); @@ -62,10 +88,11 @@ private static Vector3 CalculateGridPosition(Vector2 mousePosition) private static void Load(object gridId) { + if (scenePartitionSO == null) return; if (gridId == null) return; - if (gridId is not int gridPos) return; - + if (gridId is not int cellId) return; + scenePartitionSO.LoadCell(cellId); } } } \ No newline at end of file diff --git a/Editor/ScenePartitionUtils.cs b/Editor/ScenePartitionUtils.cs index e075c76..687d050 100644 --- a/Editor/ScenePartitionUtils.cs +++ b/Editor/ScenePartitionUtils.cs @@ -57,5 +57,35 @@ private static void FindDeeplyLinkedObjectsRecursive(SortedList(path); + + if (scenePartition == null) continue; + + if (scenePartition.SceneName == activeScene.name) + { + scenePartitionSO = scenePartition; + return true; + } + } + + return false; + } } } \ No newline at end of file