暫無描述
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

SceneViewTilemapFocusOverlay.cs 5.6KB

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