public void PopulateModsPipelines() { Mods.Clear(); Pipelines.Clear(); // Populate mod and pipeline list automatically from namespace Assembly asm = assembly; string nameSpace = GetType().Namespace; foreach (Type type in asm.GetTypes()) { if (!string.IsNullOrEmpty(type.Namespace) && type.Namespace.Contains(nameSpace)) { if (type.IsAssignableFrom(typeof(Mod))) { Mod mod = (Mod)Activator.CreateInstance(type); if (!mod.Hidden) { Mods.Add(mod); } } else if (type.IsAssignableFrom(typeof(ModPipeline))) { ModPipeline pipeline = (ModPipeline)Activator.CreateInstance(type); Pipelines.Add(pipeline); } } } }
public void ResetGameSpecific(bool ClearGameText = false) { Modder = null; Pipeline = null; SupportedMods = new List <ModCrate>(); ResetGameEvent.Invoke(this, new EventValueArgs <bool>(ClearGameText)); }
/// <summary> /// Detects console and game from the given full path using cached ModPipeline and Game lists. /// </summary> public void DetectGame(string inputPath) { bool directoryMode = IO_Common.PathIsFolder(inputPath); Modder = null; Pipeline = null; GamePreloaded = false; SupportedMods = new List <ModCrate>(); bool ConsoleDetected = false; string regionID; uint regionNumber; DeleteTempFiles(TempPath); try { foreach (KeyValuePair <ModPipelineInfo, Type> pair in SupportedConsoles) { Pipeline = (ModPipeline)Activator.CreateInstance(pair.Value); bool DetectResult = Pipeline.Detect(directoryMode, inputPath, out regionID, out regionNumber); if (DetectResult) { ConsoleDetected = true; SetGameType(regionID, pair.Key.Console, regionNumber); break; } DeleteTempFiles(TempPath); } } catch (Exception ex) { Console.WriteLine("Detect Error: " + ex.Message); UpdateProcessMessage(ModLoaderText.Error_UnableToOpenGame); ResetGameSpecific(false); return; } DeleteTempFiles(TempPath); SetProcessStartAllow.Invoke(this, new EventValueArgs <bool>(ConsoleDetected)); if (!ConsoleDetected) { ResetGameSpecific(false); UpdateProcessMessage(ModLoaderText.Error_UnknownGameROM); } }
void CachePipelines(Assembly[] assemblies) { SupportedConsoles = new Dictionary <ModPipelineInfo, Type>(); foreach (Assembly assembly in assemblies) { foreach (Type type in assembly.GetTypes()) { if (type.IsAbstract || !typeof(ModPipeline).IsAssignableFrom(type)) // only get non-abstract modders { continue; } ModPipeline pipeline = (ModPipeline)Activator.CreateInstance(type); pipeline.Metadata.Assembly = assembly; SupportedConsoles.Add(pipeline.Metadata, type); } } }