暫無描述
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.3KB

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