설명 없음
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.6KB

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