A game about forced loneliness, made by TACStudios
at master 5.8 kB view raw
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}