diff --git a/Editor/ScenePartitionSceneViewEditor.cs b/Editor/ScenePartitionSceneViewEditor.cs index b52b90c..fe461dd 100644 --- a/Editor/ScenePartitionSceneViewEditor.cs +++ b/Editor/ScenePartitionSceneViewEditor.cs @@ -1,69 +1,71 @@ using UnityEditor; using UnityEngine; -using VertexColor.ScenePartition.Editor; -[InitializeOnLoad] -public class ScenePartitionSceneViewEditor : Editor +namespace VertexColor.ScenePartition.Editor { - private const int cellSize = 10; - - static ScenePartitionSceneViewEditor() + [InitializeOnLoad] + public class ScenePartitionSceneViewEditor : UnityEditor.Editor { - SceneView.duringSceneGui += HandleDuringSceneGui; - } + private const int cellSize = 10; - private static void HandleDuringSceneGui(SceneView sceneView) - { - if (Event.current.modifiers != EventModifiers.Control) return; + static ScenePartitionSceneViewEditor() + { + SceneView.duringSceneGui += HandleDuringSceneGui; + } - Vector3 gridPosition = CalculateGridPosition(Event.current.mousePosition); - int gridId = SceneGrid.CalculateGridPosition(gridPosition, 10); + private static void HandleDuringSceneGui(SceneView sceneView) + { + if (Event.current.modifiers != EventModifiers.Control) return; - int x = Mathf.FloorToInt(gridPosition.x / cellSize); - int z = Mathf.FloorToInt(gridPosition.z / cellSize); + Vector3 gridPosition = CalculateGridPosition(Event.current.mousePosition); + int gridId = SceneGrid.CalculateGridPosition(gridPosition, 10); - Vector3 cellOrign = new Vector3(x * cellSize, 0, z * cellSize); - Vector3[] lines = new Vector3[] { + 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 }; - Handles.DrawDottedLines(lines, 10.0f); - Handles.Label(cellOrign + new Vector3(cellSize * 0.5f, 0, cellSize * 0.5f), new GUIContent($"{gridId}")); + Handles.DrawDottedLines(lines, 10.0f); + Handles.Label(cellOrign + new Vector3(cellSize * 0.5f, 0, cellSize * 0.5f), new GUIContent($"{gridId}")); - if (Event.current.button == 1 && Event.current.type == EventType.MouseDown) - { - GenericMenu menu = new GenericMenu(); + if (Event.current.button == 1 && Event.current.type == EventType.MouseDown) + { + GenericMenu menu = new GenericMenu(); - menu.AddItem(new GUIContent($"Load {gridId}"), false, Load, gridId); - menu.ShowAsContext(); + menu.AddItem(new GUIContent($"Load {gridId}"), false, Load, gridId); + menu.ShowAsContext(); - Event.current.Use(); + Event.current.Use(); + } + + SceneView.RepaintAll(); } - SceneView.RepaintAll(); - } + private static Vector3 CalculateGridPosition(Vector2 mousePosition) + { + if (Event.current == null) return Vector3.zero; - private static Vector3 CalculateGridPosition(Vector2 mousePosition) - { - if (Event.current == null) return Vector3.zero; + Ray ray = HandleUtility.GUIPointToWorldRay(mousePosition); + Plane plane = new Plane(Vector3.up, Vector3.zero); // Horizontal plane at y = 0 - Ray ray = HandleUtility.GUIPointToWorldRay(mousePosition); - Plane plane = new Plane(Vector3.up, Vector3.zero); // Horizontal plane at y = 0 + if (!plane.Raycast(ray, out float distance)) return Vector3.zero; - if (!plane.Raycast(ray, out float distance)) return Vector3.zero; + Vector3 intersectionPoint = ray.GetPoint(distance); + return intersectionPoint; + } - Vector3 intersectionPoint = ray.GetPoint(distance); - return intersectionPoint; - } - - private static void Load(object gridId) - { - if (gridId == null) return; - if (gridId is not int gridPos) return; + private static void Load(object gridId) + { + if (gridId == null) return; + if (gridId is not int gridPos) return; + } } } \ No newline at end of file diff --git a/Runtime/SceneGrid.cs b/Runtime/SceneGrid.cs index b673d7a..fa6fe51 100644 --- a/Runtime/SceneGrid.cs +++ b/Runtime/SceneGrid.cs @@ -1,7 +1,7 @@ using System.Collections.Generic; using UnityEngine; -namespace VertexColor.ScenePartition.Editor +namespace VertexColor.ScenePartition { [System.Serializable] public class SceneGrid