설명 없음
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.

PSDImportData.cs 5.3KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208
  1. using System;
  2. using System.Collections.Generic;
  3. using PDNWrapper;
  4. using UnityEngine;
  5. namespace UnityEditor.U2D.PSD
  6. {
  7. /// <summary>
  8. /// Custom hidden asset to store meta information of the last import state
  9. /// </summary>
  10. internal class PSDImportData : ScriptableObject
  11. {
  12. [SerializeField]
  13. int m_ImportedTextureWidth;
  14. public int importedTextureWidth
  15. {
  16. get => m_ImportedTextureWidth;
  17. set => m_ImportedTextureWidth = value;
  18. }
  19. [SerializeField]
  20. int m_ImportedTextureHeight;
  21. public int importedTextureHeight
  22. {
  23. get => m_ImportedTextureHeight;
  24. set => m_ImportedTextureHeight = value;
  25. }
  26. [SerializeField]
  27. Vector2Int m_DocumentSize;
  28. public Vector2Int documentSize
  29. {
  30. get => m_DocumentSize;
  31. set => m_DocumentSize = value;
  32. }
  33. [SerializeField]
  34. int m_TextureActualHeight;
  35. public int textureActualHeight
  36. {
  37. get => m_TextureActualHeight;
  38. set => m_TextureActualHeight = value;
  39. }
  40. [SerializeField]
  41. int m_TextureActualWidth;
  42. public int textureActualWidth
  43. {
  44. get => m_TextureActualWidth;
  45. set => m_TextureActualWidth = value;
  46. }
  47. [SerializeField]
  48. PSDLayerData[] m_PsdLayerData;
  49. public PSDLayerData[] psdLayerData => m_PsdLayerData;
  50. public void CreatePSDLayerData(List<BitmapLayer> bitmapLayer)
  51. {
  52. var layerData = new List<PSDLayerData>();
  53. foreach (var fileLayer in bitmapLayer)
  54. {
  55. CreatePSDLayerData(fileLayer, layerData);
  56. }
  57. m_PsdLayerData = layerData.ToArray();
  58. }
  59. void CreatePSDLayerData(BitmapLayer layer, List<PSDLayerData> layerData, int parentIndex = -1)
  60. {
  61. layerData.Add(new PSDLayerData()
  62. {
  63. isGroup = layer.IsGroup,
  64. isVisible = layer.Visible,
  65. layerID = layer.LayerID,
  66. name = layer.Name,
  67. parentIndex = parentIndex,
  68. layerSizeOnFile = new Vector2Int(layer.documentRect.Width, layer.documentRect.Height)
  69. });
  70. parentIndex = layerData.Count - 1;
  71. foreach (var fileLayer in layer.ChildLayer)
  72. {
  73. CreatePSDLayerData(fileLayer, layerData, parentIndex);
  74. }
  75. }
  76. }
  77. // Struct to keep track of GOs and bone
  78. internal struct BoneGO
  79. {
  80. public GameObject go;
  81. public int index;
  82. }
  83. /// <summary>
  84. /// Capture per layer import settings
  85. /// </summary>
  86. [Serializable]
  87. class PSDLayerImportSetting: IPSDLayerMappingStrategyComparable
  88. {
  89. [SerializeField]
  90. string m_SpriteId;
  91. GUID m_SpriteIDGUID;
  92. public string name;
  93. public int layerId;
  94. public bool flatten;
  95. public bool isGroup;
  96. public bool importLayer;
  97. public int layerID => layerId;
  98. string IPSDLayerMappingStrategyComparable.name => name;
  99. bool IPSDLayerMappingStrategyComparable.isGroup => isGroup;
  100. public GUID spriteId
  101. {
  102. get
  103. {
  104. if (string.IsNullOrEmpty(m_SpriteId))
  105. {
  106. m_SpriteIDGUID = GUID.Generate();
  107. m_SpriteId = m_SpriteIDGUID.ToString();
  108. }
  109. return m_SpriteIDGUID;
  110. }
  111. set
  112. {
  113. m_SpriteIDGUID = value;
  114. m_SpriteId = m_SpriteIDGUID.ToString();
  115. }
  116. }
  117. }
  118. /// <summary>
  119. /// PSDLayer data for PSDImportData for last import state
  120. /// </summary>
  121. [Serializable]
  122. class PSDLayerData : IPSDLayerMappingStrategyComparable
  123. {
  124. [SerializeField]
  125. string m_Name;
  126. public string name
  127. {
  128. get => m_Name;
  129. set => m_Name = value;
  130. }
  131. [SerializeField]
  132. int m_ParentIndex;
  133. public int parentIndex
  134. {
  135. get => m_ParentIndex;
  136. set => m_ParentIndex = value;
  137. }
  138. [SerializeField]
  139. int m_LayerID;
  140. public int layerID
  141. {
  142. get => m_LayerID;
  143. set => m_LayerID = value;
  144. }
  145. [SerializeField]
  146. bool m_IsVisible;
  147. public bool isVisible
  148. {
  149. get => m_IsVisible;
  150. set => m_IsVisible = value;
  151. }
  152. [SerializeField]
  153. bool m_IsGroup;
  154. public bool isGroup
  155. {
  156. get => m_IsGroup;
  157. set => m_IsGroup = value;
  158. }
  159. [SerializeField]
  160. bool m_IsImported;
  161. public bool isImported
  162. {
  163. get => m_IsImported;
  164. set => m_IsImported = value;
  165. }
  166. [SerializeField]
  167. Vector2Int m_LayerSizeOnFile;
  168. public Vector2Int layerSizeOnFile
  169. {
  170. get => m_LayerSizeOnFile;
  171. set => m_LayerSizeOnFile = value;
  172. }
  173. }
  174. /// <summary>
  175. /// Data for extracting layers and colors from PSD
  176. /// </summary>
  177. class PSDExtractLayerData
  178. {
  179. public BitmapLayer bitmapLayer;
  180. public PSDLayerImportSetting importSetting;
  181. public PSDExtractLayerData[] children;
  182. }
  183. }