/// <summary> /// Builds game ROM or copies game files to output path. /// </summary> /// <param name="inputPath">Input path of the game files</param> /// <param name="outputPath">Output path to folder or file</param> void BuildGame(string inputPath, string outputPath) { if (Pipeline == null) { Console.WriteLine("Error: Pipeline not ready!"); return; } bool directoryMode = IO_Common.PathIsFolder(outputPath); if (directoryMode) { //Directory Mode - just copy files to output DirectoryInfo di = new DirectoryInfo(inputPath); if (Pipeline.Metadata.Console == ConsoleMode.PS2) { foreach (DirectoryInfo dir in di.EnumerateDirectories()) { foreach (FileInfo file in dir.EnumerateFiles()) { file.MoveTo(file.FullName); } IO_Common.Recursive_RenameFiles(dir); } foreach (FileInfo file in di.EnumerateFiles()) { file.MoveTo(file.FullName); } } if (!Directory.Exists(outputPath)) { Directory.CreateDirectory(outputPath); } string pathparent = outputPath + @"\"; foreach (DirectoryInfo dir in di.EnumerateDirectories()) { Directory.CreateDirectory(pathparent + dir.Name); foreach (FileInfo file in dir.EnumerateFiles()) { file.CopyTo(pathparent + dir.Name + @"\" + file.Name); } IO_Common.Recursive_CopyFiles(dir, pathparent + dir.Name + @"\"); } foreach (FileInfo file in di.EnumerateFiles()) { file.CopyTo(pathparent + file.Name); } } else { Pipeline.Build(inputPath, outputPath); } }
/// <summary> /// Extracts or copies game files using the set ModPipeline from given input path to given output path. /// </summary> /// <param name="inputPath">Input path to Game folder or file</param> /// <param name="outputPath">Output path of game files</param> void ExtractGame(string inputPath, string outputPath) { if (Pipeline == null) { Console.WriteLine("Error: Pipeline not ready!"); return; } bool directoryMode = IO_Common.PathIsFolder(inputPath); if (directoryMode) { DirectoryInfo di = new DirectoryInfo(inputPath); if (!di.Exists) { throw new IOException(ModLoaderText.Error_FolderNotAccessible); } Directory.CreateDirectory(outputPath); string pathparent = outputPath + @"\"; foreach (DirectoryInfo dir in di.EnumerateDirectories()) { Directory.CreateDirectory(pathparent + dir.Name); foreach (FileInfo file in dir.EnumerateFiles()) { file.CopyTo(pathparent + dir.Name + @"\" + file.Name); } IO_Common.Recursive_CopyFiles(dir, pathparent + dir.Name + @"\"); } foreach (FileInfo file in di.EnumerateFiles()) { file.CopyTo(pathparent + file.Name); } } else { Pipeline.Extract(inputPath, outputPath); } }