MB3_MBVersionConcreteEditor.cs 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278
  1. /**
  2. * \brief Hax! DLLs cannot interpret preprocessor directives, so this class acts as a "bridge"
  3. */
  4. using System;
  5. using UnityEngine;
  6. using UnityEditor;
  7. using System.Collections;
  8. using DigitalOpus.MB.Core;
  9. namespace DigitalOpus.MB.Core
  10. {
  11. public class MBVersionEditorConcrete : MBVersionEditorInterface
  12. {
  13. /// <summary>
  14. /// Used to map the activeBuildTarget to a string argument needed by TextureImporter.GetPlatformTextureSettings
  15. /// The allowed values for GetPlatformTextureSettings are "Web", "Standalone", "iPhone", "Android" and "FlashPlayer".
  16. /// </summary>
  17. /// <returns></returns>
  18. public string GetPlatformString()
  19. {
  20. #if (UNITY_4_6 || UNITY_4_7 || UNITY_4_5 || UNITY_4_3 || UNITY_4_2 || UNITY_4_1 || UNITY_4_0_1 || UNITY_4_0 || UNITY_3_5)
  21. if (EditorUserBuildSettings.activeBuildTarget == BuildTarget.iPhone){
  22. return "iPhone";
  23. }
  24. #else
  25. if (EditorUserBuildSettings.activeBuildTarget == BuildTarget.iOS)
  26. {
  27. return "iPhone";
  28. }
  29. #endif
  30. if (EditorUserBuildSettings.activeBuildTarget == BuildTarget.WSAPlayer)
  31. {
  32. return "Windows Store Apps";
  33. }
  34. if (EditorUserBuildSettings.activeBuildTarget == BuildTarget.PSP2)
  35. {
  36. return "PSP2";
  37. }
  38. if (EditorUserBuildSettings.activeBuildTarget == BuildTarget.PS4)
  39. {
  40. return "PS4";
  41. }
  42. if (EditorUserBuildSettings.activeBuildTarget == BuildTarget.XboxOne)
  43. {
  44. return "XboxOne";
  45. }
  46. #if (UNITY_2017_3_OR_NEWER)
  47. #else
  48. if (EditorUserBuildSettings.activeBuildTarget == BuildTarget.SamsungTV)
  49. {
  50. return "Samsung TV";
  51. }
  52. #endif
  53. #if (UNITY_5_5_OR_NEWER)
  54. if (EditorUserBuildSettings.activeBuildTarget == BuildTarget.N3DS)
  55. {
  56. return "Nintendo 3DS";
  57. }
  58. #endif
  59. #if (UNITY_5_3 || UNITY_5_2 || UNITY_5_3_OR_NEWER)
  60. #if (UNITY_2018_1_OR_NEWER)
  61. // wiiu support was removed in 2018.1
  62. #else
  63. if (EditorUserBuildSettings.activeBuildTarget == BuildTarget.WiiU)
  64. {
  65. return "WiiU";
  66. }
  67. #endif
  68. #endif
  69. #if (UNITY_5_3 || UNITY_5_3_OR_NEWER)
  70. if (EditorUserBuildSettings.activeBuildTarget == BuildTarget.tvOS)
  71. {
  72. return "tvOS";
  73. }
  74. #endif
  75. #if (UNITY_2018_2_OR_NEWER)
  76. #else
  77. if (EditorUserBuildSettings.activeBuildTarget == BuildTarget.Tizen)
  78. {
  79. return "Tizen";
  80. }
  81. #endif
  82. if (EditorUserBuildSettings.activeBuildTarget == BuildTarget.Android)
  83. {
  84. return "Android";
  85. }
  86. if (EditorUserBuildSettings.activeBuildTarget == BuildTarget.StandaloneLinux ||
  87. EditorUserBuildSettings.activeBuildTarget == BuildTarget.StandaloneLinux64 ||
  88. EditorUserBuildSettings.activeBuildTarget == BuildTarget.StandaloneLinuxUniversal ||
  89. EditorUserBuildSettings.activeBuildTarget == BuildTarget.StandaloneWindows ||
  90. EditorUserBuildSettings.activeBuildTarget == BuildTarget.StandaloneWindows64 ||
  91. #if UNITY_2017_3_OR_NEWER
  92. EditorUserBuildSettings.activeBuildTarget == BuildTarget.StandaloneOSX
  93. #else
  94. EditorUserBuildSettings.activeBuildTarget == BuildTarget.StandaloneOSXIntel ||
  95. EditorUserBuildSettings.activeBuildTarget == BuildTarget.StandaloneOSXIntel64 ||
  96. EditorUserBuildSettings.activeBuildTarget == BuildTarget.StandaloneOSXUniversal
  97. #endif
  98. )
  99. {
  100. return "Standalone";
  101. }
  102. #if !UNITY_5_4_OR_NEWER
  103. if (EditorUserBuildSettings.activeBuildTarget == BuildTarget.WebPlayer ||
  104. EditorUserBuildSettings.activeBuildTarget == BuildTarget.WebPlayerStreamed
  105. )
  106. {
  107. return "Web";
  108. }
  109. #endif
  110. if (EditorUserBuildSettings.activeBuildTarget == BuildTarget.WebGL)
  111. {
  112. return "WebGL";
  113. }
  114. return null;
  115. }
  116. public void RegisterUndo(UnityEngine.Object o, string s)
  117. {
  118. #if (UNITY_4_2 || UNITY_4_1 || UNITY_4_0_1 || UNITY_4_0 || UNITY_3_5)
  119. Undo.RegisterUndo(o, s);
  120. #else
  121. Undo.RecordObject(o, s);
  122. #endif
  123. }
  124. public void SetInspectorLabelWidth(float width)
  125. {
  126. #if (UNITY_4_2 || UNITY_4_1 || UNITY_4_0_1 || UNITY_4_0 || UNITY_3_5)
  127. EditorGUIUtility.LookLikeControls(width);
  128. #else
  129. EditorGUIUtility.labelWidth = width;
  130. #endif
  131. }
  132. public void UpdateIfDirtyOrScript(SerializedObject so)
  133. {
  134. #if UNITY_5_6_OR_NEWER
  135. so.UpdateIfRequiredOrScript();
  136. #else
  137. so.UpdateIfDirtyOrScript();
  138. #endif
  139. }
  140. public UnityEngine.Object PrefabUtility_GetCorrespondingObjectFromSource(GameObject go)
  141. {
  142. #if UNITY_2018_2_OR_NEWER
  143. return PrefabUtility.GetCorrespondingObjectFromSource(go);
  144. #else
  145. return PrefabUtility.GetPrefabParent(go);
  146. #endif
  147. }
  148. public bool IsAutoPVRTC(TextureImporterFormat platformFormat, TextureImporterFormat platformDefaultFormat)
  149. {
  150. if ((
  151. #if UNITY_2017_1_OR_NEWER
  152. platformFormat == TextureImporterFormat.Automatic
  153. #elif UNITY_5_5_OR_NEWER
  154. platformFormat == TextureImporterFormat.Automatic ||
  155. platformFormat == TextureImporterFormat.Automatic16bit ||
  156. platformFormat == TextureImporterFormat.AutomaticCompressed ||
  157. platformFormat == TextureImporterFormat.AutomaticCompressedHDR ||
  158. platformFormat == TextureImporterFormat.AutomaticCrunched ||
  159. platformFormat == TextureImporterFormat.AutomaticHDR
  160. #else
  161. platformFormat == TextureImporterFormat.Automatic16bit ||
  162. platformFormat == TextureImporterFormat.AutomaticCompressed ||
  163. platformFormat == TextureImporterFormat.AutomaticCrunched
  164. #endif
  165. ) && (
  166. platformDefaultFormat == TextureImporterFormat.PVRTC_RGB2 ||
  167. platformDefaultFormat == TextureImporterFormat.PVRTC_RGB4 ||
  168. platformDefaultFormat == TextureImporterFormat.PVRTC_RGBA2 ||
  169. platformDefaultFormat == TextureImporterFormat.PVRTC_RGBA4
  170. ))
  171. {
  172. return true;
  173. }
  174. return false;
  175. }
  176. public MB_PrefabType GetPrefabType(UnityEngine.Object obj)
  177. {
  178. #if UNITY_2018_3_OR_NEWER
  179. if (PrefabUtility.IsPartOfNonAssetPrefabInstance(obj))
  180. {
  181. return MB_PrefabType.scenePefabInstance;
  182. }
  183. if (!PrefabUtility.IsPartOfAnyPrefab(obj))
  184. {
  185. return MB_PrefabType.isInstanceAndNotAPartOfAnyPrefab;
  186. }
  187. PrefabAssetType assetType = PrefabUtility.GetPrefabAssetType(obj);
  188. if (assetType == PrefabAssetType.NotAPrefab)
  189. {
  190. if (PrefabUtility.GetPrefabInstanceStatus(obj) != PrefabInstanceStatus.NotAPrefab)
  191. {
  192. return MB_PrefabType.isInstanceAndNotAPartOfAnyPrefab;
  193. }
  194. else
  195. {
  196. return MB_PrefabType.scenePefabInstance;
  197. }
  198. }
  199. else if (assetType == PrefabAssetType.Model)
  200. {
  201. return MB_PrefabType.modelPrefabAsset;
  202. }
  203. else if (assetType == PrefabAssetType.Regular ||
  204. assetType == PrefabAssetType.Variant ||
  205. assetType == PrefabAssetType.MissingAsset)
  206. {
  207. return MB_PrefabType.prefabAsset;
  208. }
  209. else
  210. {
  211. Debug.Assert(false, "Should never get here. Unknown prefab asset type.");
  212. return MB_PrefabType.isInstanceAndNotAPartOfAnyPrefab;
  213. }
  214. #else
  215. PrefabType prefabType = PrefabUtility.GetPrefabType(obj);
  216. if (prefabType == PrefabType.ModelPrefab)
  217. {
  218. return MB_PrefabType.modelPrefabAsset;
  219. } else if (prefabType == PrefabType.Prefab)
  220. {
  221. return MB_PrefabType.prefabAsset;
  222. } else if (prefabType == PrefabType.PrefabInstance || prefabType == PrefabType.ModelPrefabInstance)
  223. {
  224. return MB_PrefabType.scenePefabInstance;
  225. } else
  226. {
  227. return MB_PrefabType.isInstanceAndNotAPartOfAnyPrefab;
  228. }
  229. #endif
  230. }
  231. public void UnpackPrefabInstance(UnityEngine.GameObject go, ref SerializedObject so)
  232. {
  233. #if UNITY_2018_3_OR_NEWER
  234. UnityEngine.Object targetObj = null;
  235. if (so != null) targetObj = so.targetObject;
  236. PrefabUtility.UnpackPrefabInstance(go, PrefabUnpackMode.OutermostRoot, InteractionMode.AutomatedAction);
  237. // This is a workaround for a nasty Unity bug. The call to UnpackPrefabInstance
  238. // corrupts the serialized object, Recreate a clean reference here.
  239. if (so != null) so = new SerializedObject(targetObj);
  240. #else
  241. // Do nothing.
  242. #endif
  243. }
  244. public void ReplacePrefab(GameObject gameObject, string assetPath, MB_ReplacePrefabOption replacePrefabOptions)
  245. {
  246. #if UNITY_2018_3_OR_NEWER
  247. PrefabUtility.SaveAsPrefabAssetAndConnect(gameObject, assetPath, InteractionMode.AutomatedAction);
  248. #else
  249. GameObject obj = (GameObject) AssetDatabase.LoadAssetAtPath(assetPath, typeof(GameObject));
  250. PrefabUtility.ReplacePrefab(gameObject, obj, (ReplacePrefabOptions) replacePrefabOptions);
  251. #endif
  252. }
  253. public GameObject GetPrefabInstanceRoot(GameObject sceneInstance)
  254. {
  255. #if UNITY_2018_3_OR_NEWER
  256. return PrefabUtility.GetOutermostPrefabInstanceRoot(sceneInstance);
  257. #else
  258. return PrefabUtility.FindRootGameObjectWithSameParentPrefab(sceneInstance);
  259. #endif
  260. }
  261. }
  262. }