123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118 |
- using System;
- using UnityEditor.U2D.Common;
- using UnityEngine.UIElements;
-
- namespace UnityEditor.U2D.Animation
- {
- #if ENABLE_UXML_SERIALIZED_DATA
- [UxmlElement]
- #endif
- internal partial class BoneToolbar : Toolbar
- {
- private const string k_UxmlPath = "SkinningModule/BoneToolbar.uxml";
- private const string k_ToolbarId = "BoneToolbar";
-
- private const string k_EditJointsId = "EditJoints";
- private const string k_CreateBoneId = "CreateBone";
- private const string k_SplitBoneId = "SplitBone";
-
- #if ENABLE_UXML_TRAITS
- public class BoneToolbarFactory : UxmlFactory<BoneToolbar, BoneToolbarUxmlTraits> {}
- public class BoneToolbarUxmlTraits : UxmlTraits {}
- #endif
-
- public event Action<Tools> SetSkeletonTool = (mode) => {};
- public SkinningCache skinningCache { get; private set; }
-
- public static BoneToolbar GenerateFromUXML()
- {
- var clone = GetClone(k_UxmlPath, k_ToolbarId) as BoneToolbar;
- clone.BindElements();
- clone.SetupShortcutUtility();
- clone.LocalizeTextInChildren();
- clone.AddShortcutsToToolTips();
- return clone;
- }
-
- public BoneToolbar()
- {
- styleSheets.Add(ResourceLoader.Load<StyleSheet>("SkinningModule/BoneToolbarStyle.uss"));
- }
-
- private void BindElements()
- {
- var editJoints = this.Q<Button>(k_EditJointsId);
- editJoints.clickable.clicked += () => { SetSkeletonTool(Tools.EditJoints); };
-
- var createBone = this.Q<Button>(k_CreateBoneId);
- createBone.clickable.clicked += () => { SetSkeletonTool(Tools.CreateBone); };
-
- var splitBone = this.Q<Button>(k_SplitBoneId);
- splitBone.clickable.clicked += () => { SetSkeletonTool(Tools.SplitBone); };
- }
-
- private void SetupShortcutUtility()
- {
- m_ShortcutUtility = new ShortcutUtility(ShortcutIds.editBone,
- ShortcutIds.createBone,
- ShortcutIds.splitBone);
- m_ShortcutUtility.OnShortcutChanged = () =>
- {
- RestoreButtonTooltips(k_UxmlPath, k_ToolbarId);
- AddShortcutsToToolTips();
- };
- }
-
- public void Setup(SkinningCache s)
- {
- skinningCache = s;
- skinningCache.events.skinningModeChanged.AddListener(OnSkinningModeChange);
- }
-
- private void OnSkinningModeChange(SkinningMode mode)
- {
- if (skinningCache.hasCharacter)
- {
- if (mode == SkinningMode.SpriteSheet || skinningCache.bonesReadOnly)
- {
- this.Q<Button>(k_EditJointsId).SetEnabled(false);
- this.Q<Button>(k_CreateBoneId).SetEnabled(false);
- this.Q<Button>(k_SplitBoneId).SetEnabled(false);
-
- if (skinningCache.GetTool(Tools.EditJoints).isActive
- || skinningCache.GetTool(Tools.CreateBone).isActive
- || skinningCache.GetTool(Tools.SplitBone).isActive)
- SetSkeletonTool(Tools.EditPose);
- }
- else if (mode == SkinningMode.Character)
- {
- this.Q<Button>(k_EditJointsId).SetEnabled(true);
- this.Q<Button>(k_CreateBoneId).SetEnabled(true);
- this.Q<Button>(k_SplitBoneId).SetEnabled(true);
- }
- }
- }
-
- public void UpdateToggleState()
- {
- //TODO: Make UI not be aware of BaseTool, Cache, etc. Use Tool enum
- var toolButton = this.Q<Button>(k_EditJointsId);
- SetButtonChecked(toolButton, skinningCache.GetTool(Tools.EditJoints).isActive);
-
- toolButton = this.Q<Button>(k_CreateBoneId);
- SetButtonChecked(toolButton, skinningCache.GetTool(Tools.CreateBone).isActive);
-
- toolButton = this.Q<Button>(k_SplitBoneId);
- SetButtonChecked(toolButton, skinningCache.GetTool(Tools.SplitBone).isActive);
-
- OnSkinningModeChange(skinningCache.mode);
- }
-
- private void AddShortcutsToToolTips()
- {
- m_ShortcutUtility.AddShortcutToButtonTooltip(this, k_EditJointsId, ShortcutIds.editBone);
- m_ShortcutUtility.AddShortcutToButtonTooltip(this, k_CreateBoneId, ShortcutIds.createBone);
- m_ShortcutUtility.AddShortcutToButtonTooltip(this, k_SplitBoneId, ShortcutIds.splitBone);
- }
- }
- }
|