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

TilePaletteBrushesButton.cs 2.6KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. using UnityEditor.Toolbars;
  2. using UnityEngine;
  3. using UnityEngine.UIElements;
  4. namespace UnityEditor.Tilemaps
  5. {
  6. /// <summary>
  7. /// Dropdown Button for selecting the Active Brush for Grid Painting.
  8. /// </summary>
  9. [EditorToolbarElement(k_ToolbarId)]
  10. public sealed class TilePaletteBrushesButton : EditorToolbarDropdown
  11. {
  12. /// <summary>
  13. /// Factory for TilePaletteBrushesButton.
  14. /// </summary>
  15. public class TilePaletteBrushesButtonFactory : UxmlFactory<TilePaletteBrushesButton, TilePaletteBrushesButtonUxmlTraits> {}
  16. /// <summary>
  17. /// UxmlTraits for TilePaletteBrushesButton.
  18. /// </summary>
  19. public class TilePaletteBrushesButtonUxmlTraits : UxmlTraits {}
  20. private new static readonly string ussClassName = "unity-tilepalette-brushes-button";
  21. internal const string k_ToolbarId = "Tile Palette/Brushes Button";
  22. private const string k_IconPath = "Packages/com.unity.2d.tilemap/Editor/Icons/Tilemap.DefaultBrush.png";
  23. private Texture2D m_DefaultIcon;
  24. /// <summary>
  25. /// Initializes and returns an instance of TilePaletteBrushesButton.
  26. /// </summary>
  27. public TilePaletteBrushesButton()
  28. {
  29. AddToClassList(ussClassName);
  30. TilePaletteOverlayUtility.SetStyleSheet(this);
  31. m_DefaultIcon = EditorGUIUtility.LoadIcon(k_IconPath);
  32. icon = m_DefaultIcon;
  33. RegisterCallback<AttachToPanelEvent>(OnAttachedToPanel);
  34. RegisterCallback<DetachFromPanelEvent>(OnDetachFromPanel);
  35. clicked += OnClicked;
  36. }
  37. private void OnAttachedToPanel(AttachToPanelEvent evt)
  38. {
  39. GridPaintingState.brushChanged += OnBrushChanged;
  40. UpdateBrush();
  41. }
  42. private void OnBrushChanged(GridBrushBase obj)
  43. {
  44. UpdateBrush();
  45. }
  46. private void OnDetachFromPanel(DetachFromPanelEvent evt)
  47. {
  48. GridPaintingState.brushChanged -= OnBrushChanged;
  49. }
  50. private void UpdateBrush()
  51. {
  52. var defaultTooltip = TilePaletteBrushesLabel.kNullBrushName;
  53. var defaultIcon = m_DefaultIcon;
  54. tooltip = GridPaintingState.gridBrush != null ? GridPaintingState.gridBrush.name : defaultTooltip;
  55. icon = GridPaintingState.activeBrushEditor != null && GridPaintingState.activeBrushEditor.icon != null ? GridPaintingState.activeBrushEditor.icon : defaultIcon;
  56. }
  57. private void OnClicked()
  58. {
  59. IGenericMenu menu = new TilePaletteBrushesDropdownMenu();
  60. menu.DropDown(worldBound, this, true);
  61. }
  62. }
  63. }