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

WeightToolbar.cs 4.5KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. using System;
  2. using UnityEngine;
  3. using UnityEngine.UIElements;
  4. namespace UnityEditor.U2D.Animation
  5. {
  6. internal class WeightToolbar : Toolbar
  7. {
  8. private const string k_UxmlPath = "SkinningModule/WeightToolbar.uxml";
  9. private const string k_ToolbarId = "WeightToolbar";
  10. private const string k_AutoGenerateWeightId = "AutoGenerateWeight";
  11. private const string k_WeightPainterSliderId = "WeightPainterSlider";
  12. private const string k_WeightPainterBrushId = "WeightPainterBrush";
  13. private const string k_BoneInfluenceWidgetId = "BoneInfluenceWidget";
  14. private const string k_SpriteInfluenceWidgetId = "SpriteInfluenceWidget";
  15. public class CustomUXMLFactor : UxmlFactory<WeightToolbar, UxmlTraits> {}
  16. public event Action<Tools> SetWeightTool = (mode) => {};
  17. public SkinningCache skinningCache { get; set; }
  18. public static WeightToolbar GenerateFromUXML()
  19. {
  20. var clone = GetClone(k_UxmlPath, k_ToolbarId) as WeightToolbar;
  21. clone.BindElements();
  22. clone.SetupShortcutUtility();
  23. clone.LocalizeTextInChildren();
  24. clone.AddShortcutsToToolTips();
  25. return clone;
  26. }
  27. public WeightToolbar()
  28. {
  29. styleSheets.Add(ResourceLoader.Load<StyleSheet>("SkinningModule/WeightToolbarStyle.uss"));
  30. }
  31. public void EnableBoneInfluenceWidget()
  32. {
  33. this.Q<Button>(k_BoneInfluenceWidgetId).SetEnabled(true);
  34. }
  35. public void DisableBoneInfluenceWidget()
  36. {
  37. this.Q<Button>(k_BoneInfluenceWidgetId).SetEnabled(false);
  38. }
  39. private void BindElements()
  40. {
  41. var button = this.Q<Button>(k_AutoGenerateWeightId);
  42. button.clickable.clicked += () => SetWeightTool(Tools.GenerateWeights);
  43. button = this.Q<Button>(k_WeightPainterSliderId);
  44. button.clickable.clicked += () => SetWeightTool(Tools.WeightSlider);
  45. button = this.Q<Button>(k_WeightPainterBrushId);
  46. button.clickable.clicked += () => SetWeightTool(Tools.WeightBrush);
  47. button = this.Q<Button>(k_BoneInfluenceWidgetId);
  48. button.clickable.clicked += () => SetWeightTool(Tools.BoneInfluence);
  49. button = this.Q<Button>(k_SpriteInfluenceWidgetId);
  50. button.clickable.clicked += () => SetWeightTool(Tools.SpriteInfluence);
  51. }
  52. private void SetupShortcutUtility()
  53. {
  54. m_ShortcutUtility = new ShortcutUtility(ShortcutIds.autoWeights,
  55. ShortcutIds.weightSlider,
  56. ShortcutIds.weightBrush,
  57. ShortcutIds.boneInfluence,
  58. ShortcutIds.spriteInfluence);
  59. m_ShortcutUtility.OnShortcutChanged = () =>
  60. {
  61. RestoreButtonTooltips(k_UxmlPath, k_ToolbarId);
  62. AddShortcutsToToolTips();
  63. };
  64. }
  65. public void UpdateToggleState()
  66. {
  67. //TODO: Make UI not be aware of BaseTool, Cache, etc. Use Tool enum
  68. var button = this.Q<Button>(k_AutoGenerateWeightId);
  69. SetButtonChecked(button, skinningCache.GetTool(Tools.GenerateWeights).isActive);
  70. button = this.Q<Button>(k_WeightPainterSliderId);
  71. SetButtonChecked(button, skinningCache.GetTool(Tools.WeightSlider).isActive);
  72. button = this.Q<Button>(k_WeightPainterBrushId);
  73. SetButtonChecked(button, skinningCache.GetTool(Tools.WeightBrush).isActive);
  74. button = this.Q<Button>(k_BoneInfluenceWidgetId);
  75. SetButtonChecked(button, skinningCache.GetTool(Tools.BoneInfluence).isActive);
  76. button = this.Q<Button>(k_SpriteInfluenceWidgetId);
  77. SetButtonChecked(button, skinningCache.GetTool(Tools.SpriteInfluence).isActive);
  78. }
  79. private void AddShortcutsToToolTips()
  80. {
  81. m_ShortcutUtility.AddShortcutToButtonTooltip(this, k_AutoGenerateWeightId, ShortcutIds.autoWeights);
  82. m_ShortcutUtility.AddShortcutToButtonTooltip(this, k_WeightPainterSliderId, ShortcutIds.weightSlider);
  83. m_ShortcutUtility.AddShortcutToButtonTooltip(this, k_WeightPainterBrushId, ShortcutIds.weightBrush);
  84. m_ShortcutUtility.AddShortcutToButtonTooltip(this, k_BoneInfluenceWidgetId, ShortcutIds.boneInfluence);
  85. m_ShortcutUtility.AddShortcutToButtonTooltip(this, k_SpriteInfluenceWidgetId, ShortcutIds.spriteInfluence);
  86. }
  87. }
  88. }