public static PluginImporter[] GetImporters(string platformName) { // The final list of importers that will be returned List <PluginImporter> finalImporters = new List <PluginImporter>(); // Contains all unique finalPaths. Used to remove overridable plugins from the finalImporters list Dictionary <string, PluginImporter> uniqueFinalPathToImporterMap = new Dictionary <string, PluginImporter>(); PluginImporter[] allImporters = GetAllImporters().Where(imp => imp.GetCompatibleWithPlatformOrAnyPlatformBuildTarget(platformName)).ToArray(); IPluginImporterExtension pluginImporterExtension = ModuleManager.GetPluginImporterExtension(platformName); if (pluginImporterExtension == null) { pluginImporterExtension = ModuleManager.GetPluginImporterExtension(BuildPipeline.GetBuildTargetByName(platformName)); } if (pluginImporterExtension == null) { return(allImporters); } // Go through all of the Importers for the specified platform and determine if any of the natively included Unity Plugins should be removed. // Removal should only happen if the user has included a plugin of the same name and they are copying to the same finalPath for (int i = 0; i < allImporters.Length; ++i) { PluginImporter currentImporter = allImporters[i]; string finalPluginPath = pluginImporterExtension.CalculateFinalPluginPath(platformName, currentImporter); // Only compare overridables if the plugin has a calculated finalPluginPath if (!string.IsNullOrEmpty(finalPluginPath)) { PluginImporter tempImporter; if (!uniqueFinalPathToImporterMap.TryGetValue(finalPluginPath, out tempImporter)) { // Unique Plugin found, add it to the list for comparing overridable plugins // The first overridable plugin of it's kind should be added to the return list here. uniqueFinalPathToImporterMap.Add(finalPluginPath, currentImporter); } else if (tempImporter.GetIsOverridable() && !currentImporter.GetIsOverridable()) { // finalPluginPath isn't unique and the finalImporter already in the list is overriden by the new one, // remove the overridable one. uniqueFinalPathToImporterMap[finalPluginPath] = currentImporter; finalImporters.Remove(tempImporter); } else if (currentImporter.GetIsOverridable()) { // The current importer is going to the same final location as another, but // this plugin is overridable, so don't include it. continue; } } finalImporters.Add(currentImporter); } return(finalImporters.ToArray()); }
public static PluginImporter[] GetImporters(string platformName) { List <PluginImporter> list = new List <PluginImporter>(); Dictionary <string, PluginImporter> dictionary = new Dictionary <string, PluginImporter>(); PluginImporter[] array = (from imp in PluginImporter.GetAllImporters() where PluginImporter.IsCompatible(imp, platformName) select imp).ToArray <PluginImporter>(); IPluginImporterExtension pluginImporterExtension = ModuleManager.GetPluginImporterExtension(platformName); if (pluginImporterExtension == null) { pluginImporterExtension = ModuleManager.GetPluginImporterExtension(BuildPipeline.GetBuildTargetByName(platformName)); } PluginImporter[] result; if (pluginImporterExtension == null) { result = array; } else { int i = 0; while (i < array.Length) { PluginImporter pluginImporter = array[i]; string text = pluginImporterExtension.CalculateFinalPluginPath(platformName, pluginImporter); if (!string.IsNullOrEmpty(text)) { PluginImporter pluginImporter2; if (!dictionary.TryGetValue(text, out pluginImporter2)) { dictionary.Add(text, pluginImporter); } else if (pluginImporter2.GetIsOverridable() && !pluginImporter.GetIsOverridable()) { dictionary[text] = pluginImporter; list.Remove(pluginImporter2); } else if (pluginImporter.GetIsOverridable()) { goto IL_106; } goto IL_FD; } goto IL_FD; IL_106: i++; continue; IL_FD: list.Add(pluginImporter); goto IL_106; } result = list.ToArray(); } return(result); }