No Description
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.

BoneToolbar.cs 4.5KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. using System;
  2. using UnityEngine;
  3. using UnityEngine.UIElements;
  4. namespace UnityEditor.U2D.Animation
  5. {
  6. internal class BoneToolbar : Toolbar
  7. {
  8. private const string k_UxmlPath = "SkinningModule/BoneToolbar.uxml";
  9. private const string k_ToolbarId = "BoneToolbar";
  10. private const string k_EditJointsId = "EditJoints";
  11. private const string k_CreateBoneId = "CreateBone";
  12. private const string k_SplitBoneId = "SplitBone";
  13. public class BoneToolbarFactory : UxmlFactory<BoneToolbar, BoneToolbarUxmlTraits> {}
  14. public class BoneToolbarUxmlTraits : UxmlTraits {}
  15. public event Action<Tools> SetSkeletonTool = (mode) => {};
  16. public SkinningCache skinningCache { get; private set; }
  17. public static BoneToolbar GenerateFromUXML()
  18. {
  19. var clone = GetClone(k_UxmlPath, k_ToolbarId) as BoneToolbar;
  20. clone.BindElements();
  21. clone.SetupShortcutUtility();
  22. clone.LocalizeTextInChildren();
  23. clone.AddShortcutsToToolTips();
  24. return clone;
  25. }
  26. public BoneToolbar()
  27. {
  28. styleSheets.Add(ResourceLoader.Load<StyleSheet>("SkinningModule/BoneToolbarStyle.uss"));
  29. }
  30. private void BindElements()
  31. {
  32. var editJoints = this.Q<Button>(k_EditJointsId);
  33. editJoints.clickable.clicked += () => { SetSkeletonTool(Tools.EditJoints); };
  34. var createBone = this.Q<Button>(k_CreateBoneId);
  35. createBone.clickable.clicked += () => { SetSkeletonTool(Tools.CreateBone); };
  36. var splitBone = this.Q<Button>(k_SplitBoneId);
  37. splitBone.clickable.clicked += () => { SetSkeletonTool(Tools.SplitBone); };
  38. }
  39. private void SetupShortcutUtility()
  40. {
  41. m_ShortcutUtility = new ShortcutUtility(ShortcutIds.editBone,
  42. ShortcutIds.createBone,
  43. ShortcutIds.splitBone);
  44. m_ShortcutUtility.OnShortcutChanged = () =>
  45. {
  46. RestoreButtonTooltips(k_UxmlPath, k_ToolbarId);
  47. AddShortcutsToToolTips();
  48. };
  49. }
  50. public void Setup(SkinningCache s)
  51. {
  52. skinningCache = s;
  53. skinningCache.events.skinningModeChanged.AddListener(OnSkinningModeChange);
  54. }
  55. private void OnSkinningModeChange(SkinningMode mode)
  56. {
  57. if (skinningCache.hasCharacter)
  58. {
  59. if (mode == SkinningMode.SpriteSheet || skinningCache.bonesReadOnly)
  60. {
  61. this.Q<Button>(k_EditJointsId).SetEnabled(false);
  62. this.Q<Button>(k_CreateBoneId).SetEnabled(false);
  63. this.Q<Button>(k_SplitBoneId).SetEnabled(false);
  64. if (skinningCache.GetTool(Tools.EditJoints).isActive
  65. || skinningCache.GetTool(Tools.CreateBone).isActive
  66. || skinningCache.GetTool(Tools.SplitBone).isActive)
  67. SetSkeletonTool(Tools.EditPose);
  68. }
  69. else if (mode == SkinningMode.Character)
  70. {
  71. this.Q<Button>(k_EditJointsId).SetEnabled(true);
  72. this.Q<Button>(k_CreateBoneId).SetEnabled(true);
  73. this.Q<Button>(k_SplitBoneId).SetEnabled(true);
  74. }
  75. }
  76. }
  77. public void UpdateToggleState()
  78. {
  79. //TODO: Make UI not be aware of BaseTool, Cache, etc. Use Tool enum
  80. var toolButton = this.Q<Button>(k_EditJointsId);
  81. SetButtonChecked(toolButton, skinningCache.GetTool(Tools.EditJoints).isActive);
  82. toolButton = this.Q<Button>(k_CreateBoneId);
  83. SetButtonChecked(toolButton, skinningCache.GetTool(Tools.CreateBone).isActive);
  84. toolButton = this.Q<Button>(k_SplitBoneId);
  85. SetButtonChecked(toolButton, skinningCache.GetTool(Tools.SplitBone).isActive);
  86. OnSkinningModeChange(skinningCache.mode);
  87. }
  88. private void AddShortcutsToToolTips()
  89. {
  90. m_ShortcutUtility.AddShortcutToButtonTooltip(this, k_EditJointsId, ShortcutIds.editBone);
  91. m_ShortcutUtility.AddShortcutToButtonTooltip(this, k_CreateBoneId, ShortcutIds.createBone);
  92. m_ShortcutUtility.AddShortcutToButtonTooltip(this, k_SplitBoneId, ShortcutIds.splitBone);
  93. }
  94. }
  95. }