using UnityEditor.Overlays; using UnityEditor.Toolbars; using UnityEditor.UIElements; using UnityEngine; using UnityEngine.UIElements; namespace UnityEditor.Tilemaps { [Overlay(typeof(SceneView), k_OverlayId, k_DisplayName , defaultDockZone = DockZone.RightColumn , defaultDockPosition = DockPosition.Bottom , defaultDockIndex = 0 , defaultLayout = Layout.Panel)] internal class SceneViewTilemapFocusOverlay : ToolbarOverlay, ITransientOverlay { internal const string k_OverlayId = "Scene View/Tilemap Focus"; private const string k_DisplayName = "Tilemap Focus"; public SceneViewTilemapFocusOverlay() : base(new[] {"Tile Palette/Focus Label", "Tile Palette/Focus Dropdown"}) {} public bool visible => GridPaintingState.defaultBrush != null && GridPaintingState.scenePaintTarget != null && GridPaintingState.isEditing; } [EditorToolbarElement("Tile Palette/Focus Label")] sealed class TilePaletteFocusLabel : VisualElement { const string k_ToolSettingsClass = "unity-tool-settings"; readonly TextElement m_Label; private static string k_LabelText = L10n.Tr("Focus On"); public TilePaletteFocusLabel() { name = "Focus Label"; AddToClassList(k_ToolSettingsClass); m_Label = new TextElement(); m_Label.AddToClassList(EditorToolbar.elementLabelClassName); m_Label.text = k_LabelText; Add(m_Label); } } /// /// A `VisualElement` displaying a `Dropdown` for selecting the Focus Mode while painting on Tilemaps. /// [EditorToolbarElement("Tile Palette/Focus Dropdown")] public sealed class TilePaletteFocusDropdown : EditorToolbarDropdown { /// /// A factory for `TilePaletteFocusDropdown`. /// public class TilePaletteFocusDropdownFactory : UxmlFactory {} /// /// UxmlTraits for `TilePaletteFocusDropdown`. /// public class TilePaletteFocusDropdownUxmlTraits : UxmlTraits {} const string k_DropdownIconClass = "unity-toolbar-dropdown-label-icon"; const string k_ToolSettingsClass = "unity-tool-settings"; private static readonly string k_Name = L10n.Tr("Focus Dropdown"); private static readonly string k_FocusNoneIconPath = "Packages/com.unity.2d.tilemap/Editor/Icons/Tilemap.FocusNone.png"; private static readonly string k_FocusTilemapIconPath = "Packages/com.unity.2d.tilemap/Editor/Icons/Tilemap.FocusTilemap.png"; private static readonly string k_FocusGridIconPath = "Packages/com.unity.2d.tilemap/Editor/Icons/Tilemap.FocusGrid.png"; readonly TextElement m_Label; readonly VisualElement m_Icon; readonly GUIContent m_None; readonly GUIContent m_Tilemap; readonly GUIContent m_Grid; /// /// Constructor for `TilePaletteFocusDropdown`. /// public TilePaletteFocusDropdown() { name = k_Name; AddToClassList(k_ToolSettingsClass); m_None = EditorGUIUtility.TrTextContentWithIcon("None", "Focus Mode is not active.", EditorGUIUtility.LoadIcon(k_FocusNoneIconPath)); m_Tilemap = EditorGUIUtility.TrTextContentWithIcon("Tilemap", "Focuses on the active Tilemap. Filters out all other Renderers.", EditorGUIUtility.LoadIcon(k_FocusTilemapIconPath)); m_Grid = EditorGUIUtility.TrTextContentWithIcon("Grid", "Focuses on all Renderers with the active Grid. Filters out all other Renderers.", EditorGUIUtility.LoadIcon(k_FocusGridIconPath)); clicked += OpenContextMenu; FocusModeChanged(); } void OpenContextMenu() { var menu = new GenericMenu(); var focusMode = TilemapFocusModeUtility.focusMode; menu.AddItem(m_None, focusMode == TilemapFocusModeUtility.TilemapFocusMode.None, () => SetFocusMode(TilemapFocusModeUtility.TilemapFocusMode.None)); menu.AddItem(m_Tilemap, focusMode == TilemapFocusModeUtility.TilemapFocusMode.Tilemap, () => SetFocusMode(TilemapFocusModeUtility.TilemapFocusMode.Tilemap)); menu.AddItem(m_Grid, focusMode == TilemapFocusModeUtility.TilemapFocusMode.Grid, () => SetFocusMode(TilemapFocusModeUtility.TilemapFocusMode.Grid)); menu.DropDown(worldBound); } void SetFocusMode(TilemapFocusModeUtility.TilemapFocusMode mode) { TilemapFocusModeUtility.SetFocusMode(mode); FocusModeChanged(); } void FocusModeChanged() { var content = m_None; switch (TilemapFocusModeUtility.focusMode) { case TilemapFocusModeUtility.TilemapFocusMode.Tilemap: content = m_Tilemap; break; case TilemapFocusModeUtility.TilemapFocusMode.Grid: content = m_Grid; break; } text = content.text; tooltip = content.tooltip; icon = content.image as Texture2D; } } }