Example #1
0
        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());
        }
Example #2
0
        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);
        }
Example #3
0
    private void CopyNativePlugins()
    {
        string buildTargetName = BuildPipeline.GetBuildTargetName(this.m_PostProcessArgs.target);
        IPluginImporterExtension importerExtension = (IPluginImporterExtension) new DesktopPluginImporterExtension();
        string areaPluginsFolder = this.StagingAreaPluginsFolder;
        string path1             = Path.Combine(areaPluginsFolder, "x86");
        string path2             = Path.Combine(areaPluginsFolder, "x86_64");
        bool   flag1             = false;
        bool   flag2             = false;
        bool   flag3             = false;

        foreach (PluginImporter importer in PluginImporter.GetImporters(this.m_PostProcessArgs.target))
        {
            BuildTarget target = this.m_PostProcessArgs.target;
            if (importer.isNativePlugin)
            {
                if (string.IsNullOrEmpty(importer.assetPath))
                {
                    Debug.LogWarning((object)("Got empty plugin importer path for " + this.m_PostProcessArgs.target.ToString()));
                }
                else
                {
                    if (!flag1)
                    {
                        Directory.CreateDirectory(areaPluginsFolder);
                        flag1 = true;
                    }
                    bool   flag4        = Directory.Exists(importer.assetPath);
                    string platformData = importer.GetPlatformData(target, "CPU");
                    if (platformData != null)
                    {
                        // ISSUE: reference to a compiler-generated field
                        if (DesktopStandalonePostProcessor.\u003C\u003Ef__switch\u0024map16 == null)
                        {
                            // ISSUE: reference to a compiler-generated field
                            DesktopStandalonePostProcessor.\u003C\u003Ef__switch\u0024map16 = new Dictionary <string, int>(3)
                            {
                                {
                                    "x86",
                                    0
                                },
                                {
                                    "x86_64",
                                    1
                                },
                                {
                                    "None",
                                    2
                                }
                            };
                        }
                        int num;
                        // ISSUE: reference to a compiler-generated field
                        if (DesktopStandalonePostProcessor.\u003C\u003Ef__switch\u0024map16.TryGetValue(platformData, out num))
                        {
                            switch (num)
                            {
                            case 0:
                                if (target != BuildTarget.StandaloneOSXIntel64 && target != BuildTarget.StandaloneWindows64 && target != BuildTarget.StandaloneLinux64)
                                {
                                    if (!flag2)
                                    {
                                        Directory.CreateDirectory(path1);
                                        flag2 = true;
                                        break;
                                    }
                                    break;
                                }
                                continue;

                            case 1:
                                if (target == BuildTarget.StandaloneOSXIntel64 || target == BuildTarget.StandaloneOSXUniversal || (target == BuildTarget.StandaloneWindows64 || target == BuildTarget.StandaloneLinux64) || target == BuildTarget.StandaloneLinuxUniversal)
                                {
                                    if (!flag3)
                                    {
                                        Directory.CreateDirectory(path2);
                                        flag3 = true;
                                        break;
                                    }
                                    break;
                                }
                                continue;

                            case 2:
                                continue;
                            }
                        }
                    }
                    string finalPluginPath = importerExtension.CalculateFinalPluginPath(buildTargetName, importer);
                    if (!string.IsNullOrEmpty(finalPluginPath))
                    {
                        string str = Path.Combine(areaPluginsFolder, finalPluginPath);
                        if (flag4)
                        {
                            FileUtil.CopyDirectoryRecursive(importer.assetPath, str);
                        }
                        else
                        {
                            FileUtil.UnityFileCopy(importer.assetPath, str);
                        }
                    }
                }
            }
        }
    }