예제 #1
0
        Exception LoadPlugins(bool initialLoad)
        {
            var pluginsDirectory = ProjectSettings.PluginsFolder;

            if (!Directory.Exists(pluginsDirectory))
            {
                return(null);
            }

            foreach (var directory in Directory.GetDirectories(pluginsDirectory))
            {
                var compilerDll = Path.Combine(directory, "Compiler.dll");
                if (File.Exists(compilerDll))
                {
                    var assembly = LoadAssembly(compilerDll);
                    if (assembly == null)
                    {
                        continue;
                    }

                    var compilerType = assembly.GetTypes().FirstOrDefault(x => x.Implements <ICryMonoPlugin>());
                    Debug.LogAlways("        Initializing CryMono plugin: {0}...", compilerType.Name);

                    var compiler = Activator.CreateInstance(compilerType) as ICryMonoPlugin;

                    PluginTypes.Add(compiler, null);

                    var assemblyPaths = Directory.GetFiles(directory, "*.dll", SearchOption.AllDirectories);
                    var assemblies    = new List <Assembly>();

                    foreach (var assemblyPath in assemblyPaths)
                    {
                        if (assemblyPath != compilerDll)
                        {
                            var foundAssembly = LoadAssembly(assemblyPath);
                            if (foundAssembly != null)
                            {
                                assemblies.Add(foundAssembly);
                            }
                        }
                    }

                    try
                    {
                        PluginTypes[compiler] = compiler.GetTypes(assemblies);
                    }
                    catch (Exception ex)
                    {
                        return(ex);
                    }
                }
            }

            return(null);
        }
 public BootstrapInCodeConfiguration AddPluginType <TPlugin>()
     where TPlugin : class
 {
     PluginTypes.Add(typeof(TPlugin));
     return(this);
 }