public static async Task Structure(ToolkitBase tk, string filePath, Boolean isJMS) { /* Convert Structure */ string inPath = tk.GetDataDirectory() + "\\" + filePath.ToLower().Replace(isJMS ? ".jms" : ".ass", ".fbx"); // Jank code, should probably make this safer if (File.Exists(inPath)) { string outPath = tk.GetDataDirectory() + "\\" + filePath; await tk.RunTool(ToolType.Tool, new() { "fbx-to-ass", inPath, outPath }); } }
private async void CompileLevel(string level_path, ToolkitBase.LightmapArgs.Level_Quality Level_Quality, float level_slider, bool radiosity_quality_toggle, int instance_count, bool phantom_fix) { if (levelCompileType.HasFlag(level_compile_type.compile)) { await toolkit.ImportStructure(level_path, phantom_fix); } if (levelCompileType.HasFlag(level_compile_type.light)) { var lightmaps_args = new ToolkitBase.LightmapArgs(Level_Quality, level_slider, radiosity_quality_toggle, .999f); var info = ToolkitBase.SplitStructureFilename(level_path); var scen_path = Path.Combine(info.ScenarioPath, info.ScenarioName); H2Toolkit h2toolkit = toolkit as H2Toolkit; if (instance_count < 2) { await toolkit.BuildLightmap(scen_path, info.BspName, lightmaps_args); } else if (h2toolkit is not null) { await h2toolkit.BuildLightmapMultiInstance(scen_path, info.BspName, lightmaps_args, instance_count); } } }
public static async Task Model(ToolkitBase tk, string path, ModelCompile importType) { /* Check for x.all.fbx in root directory. */ List <FileInfo> alls = new List <FileInfo>(); string rootDir = tk.GetDataDirectory() + "\\" + path; if (!MainWindow.halo_ce_mcc) // Don't bother doing this for Halo 1 as the fbx-to-jms tool works differntly for that one { string[] rootFilePaths = Directory.GetFiles(rootDir, "*.all.fbx"); foreach (string f in rootFilePaths) { FileInfo fi = new FileInfo(f); alls.Add(fi); } /* Convert x.all.fbx */ foreach (FileInfo all in alls) { string outPath = rootDir + "\\" + (all.Name.ToLower().Replace(".all.fbx", ".jms")); await tk.RunTool(ToolType.Tool, new() { "fbx-to-jms", "all", all.FullName, outPath }); } } /* Convert render/collision/physics */ foreach (ImportTypeInfo importTypeInfo in GetImportTypeInfo()) { if (importType.HasFlag(importTypeInfo.importType)) { string typeDir = rootDir + "\\" + importTypeInfo.folderName; /* Copy x.all.fbx output if it exists */ if (alls.Count > 0) { if (!Directory.Exists(typeDir)) { Directory.CreateDirectory(typeDir); } foreach (FileInfo all in alls) { string inPath = rootDir + "\\" + (all.Name.ToLower().Replace(".all.fbx", "_" + importTypeInfo.folderName + ".jms")); // Lowercase enforce to avoid .FBX <-> .fbx mismatches string outPath = typeDir + "\\" + (all.Name.ToLower().Replace(".all.fbx", ".jms")); string checkPath = typeDir + "\\" + (all.Name.ToLower().Replace(".all.fbx", ".fbx")); if (File.Exists(checkPath)) { continue; } // Skip x.all.fbx if there is an x.fbx with same name in the relevant subfolder if (File.Exists(outPath)) { File.Delete(outPath); } // Delete file at outpath because overwrite throws an exception if (File.Exists(inPath)) { File.Move(inPath, outPath); } // Move file as long as it exists, a messed up fbx won't output a jms so we check before moving } } /* Convert fbx in relevant sub folders */ if (Directory.Exists(typeDir)) { List <FileInfo> fbxs = new List <FileInfo>(); string[] filePaths = Directory.GetFiles(typeDir, "*.fbx"); foreach (string f in filePaths) { FileInfo fi = new FileInfo(f); fbxs.Add(fi); } foreach (FileInfo fbx in fbxs) { string outPath = typeDir + "\\" + (fbx.Name.ToLower().Replace(".fbx", ".jms")); // Lowercase enforce to avoid .FBX <-> .fbx mismatches await tk.RunTool(ToolType.Tool, new() { "fbx-to-jms", importTypeInfo.commandOption, fbx.FullName, outPath }); } } } } /* Delete any unused .jms files in root directory converted by 'all' */ foreach (FileInfo all in alls) { foreach (ImportTypeInfo importTypeInfo in GetImportTypeInfo()) { string fp = rootDir + "\\" + all.Name.ToLower().Replace(".all.fbx", "_" + importTypeInfo.folderName + ".jms"); // Lowercase enforce to avoid .FBX <-> .fbx mismatches if (File.Exists(fp)) { File.Delete(fp); } } } /* Convert animations */ string animDir = rootDir + "\\animations"; if (Directory.Exists(animDir) && importType.HasFlag(ModelCompile.animations)) { List <FileInfo> fbxs = new List <FileInfo>(); string[] filePaths = Directory.GetFiles(animDir, "*.fbx"); foreach (string f in filePaths) { FileInfo fi = new FileInfo(f); fbxs.Add(fi); } foreach (FileInfo fbx in fbxs) { string outPath = animDir + "\\" + (fbx.Name.ToLower().Replace(".fbx", ".jma")); // Lowercase enforce to avoid .FBX <-> .fbx mismatches await tk.RunTool(ToolType.Tool, new() { "fbx-to-jma", fbx.FullName, outPath }); } } }