GridSelectionEditor.cs 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. using UnityEngine;
  2. namespace UnityEditor.Tilemaps
  3. {
  4. [CustomEditor(typeof(GridSelection))]
  5. internal class GridSelectionEditor : Editor
  6. {
  7. private const float iconSize = 32f;
  8. static class Styles
  9. {
  10. public static readonly GUIContent gridSelectionLabel = EditorGUIUtility.TrTextContent("Grid Selection");
  11. }
  12. private void OnEnable()
  13. {
  14. // Give focus to Inspector window for keyboard actions
  15. EditorWindow.FocusWindowIfItsOpen<InspectorWindow>();
  16. }
  17. public override void OnInspectorGUI()
  18. {
  19. EditorGUI.BeginChangeCheck();
  20. if (GridPaintingState.activeBrushEditor && GridSelection.active)
  21. {
  22. GridPaintingState.activeBrushEditor.OnSelectionInspectorGUI();
  23. }
  24. if (EditorGUI.EndChangeCheck())
  25. {
  26. if (GridPaintingState.IsPartOfActivePalette(GridSelection.target))
  27. {
  28. GridPaintingState.UnlockGridPaintPaletteClipboardForEditing();
  29. GridPaintingState.RepaintGridPaintPaletteWindow();
  30. }
  31. }
  32. }
  33. protected override void OnHeaderGUI()
  34. {
  35. EditorGUILayout.BeginHorizontal(EditorStyles.inspectorBig);
  36. Texture2D icon = AssetPreview.GetMiniTypeThumbnail(typeof(Grid));
  37. GUILayout.Label(icon, GUILayout.Width(iconSize), GUILayout.Height(iconSize));
  38. EditorGUILayout.BeginVertical();
  39. GUILayout.Label(Styles.gridSelectionLabel);
  40. GridSelection.position = EditorGUILayout.BoundsIntField(GUIContent.none, GridSelection.position);
  41. EditorGUILayout.EndVertical();
  42. EditorGUILayout.EndHorizontal();
  43. DrawHeaderHelpAndSettingsGUI(GUILayoutUtility.GetLastRect());
  44. }
  45. public bool HasFrameBounds()
  46. {
  47. return GridSelection.active;
  48. }
  49. public Bounds OnGetFrameBounds()
  50. {
  51. Bounds bounds = new Bounds();
  52. if (GridSelection.active)
  53. {
  54. Vector3Int gridMin = GridSelection.position.min;
  55. Vector3Int gridMax = GridSelection.position.max;
  56. Vector3 min = GridSelection.grid.CellToWorld(gridMin);
  57. Vector3 max = GridSelection.grid.CellToWorld(gridMax);
  58. bounds = new Bounds((max + min) * .5f, max - min);
  59. }
  60. return bounds;
  61. }
  62. }
  63. }