暂无描述
您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

AsepriteSpriteEditorDataProvider.cs 7.0KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175
  1. using System.Linq;
  2. using UnityEditor.AssetImporters;
  3. using UnityEditor.U2D.Sprites;
  4. namespace UnityEditor.U2D.Aseprite
  5. {
  6. public partial class AsepriteImporter : ScriptedImporter, ISpriteEditorDataProvider
  7. {
  8. SpriteImportMode ISpriteEditorDataProvider.spriteImportMode => spriteImportModeToUse;
  9. UnityEngine.Object ISpriteEditorDataProvider.targetObject => targetObject;
  10. internal UnityEngine.Object targetObject => this;
  11. /// <summary>
  12. /// Implementation for ISpriteEditorDataProvider.pixelsPerUnit.
  13. /// </summary>
  14. float ISpriteEditorDataProvider.pixelsPerUnit => pixelsPerUnit;
  15. internal float pixelsPerUnit => m_TextureImporterSettings.spritePixelsPerUnit;
  16. /// <summary>
  17. /// Implementation for ISpriteEditorDataProvider.GetDataProvider.
  18. /// </summary>
  19. /// <typeparam name="T">Data provider type to retrieve.</typeparam>
  20. /// <returns></returns>
  21. T ISpriteEditorDataProvider.GetDataProvider<T>()
  22. {
  23. return GetDataProvider<T>();
  24. }
  25. internal T GetDataProvider<T>() where T : class
  26. {
  27. if (typeof(T) == typeof(ISpriteBoneDataProvider))
  28. {
  29. return new SpriteBoneDataProvider { dataProvider = this } as T;
  30. }
  31. if (typeof(T) == typeof(ISpriteMeshDataProvider))
  32. {
  33. return new SpriteMeshDataProvider { dataProvider = this } as T;
  34. }
  35. if (typeof(T) == typeof(ISpriteOutlineDataProvider))
  36. {
  37. return new SpriteOutlineDataProvider { dataProvider = this } as T;
  38. }
  39. if (typeof(T) == typeof(ISpritePhysicsOutlineDataProvider))
  40. {
  41. return new SpritePhysicsOutlineProvider { dataProvider = this } as T;
  42. }
  43. if (typeof(T) == typeof(ITextureDataProvider))
  44. {
  45. return new TextureDataProvider { dataProvider = this } as T;
  46. }
  47. if (typeof(T) == typeof(ISecondaryTextureDataProvider))
  48. {
  49. return new SecondaryTextureDataProvider() { dataProvider = this } as T;
  50. }
  51. else
  52. return this as T;
  53. }
  54. /// <summary>
  55. /// Implementation for ISpriteEditorDataProvider.HasDataProvider.
  56. /// </summary>
  57. /// <param name="type">Data provider type to query.</param>
  58. /// <returns>True if data provider is supported, false otherwise.</returns>
  59. bool ISpriteEditorDataProvider.HasDataProvider(System.Type type)
  60. {
  61. return HasDataProvider(type);
  62. }
  63. internal bool HasDataProvider(System.Type type)
  64. {
  65. if (type == typeof(ISpriteBoneDataProvider) ||
  66. type == typeof(ISpriteMeshDataProvider) ||
  67. type == typeof(ISpriteOutlineDataProvider) ||
  68. type == typeof(ISpritePhysicsOutlineDataProvider) ||
  69. type == typeof(ITextureDataProvider) ||
  70. type == typeof(ISecondaryTextureDataProvider))
  71. {
  72. return true;
  73. }
  74. else
  75. return type.IsAssignableFrom(GetType());
  76. }
  77. /// <summary>
  78. /// Implementation for ISpriteEditorDataProvider.Apply.
  79. /// </summary>
  80. void ISpriteEditorDataProvider.Apply()
  81. {
  82. Apply();
  83. }
  84. /// <summary>
  85. /// Implementation for ISpriteEditorDataProvider.InitSpriteEditorDataProvider.
  86. /// </summary>
  87. void ISpriteEditorDataProvider.InitSpriteEditorDataProvider()
  88. {
  89. InitSpriteEditorDataProvider();
  90. }
  91. void InitSpriteEditorDataProvider() { }
  92. /// <summary>
  93. /// Implementation for ISpriteEditorDataProvider.GetSpriteRects.
  94. /// </summary>
  95. /// <returns>An array of SpriteRect for the current import mode.</returns>
  96. SpriteRect[] ISpriteEditorDataProvider.GetSpriteRects()
  97. {
  98. return GetSpriteRects();
  99. }
  100. internal SpriteRect[] GetSpriteRects()
  101. {
  102. if (spriteImportModeToUse == SpriteImportMode.Multiple)
  103. {
  104. switch (m_AsepriteImporterSettings.fileImportMode)
  105. {
  106. case FileImportModes.SpriteSheet:
  107. return m_SpriteSheetImportData.Select(x => new SpriteMetaData(x) as SpriteRect).ToArray();
  108. case FileImportModes.AnimatedSprite:
  109. default:
  110. return m_AnimatedSpriteImportData.Select(x => new SpriteMetaData(x) as SpriteRect).ToArray();
  111. }
  112. }
  113. return new[] { new SpriteMetaData(m_SingleSpriteImportData[0]) };
  114. }
  115. /// <summary>
  116. /// Implementation for ISpriteEditorDataProvider.SetSpriteRects.
  117. /// </summary>
  118. /// <param name="spriteRects">Set the SpriteRect data for the current import mode.</param>
  119. void ISpriteEditorDataProvider.SetSpriteRects(SpriteRect[] spriteRects)
  120. {
  121. SetSpriteRects(spriteRects);
  122. }
  123. internal void SetSpriteRects(SpriteRect[] spriteRects)
  124. {
  125. var spriteImportData = GetSpriteImportData();
  126. if (spriteImportModeToUse == SpriteImportMode.Multiple)
  127. {
  128. spriteImportData.RemoveAll(data => spriteRects.FirstOrDefault(x => x.spriteID == data.spriteID) == null);
  129. foreach (var sr in spriteRects)
  130. {
  131. var importData = spriteImportData.FirstOrDefault(x => x.spriteID == sr.spriteID);
  132. if (importData == null)
  133. spriteImportData.Add(new SpriteMetaData(sr));
  134. else
  135. {
  136. importData.name = sr.name;
  137. importData.alignment = sr.alignment;
  138. importData.border = sr.border;
  139. importData.pivot = sr.pivot;
  140. importData.rect = sr.rect;
  141. }
  142. }
  143. }
  144. else if (spriteRects.Length == 1 && (spriteImportModeToUse == SpriteImportMode.Single || spriteImportModeToUse == SpriteImportMode.Polygon))
  145. {
  146. if (spriteImportData[0].spriteID == spriteRects[0].spriteID)
  147. {
  148. spriteImportData[0].name = spriteRects[0].name;
  149. spriteImportData[0].alignment = spriteRects[0].alignment;
  150. m_TextureImporterSettings.spriteAlignment = (int)spriteRects[0].alignment;
  151. m_TextureImporterSettings.spriteBorder = spriteImportData[0].border = spriteRects[0].border;
  152. m_TextureImporterSettings.spritePivot = spriteImportData[0].pivot = spriteRects[0].pivot;
  153. spriteImportData[0].rect = spriteRects[0].rect;
  154. }
  155. else
  156. {
  157. spriteImportData[0] = new SpriteMetaData(spriteRects[0]);
  158. }
  159. }
  160. }
  161. }
  162. }