A game about forced loneliness, made by TACStudios
1using System;
2using UnityEngine;
3
4namespace UnityEditor.Tilemaps
5{
6 [CustomEditor(typeof(GridSelection))]
7 internal class GridSelectionEditor : Editor
8 {
9 private const float iconSize = 32f;
10
11 static class Styles
12 {
13 public static readonly GUIContent gridSelectionLabel = EditorGUIUtility.TrTextContent("Grid Selection");
14
15 public static readonly string iconPath = "Packages/com.unity.2d.tilemap/Editor/Icons/GridSelection.png";
16 }
17
18 private void OnValidate()
19 {
20 var position = GridSelection.position;
21 GridSelection.position = new BoundsInt(position.min, position.max - position.min);
22 }
23
24 private void OnEnable()
25 {
26 // Give focus to Inspector window for keyboard actions
27 EditorApplication.delayCall += () => EditorWindow.FocusWindowIfItsOpen<InspectorWindow>();
28 }
29
30 public override void OnInspectorGUI()
31 {
32 EditorGUI.BeginChangeCheck();
33 if (GridPaintingState.activeBrushEditor && GridSelection.active)
34 {
35 GridPaintingState.activeBrushEditor.OnSelectionInspectorGUI();
36 }
37 if (EditorGUI.EndChangeCheck())
38 {
39 if (GridPaintingState.IsPartOfActivePalette(GridSelection.target))
40 {
41 GridPaintingState.UnlockGridPaintPaletteClipboardForEditing();
42 GridPaintingState.RepaintGridPaintPaletteWindow();
43 }
44 else
45 {
46 GridSelection.SaveStandalone();
47 }
48 }
49 }
50
51 protected override void OnHeaderGUI()
52 {
53 EditorGUILayout.BeginHorizontal(EditorStyles.inspectorBig);
54 Texture2D icon = EditorGUIUtility.LoadIcon(Styles.iconPath);
55 GUILayout.Label(icon, GUILayout.Width(iconSize), GUILayout.Height(iconSize));
56 EditorGUILayout.BeginVertical();
57 GUILayout.Label(Styles.gridSelectionLabel);
58 EditorGUI.BeginChangeCheck();
59 GridSelection.position = EditorGUILayout.BoundsIntField(GUIContent.none, GridSelection.position);
60 if (EditorGUI.EndChangeCheck())
61 {
62 OnValidate();
63 }
64 EditorGUILayout.EndVertical();
65 EditorGUILayout.EndHorizontal();
66 DrawHeaderHelpAndSettingsGUI(GUILayoutUtility.GetLastRect());
67 }
68
69 public bool HasFrameBounds()
70 {
71 return GridSelection.active;
72 }
73
74 public Bounds OnGetFrameBounds()
75 {
76 Bounds bounds = new Bounds();
77 if (GridSelection.active)
78 {
79 Vector3Int gridMin = GridSelection.position.min;
80 Vector3Int gridMax = GridSelection.position.max;
81
82 Vector3 min = GridSelection.grid.CellToWorld(gridMin);
83 Vector3 max = GridSelection.grid.CellToWorld(gridMax);
84
85 bounds = new Bounds((max + min) * .5f, max - min);
86 }
87
88 return bounds;
89 }
90 }
91}