A game about forced loneliness, made by TACStudios
at master 141 lines 5.6 kB view raw
1using System.Collections.Generic; 2using UnityEngine; 3using UnityEditor.UIElements; 4using UnityEngine.UIElements; 5using UIElementButton = UnityEngine.UIElements.Button; 6 7namespace UnityEditor.U2D.Sprites 8{ 9 internal partial class SpritePolygonModeModule : SpriteFrameModuleBase 10 { 11 private static class SpritePolygonModeStyles 12 { 13 public static readonly GUIContent changeShapeLabel = EditorGUIUtility.TrTextContent("Change Shape"); 14 } 15 16 private VisualElement m_PolygonShapeView; 17 private UIElementButton m_ChangeButton; 18 private VisualElement m_WarningMessage; 19 20 // overrides for SpriteFrameModuleViewBase 21 private void AddMainUI(VisualElement element) 22 { 23 var visualTree = AssetDatabase.LoadAssetAtPath<VisualTreeAsset>("Packages/com.unity.2d.sprite/Editor/UI/SpriteEditor/PolygonChangeShapeWindow.uxml") as VisualTreeAsset; 24 m_PolygonShapeView = visualTree.CloneTree().Q<VisualElement>("polygonShapeWindow"); 25 m_PolygonShapeView.RegisterCallback<MouseDownEvent>((e) => { e.StopPropagation(); }); 26 m_PolygonShapeView.RegisterCallback<MouseUpEvent>((e) => { e.StopPropagation(); }); 27 SetupPolygonChangeShapeWindowElements(m_PolygonShapeView); 28 element.Add(m_PolygonShapeView); 29 } 30 31 public override void DoMainGUI() 32 { 33 base.DoMainGUI(); 34 DrawGizmos(); 35 36 HandleGizmoMode(); 37 38 HandleBorderCornerScalingHandles(); 39 HandleBorderSidePointScalingSliders(); 40 41 HandleBorderSideScalingHandles(); 42 HandlePivotHandle(); 43 44 if (!MouseOnTopOfInspector()) 45 spriteEditor.HandleSpriteSelection(); 46 } 47 48 public override void DoToolbarGUI(Rect toolbarRect) 49 { 50 using (new EditorGUI.DisabledScope(spriteEditor.editingDisabled)) 51 { 52 GUIStyle skin = EditorStyles.toolbarPopup; 53 Rect drawArea = toolbarRect; 54 drawArea.width = skin.CalcSize(SpritePolygonModeStyles.changeShapeLabel).x; 55 SpriteUtilityWindow.DrawToolBarWidget(ref drawArea, ref toolbarRect, (adjustedDrawArea) => 56 { 57 showChangeShapeWindow = GUI.Toggle(adjustedDrawArea, showChangeShapeWindow, SpritePolygonModeStyles.changeShapeLabel, EditorStyles.toolbarButton); 58 }); 59 } 60 } 61 62 private void DrawGizmos() 63 { 64 if (eventSystem.current.type != EventType.Repaint) 65 return; 66 for (int i = 0; i < spriteCount; i++) 67 { 68 List<Vector2[]> outline = GetSpriteOutlineAt(i); 69 Vector2 offset = GetSpriteRectAt(i).size * 0.5f; 70 if (outline.Count > 0) 71 { 72 SpriteEditorUtility.BeginLines(new Color(0.75f, 0.75f, 0.75f, 0.75f)); 73 for (int j = 0; j < outline.Count; ++j) 74 { 75 for (int k = 0, last = outline[j].Length - 1; k < outline[j].Length; last = k, ++k) 76 SpriteEditorUtility.DrawLine(outline[j][last] + offset, outline[j][k] + offset); 77 } 78 SpriteEditorUtility.EndLines(); 79 } 80 } 81 DrawSpriteRectGizmos(); 82 } 83 84 private void ViewUpdateSideCountField() 85 { 86 var sidesField = m_PolygonShapeView.Q<IntegerField>("labelIntegerField"); 87 sidesField.value = polygonSides; 88 } 89 90 private void SetupPolygonChangeShapeWindowElements(VisualElement moduleView) 91 { 92 var sidesField = moduleView.Q<IntegerField>("labelIntegerField"); 93 sidesField.SetValueWithoutNotify(polygonSides); 94 sidesField.RegisterValueChangedCallback((evt) => 95 { 96 polygonSides = (int)evt.newValue; 97 ShowHideWarningMessage(); 98 }); 99 m_ChangeButton = moduleView.Q<UIElementButton>("changeButton"); 100 m_ChangeButton.RegisterCallback<MouseUpEvent>((e) => 101 { 102 if (isSidesValid) 103 { 104 GeneratePolygonOutline(); 105 showChangeShapeWindow = false; 106 } 107 }); 108 m_WarningMessage = moduleView.Q("warning"); 109 ShowHideWarningMessage(); 110 } 111 112 void ShowHideWarningMessage() 113 { 114 m_WarningMessage.style.display = !isSidesValid ? DisplayStyle.Flex : DisplayStyle.None; 115 m_WarningMessage.style.position = m_WarningMessage.style.display == DisplayStyle.Flex ? Position.Relative : Position.Absolute; 116 117 m_ChangeButton.style.display = isSidesValid ? DisplayStyle.Flex : DisplayStyle.None;; 118 m_ChangeButton.style.position = m_ChangeButton.style.display == DisplayStyle.Flex ? Position.Relative : Position.Absolute; 119 } 120 121 private bool isSidesValid 122 { 123 get 124 { 125 return polygonSides == 0 || (polygonSides >= 3 && polygonSides <= 128); 126 } 127 } 128 129 public bool showChangeShapeWindow 130 { 131 get { return m_PolygonShapeView.style.display == DisplayStyle.Flex; } 132 set 133 { 134 var displayValue = value ? DisplayStyle.Flex : DisplayStyle.None; 135 if (m_PolygonShapeView.style.display == displayValue) 136 return; 137 m_PolygonShapeView.style.display = displayValue; 138 } 139 } 140 } 141}