A game about forced loneliness, made by TACStudios
1using System;
2using UnityEditor.Overlays;
3using UnityEditor.Toolbars;
4using UnityEditor.UIElements;
5using UnityEngine;
6using UnityEngine.UIElements;
7
8namespace UnityEditor.Tilemaps
9{
10 [Overlay(typeof(SceneView), k_OverlayId, k_DisplayName
11 , defaultDockZone = DockZone.RightColumn
12 , defaultDockPosition = DockPosition.Bottom
13 , defaultDockIndex = 0
14 , defaultLayout = Layout.Panel)]
15 internal class SceneViewTilemapFocusOverlay : ToolbarOverlay, ITransientOverlay
16 {
17 internal const string k_OverlayId = "Scene View/Tilemap Focus";
18 private const string k_DisplayName = "Tilemap Focus";
19
20 public SceneViewTilemapFocusOverlay() : base(new[] {"Tile Palette/Focus Label", "Tile Palette/Focus Dropdown"})
21 {}
22
23 public bool visible =>
24 GridPaintingState.isEditing
25 && GridPaintingState.scenePaintTarget != null
26 && GridPaintingState.defaultBrush != null;
27 }
28
29 [EditorToolbarElement("Tile Palette/Focus Label")]
30 sealed class TilePaletteFocusLabel : VisualElement
31 {
32 const string k_ToolSettingsClass = "unity-tool-settings";
33
34 readonly TextElement m_Label;
35
36 private static string k_LabelText = L10n.Tr("Focus On");
37
38 public TilePaletteFocusLabel()
39 {
40 name = "Focus Label";
41 AddToClassList(k_ToolSettingsClass);
42
43 m_Label = new TextElement();
44 m_Label.AddToClassList(EditorToolbar.elementLabelClassName);
45 m_Label.text = k_LabelText;
46 Add(m_Label);
47 }
48 }
49
50 /// <summary>
51 /// A `VisualElement` displaying a `Dropdown` for selecting the Focus Mode while painting on Tilemaps.
52 /// </summary>
53 [EditorToolbarElement("Tile Palette/Focus Dropdown")]
54 [UxmlElement]
55 public sealed partial class TilePaletteFocusDropdown : EditorToolbarDropdown
56 {
57 /// <summary>
58 /// A factory for `TilePaletteFocusDropdown`.
59 /// </summary>
60 [Obsolete("TilePaletteFocusDropdownFactory is deprecated and will be removed. Use UxmlElementAttribute instead.", false)]
61 public class TilePaletteFocusDropdownFactory : UxmlFactory<TilePaletteFocusDropdown, TilePaletteFocusDropdownUxmlTraits> {}
62 /// <summary>
63 /// UxmlTraits for `TilePaletteFocusDropdown`.
64 /// </summary>
65 [Obsolete("TilePaletteFocusDropdownUxmlTraits is deprecated and will be removed. Use UxmlElementAttribute instead.", false)]
66 public class TilePaletteFocusDropdownUxmlTraits : UxmlTraits {}
67
68 const string k_DropdownIconClass = "unity-toolbar-dropdown-label-icon";
69 const string k_ToolSettingsClass = "unity-tool-settings";
70
71 private static readonly string k_Name = L10n.Tr("Focus Dropdown");
72 private static readonly string k_FocusNoneIconPath = "Packages/com.unity.2d.tilemap/Editor/Icons/Tilemap.FocusNone.png";
73 private static readonly string k_FocusTilemapIconPath = "Packages/com.unity.2d.tilemap/Editor/Icons/Tilemap.FocusTilemap.png";
74 private static readonly string k_FocusGridIconPath = "Packages/com.unity.2d.tilemap/Editor/Icons/Tilemap.FocusGrid.png";
75
76 readonly TextElement m_Label;
77 readonly VisualElement m_Icon;
78
79 readonly GUIContent m_None;
80 readonly GUIContent m_Tilemap;
81 readonly GUIContent m_Grid;
82
83 /// <summary>
84 /// Constructor for `TilePaletteFocusDropdown`.
85 /// </summary>
86 public TilePaletteFocusDropdown()
87 {
88 name = k_Name;
89 AddToClassList(k_ToolSettingsClass);
90
91 m_None = EditorGUIUtility.TrTextContentWithIcon("None",
92 "Focus Mode is not active.",
93 EditorGUIUtility.LoadIcon(k_FocusNoneIconPath));
94 m_Tilemap = EditorGUIUtility.TrTextContentWithIcon("Tilemap",
95 "Focuses on the active Tilemap. Filters out all other Renderers.",
96 EditorGUIUtility.LoadIcon(k_FocusTilemapIconPath));
97 m_Grid = EditorGUIUtility.TrTextContentWithIcon("Grid",
98 "Focuses on all Renderers with the active Grid. Filters out all other Renderers.",
99 EditorGUIUtility.LoadIcon(k_FocusGridIconPath));
100
101 clicked += OpenContextMenu;
102
103 FocusModeChanged();
104 }
105
106 void OpenContextMenu()
107 {
108 var menu = new GenericMenu();
109 var focusMode = TilemapFocusModeUtility.focusMode;
110 menu.AddItem(m_None, focusMode == TilemapFocusModeUtility.TilemapFocusMode.None, () => SetFocusMode(TilemapFocusModeUtility.TilemapFocusMode.None));
111 menu.AddItem(m_Tilemap, focusMode == TilemapFocusModeUtility.TilemapFocusMode.Tilemap, () => SetFocusMode(TilemapFocusModeUtility.TilemapFocusMode.Tilemap));
112 menu.AddItem(m_Grid, focusMode == TilemapFocusModeUtility.TilemapFocusMode.Grid, () => SetFocusMode(TilemapFocusModeUtility.TilemapFocusMode.Grid));
113 menu.DropDown(worldBound);
114 }
115
116 void SetFocusMode(TilemapFocusModeUtility.TilemapFocusMode mode)
117 {
118 TilemapFocusModeUtility.SetFocusMode(mode);
119 FocusModeChanged();
120 }
121
122 void FocusModeChanged()
123 {
124 var content = m_None;
125 switch (TilemapFocusModeUtility.focusMode)
126 {
127 case TilemapFocusModeUtility.TilemapFocusMode.Tilemap:
128 content = m_Tilemap;
129 break;
130 case TilemapFocusModeUtility.TilemapFocusMode.Grid:
131 content = m_Grid;
132 break;
133 }
134
135 text = content.text;
136 tooltip = content.tooltip;
137 icon = content.image as Texture2D;
138 }
139 }
140}