A game about forced loneliness, made by TACStudios
at master 109 lines 3.8 kB view raw
1using UnityEngine; 2using System.Collections.Generic; 3 4namespace UnityEditor.U2D.Sprites 5{ 6 [RequireSpriteDataProvider(typeof(ISpriteOutlineDataProvider), typeof(ITextureDataProvider))] 7 internal partial class SpritePolygonModeModule : SpriteFrameModuleBase 8 { 9 List<List<Vector2[]>> m_Outline; 10 11 public SpritePolygonModeModule(ISpriteEditor sw, IEventSystem es, IUndoSystem us, IAssetDatabase ad) : 12 base("Sprite Polygon Mode Editor", sw, es, us, ad) 13 {} 14 15 // ISpriteEditorModule implemenation 16 public override void OnModuleActivate() 17 { 18 base.OnModuleActivate(); 19 AddMainUI(spriteEditor.GetMainVisualContainer()); 20 m_Outline = new List<List<Vector2[]>>(); 21 22 for (int i = 0; i < m_RectsCache.spriteRects.Count; ++i) 23 { 24 var rect = m_RectsCache.spriteRects[i]; 25 m_Outline.Add(spriteEditor.GetDataProvider<ISpriteOutlineDataProvider>().GetOutlines(rect.spriteID)); 26 } 27 28 showChangeShapeWindow = polygonSprite; 29 if (polygonSprite) 30 DeterminePolygonSides(); 31 } 32 33 public override bool CanBeActivated() 34 { 35 return SpriteFrameModule.GetSpriteImportMode(spriteEditor.GetDataProvider<ISpriteEditorDataProvider>()) == SpriteImportMode.Polygon; 36 } 37 38 private bool polygonSprite 39 { 40 get { return spriteImportMode == SpriteImportMode.Polygon; } 41 } 42 43 private void DeterminePolygonSides() 44 { 45 if (polygonSprite && m_RectsCache.spriteRects.Count == 1 && m_Outline.Count == 1 && m_Outline[0].Count == 1) 46 { 47 polygonSides = m_Outline[0][0].Length; 48 } 49 else 50 // If for reasons we cannot determine the sides of the polygon, fall back to 0 (Square) 51 polygonSides = 0; 52 ViewUpdateSideCountField(); 53 } 54 55 public int GetPolygonSideCount() 56 { 57 DeterminePolygonSides(); 58 return polygonSides; 59 } 60 61 public int polygonSides 62 { 63 get; 64 set; 65 } 66 67 public List<Vector2[]> GetSpriteOutlineAt(int i) 68 { 69 return m_Outline[i]; 70 } 71 72 public void GeneratePolygonOutline() 73 { 74 for (int i = 0; i < m_RectsCache.spriteRects.Count; i++) 75 { 76 SpriteRect currentRect = m_RectsCache.spriteRects[i]; 77 78 var result = UnityEditor.Sprites.SpriteUtility.GeneratePolygonOutlineVerticesOfSize(polygonSides, (int)currentRect.rect.width, (int)currentRect.rect.height); 79 80 m_Outline.Clear(); 81 var newOutlineList = new List<Vector2[]>(); 82 newOutlineList.Add(result); 83 m_Outline.Add(newOutlineList); 84 85 spriteEditor.SetDataModified(); 86 } 87 Repaint(); 88 } 89 90 public override bool ApplyRevert(bool apply) 91 { 92 var outlineProvider = spriteEditor.GetDataProvider<ISpriteOutlineDataProvider>(); 93 if (apply) 94 { 95 for (int i = 0; i < m_RectsCache.spriteRects.Count && i < m_Outline.Count; ++i) 96 outlineProvider.SetOutlines(m_RectsCache.spriteRects[i].spriteID, m_Outline[i]); 97 } 98 else 99 { 100 m_Outline.Clear(); 101 for (int i = 0; i < m_RectsCache.spriteRects.Count; ++i) 102 m_Outline.Add(outlineProvider.GetOutlines(m_RectsCache.spriteRects[i].spriteID)); 103 DeterminePolygonSides(); 104 ViewUpdateSideCountField(); 105 } 106 return base.ApplyRevert(apply); 107 } 108 } 109}