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