A game about forced loneliness, made by TACStudios
at master 89 lines 3.7 kB view raw
1using System; 2using System.Collections.Generic; 3using UnityEngine; 4using Object = UnityEngine.Object; 5 6namespace UnityEditor.U2D.Sprites 7{ 8 [RequireSpriteDataProvider(typeof(ISpritePhysicsOutlineDataProvider), typeof(ITextureDataProvider))] 9 internal class SpritePhysicsShapeModule : SpriteOutlineModule 10 { 11 private const float kDefaultPhysicsTessellationDetail = 0.25f; 12 private const byte kDefaultPhysicsAlphaTolerance = 200; 13 14 public SpritePhysicsShapeModule(ISpriteEditor sem, IEventSystem ege, IUndoSystem us, IAssetDatabase ad, IGUIUtility gu, IShapeEditorFactory sef, ITexture2D outlineTexture) 15 : base(sem, ege, us, ad, gu, sef, outlineTexture) 16 { 17 spriteEditorWindow = sem; 18 } 19 20 public override string moduleName 21 { 22 get { return "Custom Physics Shape"; } 23 } 24 25 private ISpriteEditor spriteEditorWindow 26 { 27 get; set; 28 } 29 30 protected override string alterateLabelText => L10n.Tr("From Outline"); 31 32 protected override List<Vector2[]> GetAlternateOutlines(GUID spriteID) 33 { 34 var alternateOutlineProvider = spriteEditorWindow.GetDataProvider<ISpriteOutlineDataProvider>(); 35 return alternateOutlineProvider.GetOutlines(spriteID); 36 } 37 38 public override bool ApplyRevert(bool apply) 39 { 40 if (m_Outline != null) 41 { 42 if (apply) 43 { 44 var dp = spriteEditorWindow.GetDataProvider<ISpritePhysicsOutlineDataProvider>(); 45 for (int i = 0; i < m_Outline.Count; ++i) 46 { 47 dp.SetOutlines(m_Outline[i].spriteID, m_Outline[i].ToListVector()); 48 dp.SetTessellationDetail(m_Outline[i].spriteID, m_Outline[i].tessellationDetail); 49 } 50 } 51 52 Object.DestroyImmediate(m_Outline); 53 m_Outline = null; 54 } 55 56 return true; 57 } 58 59 protected override int alphaTolerance 60 { 61 get => SpriteOutlineModulePreference.physicsAlphaTolerance; 62 set => SpriteOutlineModulePreference.physicsAlphaTolerance = value; 63 } 64 65 protected override void LoadOutline() 66 { 67 m_Outline = ScriptableObject.CreateInstance<SpriteOutlineModel>(); 68 m_Outline.hideFlags = HideFlags.HideAndDontSave; 69 var spriteDataProvider = spriteEditorWindow.GetDataProvider<ISpriteEditorDataProvider>(); 70 var outlineDataProvider = spriteEditorWindow.GetDataProvider<ISpritePhysicsOutlineDataProvider>(); 71 foreach (var rect in spriteDataProvider.GetSpriteRects()) 72 { 73 var outlines = outlineDataProvider.GetOutlines(rect.spriteID); 74 m_Outline.AddListVector2(rect.spriteID, outlines); 75 m_Outline[m_Outline.Count - 1].tessellationDetail = outlineDataProvider.GetTessellationDetail(rect.spriteID); 76 } 77 } 78 79 protected override void SetupShapeEditorOutline(SpriteRect spriteRect) 80 { 81 var physicsShape = m_Outline[spriteRect.spriteID]; 82 var physicsShapes = GenerateSpriteRectOutline(spriteRect.rect, 83 Math.Abs(physicsShape.tessellationDetail - (-1f)) < Mathf.Epsilon ? kDefaultPhysicsTessellationDetail : physicsShape.tessellationDetail, 84 kDefaultPhysicsAlphaTolerance, m_TextureDataProvider, m_SpriteOutlineToolElement.optimizeOutline); 85 m_Outline[spriteRect.spriteID].spriteOutlines = physicsShapes; 86 spriteEditorWindow.SetDataModified(); 87 } 88 } 89}