111 lines
4.0 KiB
C#
111 lines
4.0 KiB
C#
using UnityEditor.Overlays;
|
|
using UnityEditor.Toolbars;
|
|
using UnityEditor.UIElements;
|
|
using UnityEngine;
|
|
using UnityEngine.UIElements;
|
|
|
|
namespace UnityEditor.Tilemaps
|
|
{
|
|
[Overlay(typeof(SceneView), k_OverlayId, k_DisplayName)]
|
|
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 &&
|
|
GridPaintPaletteWindow.isActive;
|
|
}
|
|
|
|
[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);
|
|
}
|
|
}
|
|
|
|
[EditorToolbarElement("Tile Palette/Focus Dropdown")]
|
|
sealed class TilePaletteFocusDropdown : EditorToolbarDropdown
|
|
{
|
|
const string k_DropdownIconClass = "unity-toolbar-dropdown-label-icon";
|
|
const string k_ToolSettingsClass = "unity-tool-settings";
|
|
|
|
readonly TextElement m_Label;
|
|
readonly VisualElement m_Icon;
|
|
|
|
readonly GUIContent m_None;
|
|
readonly GUIContent m_Tilemap;
|
|
readonly GUIContent m_Grid;
|
|
|
|
public TilePaletteFocusDropdown()
|
|
{
|
|
name = "Focus Dropdown";
|
|
AddToClassList(k_ToolSettingsClass);
|
|
|
|
m_None = EditorGUIUtility.TrTextContentWithIcon("None",
|
|
"Focus Mode is not active.",
|
|
"ToolHandlePivot");
|
|
m_Tilemap = EditorGUIUtility.TrTextContentWithIcon("Tilemap",
|
|
"Focuses on the active Tilemap. Filters out all other Renderers.",
|
|
"ToolHandlePivot");
|
|
m_Grid = EditorGUIUtility.TrTextContentWithIcon("Grid",
|
|
"Focuses on all Renderers with the active Grid. Filters out all other Renderers.",
|
|
"ToolHandlePivot");
|
|
|
|
clicked += OpenContextMenu;
|
|
|
|
FocusModeChanged();
|
|
}
|
|
|
|
void OpenContextMenu()
|
|
{
|
|
var menu = new GenericMenu();
|
|
var focusMode = GridPaintPaletteWindow.focusMode;
|
|
menu.AddItem(m_None, focusMode == GridPaintPaletteWindow.TilemapFocusMode.None, () => SetFocusMode(GridPaintPaletteWindow.TilemapFocusMode.None));
|
|
menu.AddItem(m_Tilemap, focusMode == GridPaintPaletteWindow.TilemapFocusMode.Tilemap, () => SetFocusMode(GridPaintPaletteWindow.TilemapFocusMode.Tilemap));
|
|
menu.AddItem(m_Grid, focusMode == GridPaintPaletteWindow.TilemapFocusMode.Grid, () => SetFocusMode(GridPaintPaletteWindow.TilemapFocusMode.Grid));
|
|
menu.DropDown(worldBound);
|
|
}
|
|
|
|
void SetFocusMode(GridPaintPaletteWindow.TilemapFocusMode mode)
|
|
{
|
|
GridPaintPaletteWindow.instances[0].SetFocusMode(mode);
|
|
FocusModeChanged();
|
|
}
|
|
|
|
void FocusModeChanged()
|
|
{
|
|
var content = m_None;
|
|
switch (GridPaintPaletteWindow.focusMode)
|
|
{
|
|
case GridPaintPaletteWindow.TilemapFocusMode.Tilemap:
|
|
content = m_Tilemap;
|
|
break;
|
|
case GridPaintPaletteWindow.TilemapFocusMode.Grid:
|
|
content = m_Grid;
|
|
break;
|
|
}
|
|
text = content.text;
|
|
tooltip = content.tooltip;
|
|
icon = EditorGUIUtility.LoadIconRequired("TilemapRenderer Icon");
|
|
}
|
|
}
|
|
}
|