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

TilemapEditorToolButton.cs 1.9KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. using System.Linq;
  2. using UnityEditor.EditorTools;
  3. using UnityEditor.Toolbars;
  4. using UnityEngine;
  5. using UnityEngine.UIElements;
  6. namespace UnityEditor.Tilemaps
  7. {
  8. internal class TilemapEditorToolButton : EditorToolbarToggle
  9. {
  10. private TilemapEditorTool m_TilemapEditorTool;
  11. public TilemapEditorToolButton(TilemapEditorTool tool)
  12. {
  13. focusable = false;
  14. if (tool != null)
  15. {
  16. name = tool.name;
  17. icon = tool.toolbarIcon?.image as Texture2D;
  18. tooltip = tool.toolbarIcon?.tooltip;
  19. m_TilemapEditorTool = tool;
  20. }
  21. this.RegisterValueChangedCallback((evt) =>
  22. {
  23. SetToolActive();
  24. });
  25. RegisterCallback<AttachToPanelEvent>(OnAttachedToPanel);
  26. RegisterCallback<DetachFromPanelEvent>(OnDetachFromPanel);
  27. UpdateState();
  28. }
  29. private void OnAttachedToPanel(AttachToPanelEvent evt)
  30. {
  31. ToolManager.activeToolChanged += UpdateState;
  32. ToolManager.activeContextChanged += UpdateState;
  33. UpdateState();
  34. }
  35. private void OnDetachFromPanel(DetachFromPanelEvent evt)
  36. {
  37. ToolManager.activeToolChanged -= UpdateState;
  38. ToolManager.activeContextChanged -= UpdateState;
  39. }
  40. protected void SetToolActive()
  41. {
  42. var active = EditorToolManager.activeTool;
  43. if (active == m_TilemapEditorTool)
  44. ToolManager.RestorePreviousPersistentTool();
  45. else
  46. ToolManager.SetActiveTool(m_TilemapEditorTool);
  47. UpdateState();
  48. }
  49. private void UpdateState()
  50. {
  51. bool activeTool = m_TilemapEditorTool == EditorToolManager.activeTool;
  52. SetValueWithoutNotify(activeTool);
  53. }
  54. }
  55. }