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.

PSDSpriteEditorDataProvider.cs 7.6KB

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