No Description
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

SpritePhysicsShapeModule.cs 2.9KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. using System;
  2. using UnityEngine;
  3. namespace UnityEditor.U2D.Sprites
  4. {
  5. [RequireSpriteDataProvider(typeof(ISpritePhysicsOutlineDataProvider), typeof(ITextureDataProvider))]
  6. internal class SpritePhysicsShapeModule : SpriteOutlineModule
  7. {
  8. private readonly float kDefaultPhysicsTessellationDetail = 0.25f;
  9. private readonly byte kDefaultPhysicsAlphaTolerance = 200;
  10. public SpritePhysicsShapeModule(ISpriteEditor sem, IEventSystem ege, IUndoSystem us, IAssetDatabase ad, IGUIUtility gu, IShapeEditorFactory sef, ITexture2D outlineTexture)
  11. : base(sem, ege, us, ad, gu, sef, outlineTexture)
  12. {
  13. spriteEditorWindow = sem;
  14. }
  15. public override string moduleName
  16. {
  17. get { return "Custom Physics Shape"; }
  18. }
  19. private ISpriteEditor spriteEditorWindow
  20. {
  21. get; set;
  22. }
  23. public override bool ApplyRevert(bool apply)
  24. {
  25. if (m_Outline != null)
  26. {
  27. if (apply)
  28. {
  29. var dp = spriteEditorWindow.GetDataProvider<ISpritePhysicsOutlineDataProvider>();
  30. for (int i = 0; i < m_Outline.Count; ++i)
  31. {
  32. dp.SetOutlines(m_Outline[i].spriteID, m_Outline[i].ToListVector());
  33. dp.SetTessellationDetail(m_Outline[i].spriteID, m_Outline[i].tessellationDetail);
  34. }
  35. }
  36. ScriptableObject.DestroyImmediate(m_Outline);
  37. m_Outline = null;
  38. }
  39. return true;
  40. }
  41. protected override void LoadOutline()
  42. {
  43. m_Outline = ScriptableObject.CreateInstance<SpriteOutlineModel>();
  44. m_Outline.hideFlags = HideFlags.HideAndDontSave;
  45. var spriteDataProvider = spriteEditorWindow.GetDataProvider<ISpriteEditorDataProvider>();
  46. var outlineDataProvider = spriteEditorWindow.GetDataProvider<ISpritePhysicsOutlineDataProvider>();
  47. foreach (var rect in spriteDataProvider.GetSpriteRects())
  48. {
  49. var outlines = outlineDataProvider.GetOutlines(rect.spriteID);
  50. m_Outline.AddListVector2(rect.spriteID, outlines);
  51. m_Outline[m_Outline.Count - 1].tessellationDetail = outlineDataProvider.GetTessellationDetail(rect.spriteID);
  52. }
  53. }
  54. protected override void SetupShapeEditorOutline(SpriteRect spriteRect)
  55. {
  56. var physicsShape = m_Outline[spriteRect.spriteID];
  57. var physicsShapes = GenerateSpriteRectOutline(spriteRect.rect,
  58. Math.Abs(physicsShape.tessellationDetail - (-1f)) < Mathf.Epsilon ? kDefaultPhysicsTessellationDetail : physicsShape.tessellationDetail,
  59. kDefaultPhysicsAlphaTolerance, m_TextureDataProvider);
  60. m_Outline[spriteRect.spriteID].spriteOutlines = physicsShapes;
  61. spriteEditorWindow.SetDataModified();
  62. }
  63. }
  64. }