A game about forced loneliness, made by TACStudios
at master 146 lines 5.9 kB view raw
1using System; 2using UnityEditor.U2D.Common; 3using UnityEngine; 4using UnityEngine.UIElements; 5 6namespace UnityEditor.U2D.Animation 7{ 8#if ENABLE_UXML_SERIALIZED_DATA 9 [UxmlElement] 10#endif 11 internal partial class GenerateGeometryPanel : VisualElement 12 { 13#if ENABLE_UXML_TRAITS 14 public class GenerateGeometryPanelFactory : UxmlFactory<GenerateGeometryPanel, GenerateGeometryPanelUxmlTraits> {} 15 public class GenerateGeometryPanelUxmlTraits : UxmlTraits {} 16#endif 17 18 public enum GenerateMode 19 { 20 Single, 21 Multiple 22 } 23 24 private IntegerField m_OutlineDetailField; 25 private IntegerField m_AlphaToleranceField; 26 private IntegerField m_SubdivideField; 27 private Toggle m_Toggle; 28 29 public event Action<float, byte, float> onAutoGenerateGeometry; 30 public event Action<float, byte, float> onAutoGenerateGeometryAll; 31 public bool generateWeights 32 { 33 get { return m_Toggle.value; } 34 set { m_Toggle.value = value; } 35 } 36 37 public SkinningCache skinningCache { get; set; } 38 39 public GenerateGeometryPanel() 40 { 41 styleSheets.Add(ResourceLoader.Load<StyleSheet>("SkinningModule/GenerateGeometryPanelStyle.uss")); 42 RegisterCallback<MouseDownEvent>((e) => { e.StopPropagation(); }); 43 RegisterCallback<MouseUpEvent>((e) => { e.StopPropagation(); }); 44 } 45 46 private void BindElements() 47 { 48 var generateButton = this.Q<Button>("GenerateGeometryButton"); 49 generateButton.clickable.clicked += GenerateGeometry; 50 generateButton.AddManipulator(generateButton.clickable); 51 52 var generateAllButton = this.Q<Button>("GenerateGeometryAllButton"); 53 generateAllButton.clickable.clicked += GenerateGeometryAll; 54 generateAllButton.AddManipulator(generateAllButton.clickable); 55 56 m_OutlineDetailField = this.Q<IntegerField>("OutlineDetailField"); 57 m_AlphaToleranceField = this.Q<IntegerField>("AlphaToleranceField"); 58 m_SubdivideField = this.Q<IntegerField>("SubdivideField"); 59 m_Toggle = this.Q<Toggle>("GenerateWeightsField"); 60 61 var slider = this.Q<Slider>("OutlineDetailSlider"); 62 LinkSliderToFloatField(slider, m_OutlineDetailField, (x) => 63 { 64 GenerateGeomertySettings.outlineDetail = x; 65 }); 66 m_OutlineDetailField.SetValueWithoutNotify(GenerateGeomertySettings.outlineDetail); 67 slider.SetValueWithoutNotify(GenerateGeomertySettings.outlineDetail); 68 69 slider = this.Q<Slider>("AlphaToleranceSlider"); 70 LinkSliderToFloatField(slider, m_AlphaToleranceField,(x) => 71 { 72 GenerateGeomertySettings.alphaTolerance = x; 73 }); 74 m_AlphaToleranceField.SetValueWithoutNotify(GenerateGeomertySettings.alphaTolerance); 75 slider.SetValueWithoutNotify(GenerateGeomertySettings.alphaTolerance); 76 77 slider = this.Q<Slider>("SubdivideSlider"); 78 LinkSliderToFloatField(slider, m_SubdivideField,(x) => 79 { 80 GenerateGeomertySettings.subdivide = x; 81 }); 82 m_SubdivideField.SetValueWithoutNotify(GenerateGeomertySettings.subdivide); 83 slider.SetValueWithoutNotify(GenerateGeomertySettings.subdivide); 84 85 m_Toggle.value = GenerateGeomertySettings.generateWeights; 86 m_Toggle.RegisterValueChangedCallback((evt) => 87 { 88 GenerateGeomertySettings.generateWeights = evt.newValue; 89 }); 90 } 91 92 private void LinkSliderToFloatField(Slider slider, IntegerField field, Action<int> updatePreferenceAction) 93 { 94 slider.RegisterValueChangedCallback((evt) => 95 { 96 if (!evt.newValue.Equals(field.value)) 97 { 98 var intValue = Mathf.RoundToInt(evt.newValue); 99 field.SetValueWithoutNotify(intValue); 100 updatePreferenceAction(intValue); 101 } 102 103 }); 104 field.RegisterValueChangedCallback((evt) => 105 { 106 var newValue = evt.newValue; 107 if (!newValue.Equals(slider.value)) 108 { 109 newValue = Math.Min(newValue, (int)slider.highValue); 110 newValue = Math.Max(newValue, (int)slider.lowValue); 111 slider.value = newValue; 112 field.SetValueWithoutNotify(newValue); 113 updatePreferenceAction(newValue); 114 } 115 }); 116 } 117 118 public void SetMode(GenerateMode mode) 119 { 120 RemoveFromClassList("Multiple"); 121 RemoveFromClassList("Single"); 122 AddToClassList(mode.ToString()); 123 } 124 125 public void GenerateGeometry() 126 { 127 if (onAutoGenerateGeometry != null) 128 onAutoGenerateGeometry(m_OutlineDetailField.value, Convert.ToByte(m_AlphaToleranceField.value), m_SubdivideField.value); 129 } 130 131 public void GenerateGeometryAll() 132 { 133 if (onAutoGenerateGeometryAll != null) 134 onAutoGenerateGeometryAll(m_OutlineDetailField.value, Convert.ToByte(m_AlphaToleranceField.value), m_SubdivideField.value); 135 } 136 137 public static GenerateGeometryPanel GenerateFromUXML() 138 { 139 var visualTree = ResourceLoader.Load<VisualTreeAsset>("SkinningModule/GenerateGeometryPanel.uxml"); 140 var clone = visualTree.CloneTree().Q<GenerateGeometryPanel>("GenerateGeometryPanel"); 141 clone.LocalizeTextInChildren(); 142 clone.BindElements(); 143 return clone; 144 } 145 } 146}