Ingen beskrivning
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 4.0KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  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. internal class SceneViewTilemapFocusOverlay : ToolbarOverlay, ITransientOverlay
  10. {
  11. internal const string k_OverlayId = "Scene View/Tilemap Focus";
  12. private const string k_DisplayName = "Tilemap Focus";
  13. public SceneViewTilemapFocusOverlay() : base(new[] {"Tile Palette/Focus Label", "Tile Palette/Focus Dropdown"})
  14. {}
  15. public bool visible =>
  16. GridPaintingState.defaultBrush != null && GridPaintingState.scenePaintTarget != null &&
  17. GridPaintPaletteWindow.isActive;
  18. }
  19. [EditorToolbarElement("Tile Palette/Focus Label")]
  20. sealed class TilePaletteFocusLabel : VisualElement
  21. {
  22. const string k_ToolSettingsClass = "unity-tool-settings";
  23. readonly TextElement m_Label;
  24. private static string k_LabelText = L10n.Tr("Focus On");
  25. public TilePaletteFocusLabel()
  26. {
  27. name = "Focus Label";
  28. AddToClassList(k_ToolSettingsClass);
  29. m_Label = new TextElement();
  30. m_Label.AddToClassList(EditorToolbar.elementLabelClassName);
  31. m_Label.text = k_LabelText;
  32. Add(m_Label);
  33. }
  34. }
  35. [EditorToolbarElement("Tile Palette/Focus Dropdown")]
  36. sealed class TilePaletteFocusDropdown : EditorToolbarDropdown
  37. {
  38. const string k_DropdownIconClass = "unity-toolbar-dropdown-label-icon";
  39. const string k_ToolSettingsClass = "unity-tool-settings";
  40. readonly TextElement m_Label;
  41. readonly VisualElement m_Icon;
  42. readonly GUIContent m_None;
  43. readonly GUIContent m_Tilemap;
  44. readonly GUIContent m_Grid;
  45. public TilePaletteFocusDropdown()
  46. {
  47. name = "Focus Dropdown";
  48. AddToClassList(k_ToolSettingsClass);
  49. m_None = EditorGUIUtility.TrTextContentWithIcon("None",
  50. "Focus Mode is not active.",
  51. "ToolHandlePivot");
  52. m_Tilemap = EditorGUIUtility.TrTextContentWithIcon("Tilemap",
  53. "Focuses on the active Tilemap. Filters out all other Renderers.",
  54. "ToolHandlePivot");
  55. m_Grid = EditorGUIUtility.TrTextContentWithIcon("Grid",
  56. "Focuses on all Renderers with the active Grid. Filters out all other Renderers.",
  57. "ToolHandlePivot");
  58. clicked += OpenContextMenu;
  59. FocusModeChanged();
  60. }
  61. void OpenContextMenu()
  62. {
  63. var menu = new GenericMenu();
  64. var focusMode = GridPaintPaletteWindow.focusMode;
  65. menu.AddItem(m_None, focusMode == GridPaintPaletteWindow.TilemapFocusMode.None, () => SetFocusMode(GridPaintPaletteWindow.TilemapFocusMode.None));
  66. menu.AddItem(m_Tilemap, focusMode == GridPaintPaletteWindow.TilemapFocusMode.Tilemap, () => SetFocusMode(GridPaintPaletteWindow.TilemapFocusMode.Tilemap));
  67. menu.AddItem(m_Grid, focusMode == GridPaintPaletteWindow.TilemapFocusMode.Grid, () => SetFocusMode(GridPaintPaletteWindow.TilemapFocusMode.Grid));
  68. menu.DropDown(worldBound);
  69. }
  70. void SetFocusMode(GridPaintPaletteWindow.TilemapFocusMode mode)
  71. {
  72. GridPaintPaletteWindow.instances[0].SetFocusMode(mode);
  73. FocusModeChanged();
  74. }
  75. void FocusModeChanged()
  76. {
  77. var content = m_None;
  78. switch (GridPaintPaletteWindow.focusMode)
  79. {
  80. case GridPaintPaletteWindow.TilemapFocusMode.Tilemap:
  81. content = m_Tilemap;
  82. break;
  83. case GridPaintPaletteWindow.TilemapFocusMode.Grid:
  84. content = m_Grid;
  85. break;
  86. }
  87. text = content.text;
  88. tooltip = content.tooltip;
  89. icon = EditorGUIUtility.LoadIconRequired("TilemapRenderer Icon");
  90. }
  91. }
  92. }