using System; using System.IO; using System.Linq; using System.Text; using UnityEditor; using UnityEngine; namespace UnityEngine.ProBuilder.AssetIdRemapUtility { static class PackageImporter { const string k_PackageManagerEditorCore = "e98d45d69e2c4936a7382af00fd45e58"; const string k_AssetStoreEditorCore = "4df21bd079886d84699ca7be1316c7a7"; const string k_ProBuilder2CoreGUID = "0472bdc8d6d15384d98f22ee34302f9c"; const string k_ProBuilder3CoreGUID = "4f0627da958b4bb78c260446066f065f"; static readonly string[] k_AssetStoreInstallGuids = new string[] { "0472bdc8d6d15384d98f22ee34302f9c", // ProBuilderCore "b617d7797480df7499f141d87e13ebc5", // ProBuilderMeshOps "4df21bd079886d84699ca7be1316c7a7" // ProBuilderEditor }; static readonly string[] k_PackageManagerInstallGuids = new string[] { "4f0627da958b4bb78c260446066f065f", // Core "9b27d8419276465b80eb88c8799432a1", // Mesh Ops "e98d45d69e2c4936a7382af00fd45e58", // Editor }; internal static string EditorCorePackageManager { get { return k_PackageManagerEditorCore; } } internal static string EditorCoreAssetStore { get { return k_AssetStoreEditorCore; } } internal static void SetEditorDllEnabled(string guid, bool isEnabled) { string dllPath = AssetDatabase.GUIDToAssetPath(guid); var importer = AssetImporter.GetAtPath(dllPath) as PluginImporter; if (importer != null) { importer.SetCompatibleWithAnyPlatform(false); importer.SetCompatibleWithEditor(isEnabled); } } internal static bool IsEditorPluginEnabled(string guid) { string path = AssetDatabase.GUIDToAssetPath(guid); var importer = AssetImporter.GetAtPath(path) as PluginImporter; if (!importer) return false; return importer.GetCompatibleWithEditor() && !importer.GetCompatibleWithAnyPlatform(); } internal static void Reimport(string guid) { string dllPath = AssetDatabase.GUIDToAssetPath(guid); if (!string.IsNullOrEmpty(dllPath)) AssetDatabase.ImportAsset(dllPath); } static bool AreAnyAssetsAreLoaded(string[] guids) { foreach (var id in guids) { if (AssetImporter.GetAtPath(AssetDatabase.GUIDToAssetPath(id)) != null) return true; } return false; } static bool FileContainsString(string path, string a, string b) { using (var sr = new StreamReader(path)) { while (sr.Peek() > -1) { var line = sr.ReadLine(); if (line.Contains(a) || line.Contains(b)) return true; } } return false; } internal static bool DoesProjectContainDeprecatedGUIDs() { var scenes = Directory.GetFiles("Assets", "*.unity", SearchOption.AllDirectories); var prefabs = Directory.GetFiles("Assets", "*.prefab", SearchOption.AllDirectories); var count = (scenes.Length + prefabs.Length) - 1f; var exit = count < 1f; try { for (int n = 0; !exit && n < 2; n++) { var arr = n < 1 ? scenes : prefabs; for (int i = 0, c = arr.Length; !exit && i < c; i++) { if (FileContainsString(arr[i], k_ProBuilder2CoreGUID, k_ProBuilder3CoreGUID)) return true; exit = EditorUtility.DisplayCancelableProgressBar( "Checking for Broken ProBuilder References", "Scanning scene " + arr[i], i / count); } } } finally { EditorUtility.ClearProgressBar(); } return false; } /// /// Check if any pre-4.0 ProBuilder package is present in the project /// /// internal static bool IsPreProBuilder4InProject() { return AreAnyAssetsAreLoaded(k_AssetStoreInstallGuids) || AreAnyAssetsAreLoaded(k_PackageManagerInstallGuids); } internal static bool IsProBuilder4OrGreaterLoaded() { return AppDomain.CurrentDomain.GetAssemblies().Any(x => x.ToString().Contains("Unity.ProBuilder")); } } }