SpriteData.cs 3.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using UnityEditor.U2D.Sprites;
  5. using UnityEngine;
  6. using UnityEngine.U2D;
  7. namespace UnityEditor.U2D.PSD
  8. {
  9. [Serializable]
  10. internal class SpriteMetaData : SpriteRect
  11. {
  12. public List<SpriteBone> spriteBone;
  13. public List<SpriteOutline> spriteOutline;
  14. public List<Vertex2DMetaData> vertices;
  15. public List<SpriteOutline> spritePhysicsOutline;
  16. public int[] indices;
  17. public Vector2Int[] edges;
  18. public float tessellationDetail;
  19. public int parentGroupIndex = -1;
  20. public Vector2Int uvTransform = Vector2Int.zero;
  21. public SpriteMetaData() {}
  22. public SpriteMetaData(SpriteRect sr)
  23. {
  24. alignment = sr.alignment;
  25. border = sr.border;
  26. name = sr.name;
  27. pivot = GetPivotValue(sr.alignment, sr.pivot);
  28. rect = sr.rect;
  29. spriteID = sr.spriteID;
  30. }
  31. public static GUID GetGUIDFromSerializedProperty(SerializedProperty sp)
  32. {
  33. return new GUID(sp.FindPropertyRelative("m_SpriteID").stringValue);
  34. }
  35. public static Vector2 GetPivotValue(SpriteAlignment alignment, Vector2 customOffset)
  36. {
  37. switch (alignment)
  38. {
  39. case SpriteAlignment.BottomLeft:
  40. return new Vector2(0f, 0f);
  41. case SpriteAlignment.BottomCenter:
  42. return new Vector2(0.5f, 0f);
  43. case SpriteAlignment.BottomRight:
  44. return new Vector2(1f, 0f);
  45. case SpriteAlignment.LeftCenter:
  46. return new Vector2(0f, 0.5f);
  47. case SpriteAlignment.Center:
  48. return new Vector2(0.5f, 0.5f);
  49. case SpriteAlignment.RightCenter:
  50. return new Vector2(1f, 0.5f);
  51. case SpriteAlignment.TopLeft:
  52. return new Vector2(0f, 1f);
  53. case SpriteAlignment.TopCenter:
  54. return new Vector2(0.5f, 1f);
  55. case SpriteAlignment.TopRight:
  56. return new Vector2(1f, 1f);
  57. case SpriteAlignment.Custom:
  58. return customOffset;
  59. }
  60. return Vector2.zero;
  61. }
  62. public static implicit operator UnityEditor.AssetImporters.SpriteImportData(SpriteMetaData value)
  63. {
  64. var output = new UnityEditor.AssetImporters.SpriteImportData();
  65. output.name = value.name;
  66. output.alignment = value.alignment;
  67. output.rect = value.rect;
  68. output.border = value.border;
  69. output.pivot = value.pivot;
  70. output.tessellationDetail = value.tessellationDetail;
  71. output.spriteID = value.spriteID.ToString();
  72. if (value.spriteOutline != null)
  73. output.outline = value.spriteOutline.Select(x => x.outline).ToList();
  74. return output;
  75. }
  76. }
  77. [Serializable]
  78. internal class SpriteOutline
  79. {
  80. [SerializeField]
  81. public Vector2[] outline;
  82. }
  83. }