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); }