private void AutoBuild(Action showProgress, Action <string> updateProgress) { showProgress(); Dictionary <string, SonicRetro.SAModel.SAEditorCommon.ManualBuildWindow.AssemblyType> assemblies = new Dictionary <string, SonicRetro.SAModel.SAEditorCommon.ManualBuildWindow.AssemblyType>(); string modFolder = Path.Combine(Program.Settings.GetModPathForGame(game), projectName); Directory.CreateDirectory(modFolder); updateProgress("Getting Assemblies"); switch (game) { case SA_Tools.Game.SADX: List <String> sadxAssemblyNames = GetSADXAssemblyNames(); // check for chrmodels or chrmodels_orig string chrmodels = "chrmodels"; string chrmodelsOrig = "chrmodels_orig"; string chrmodelsCompletePath = Path.Combine(projectFolder, chrmodels + "_data.ini"); string chrmodelsOrigCompletePath = Path.Combine(projectFolder, chrmodelsOrig + "_data.ini"); if (File.Exists(chrmodelsCompletePath)) { sadxAssemblyNames.Add(chrmodels); } else { sadxAssemblyNames.Add(chrmodelsOrig); } assemblies.Add("sonic", SonicRetro.SAModel.SAEditorCommon.ManualBuildWindow.AssemblyType.Exe); foreach (string assemblyName in sadxAssemblyNames) { assemblies.Add(assemblyName, SonicRetro.SAModel.SAEditorCommon.ManualBuildWindow.AssemblyType.DLL); } break; case SA_Tools.Game.SA2B: // dll assemblies.Add("Data_DLL_orig", SonicRetro.SAModel.SAEditorCommon.ManualBuildWindow.AssemblyType.DLL); // exe assemblies.Add("sonic2app", SonicRetro.SAModel.SAEditorCommon.ManualBuildWindow.AssemblyType.Exe); break; default: break; } // export only the modified items in each assembly updateProgress("Exporting Assembies"); foreach (KeyValuePair <string, SonicRetro.SAModel.SAEditorCommon.ManualBuildWindow.AssemblyType> assembly in assemblies) { string iniPath = Path.Combine(projectFolder, assembly.Key + "_data.ini"); Dictionary <string, bool> itemsToExport = new Dictionary <string, bool>(); switch (assembly.Value) { case SonicRetro.SAModel.SAEditorCommon.ManualBuildWindow.AssemblyType.Exe: SA_Tools.IniData iniData = SonicRetro.SAModel.SAEditorCommon.StructConverter.StructConverter.LoadINI(iniPath, ref itemsToExport); SonicRetro.SAModel.SAEditorCommon.StructConverter.StructConverter.ExportINI(iniData, itemsToExport, Path.Combine(modFolder, assembly.Key + "_data.ini")); break; case SonicRetro.SAModel.SAEditorCommon.ManualBuildWindow.AssemblyType.DLL: SA_Tools.SplitDLL.DllIniData dllIniData = SonicRetro.SAModel.SAEditorCommon.DLLModGenerator.DLLModGen.LoadINI(iniPath, ref itemsToExport); SonicRetro.SAModel.SAEditorCommon.DLLModGenerator.DLLModGen.ExportINI(dllIniData, itemsToExport, Path.Combine(modFolder, assembly.Key + "_data.ini")); break; default: break; } } // copy system folder updateProgress("Copying System Folder"); CopySystemFolder(modFolder); // generate final mod.ini based off of one in project folder updateProgress("Creating Mod.ini"); string baseModIniPath = Path.Combine(projectFolder, "mod.ini"); string outputModIniPath = Path.Combine(modFolder, "mod.ini"); const string dataSuffix = "_data.ini"; switch (game) { case SA_Tools.Game.SADX: SADXModInfo sadxModInfo = SA_Tools.IniSerializer.Deserialize <SADXModInfo>(baseModIniPath); // set all of our assemblies properly string ADV00MODELS = "ADV00MODELS"; string ADV01CMODELS = "ADV01CMODELS"; string ADV01MODELS = "ADV01MODELS"; string ADV02MODELS = "ADV02MODELS"; string ADV03MODELS = "ADV03MODELS"; string BOSSCHAOS0MODELS = "BOSSCHAOS0MODELS"; string CHAOSTGGARDEN02MR_DAYTIME = "CHAOSTGGARDEN02MR_DAYTIME"; string CHAOSTGGARDEN02MR_EVENING = "CHAOSTGGARDEN02MR_EVENING"; string CHAOSTGGARDEN02MR_NIGHT = "CHAOSTGGARDEN02MR_NIGHT"; if (assemblies.ContainsKey(ADV00MODELS)) { sadxModInfo.ADV00MODELSData = ADV00MODELS + dataSuffix; } if (assemblies.ContainsKey(ADV01CMODELS)) { sadxModInfo.ADV01CMODELSData = ADV01CMODELS + dataSuffix; } if (assemblies.ContainsKey(ADV01MODELS)) { sadxModInfo.ADV01MODELSData = ADV01MODELS + dataSuffix; } if (assemblies.ContainsKey(ADV02MODELS)) { sadxModInfo.ADV02MODELSData = ADV02MODELS + dataSuffix; } if (assemblies.ContainsKey(ADV03MODELS)) { sadxModInfo.ADV03MODELSData = ADV03MODELS + dataSuffix; } if (assemblies.ContainsKey(BOSSCHAOS0MODELS)) { sadxModInfo.BOSSCHAOS0MODELSData = BOSSCHAOS0MODELS + dataSuffix; } if (assemblies.ContainsKey(CHAOSTGGARDEN02MR_DAYTIME)) { sadxModInfo.CHAOSTGGARDEN02MR_DAYTIMEData = CHAOSTGGARDEN02MR_DAYTIME + dataSuffix; } if (assemblies.ContainsKey(CHAOSTGGARDEN02MR_EVENING)) { sadxModInfo.CHAOSTGGARDEN02MR_EVENINGData = CHAOSTGGARDEN02MR_EVENING + dataSuffix; } if (assemblies.ContainsKey(CHAOSTGGARDEN02MR_NIGHT)) { sadxModInfo.CHAOSTGGARDEN02MR_NIGHTData = CHAOSTGGARDEN02MR_NIGHT + dataSuffix; } if (assemblies.ContainsKey("sonic")) { sadxModInfo.EXEData = "sonic_data.ini"; } // save our output SA_Tools.IniSerializer.Serialize(sadxModInfo, outputModIniPath); break; case SA_Tools.Game.SA2B: SA2ModInfo sa2ModInfo = SA_Tools.IniSerializer.Deserialize <SA2ModInfo>(baseModIniPath); if (assemblies.ContainsKey("Data_DLL_orig")) { sa2ModInfo.DLLData = "Data_DLL_orig" + dataSuffix; } if (assemblies.ContainsKey("sonic2app")) { sa2ModInfo.EXEData = "sonic2app_data.ini"; } // save our output SA_Tools.IniSerializer.Serialize(sa2ModInfo, outputModIniPath); break; default: break; } // execute our post-build script string projectSettingsPath = Path.Combine(projectFolder, "ProjectSettings.ini"); if (File.Exists(projectSettingsPath)) { ProjectSettings projectSettings = SA_Tools.IniSerializer.Deserialize <ProjectSettings>(projectSettingsPath); string storedEnvironmentDirectory = Environment.CurrentDirectory; if (File.Exists(projectSettings.PostBuildScript)) { System.Diagnostics.ProcessStartInfo procStartInfo = new System.Diagnostics.ProcessStartInfo(projectSettings.PostBuildScript); System.Diagnostics.Process process = System.Diagnostics.Process.Start(procStartInfo); while (!process.HasExited) { System.Threading.Thread.Sleep(100); } Environment.CurrentDirectory = storedEnvironmentDirectory; } } }
void genAssemblies() { SA_Tools.IniData EXEiniData = new SA_Tools.IniData(); SA_Tools.SplitDLL.DllIniData DLLiniData = new SA_Tools.SplitDLL.DllIniData(); Dictionary <string, bool> itemsEXEToExport = new Dictionary <string, bool>(); Dictionary <string, bool> itemsDLLToExport = new Dictionary <string, bool>(); foreach (KeyValuePair <string, SonicRetro.SAModel.SAEditorCommon.ManualBuildWindow.AssemblyType> assembly in assemblies) { string iniPath = Path.Combine(SAToolsHub.projectDirectory.ToString(), assembly.Key + "_data.ini"); Dictionary <string, bool> itemsToExport = new Dictionary <string, bool>(); switch (assembly.Value) { case SonicRetro.SAModel.SAEditorCommon.ManualBuildWindow.AssemblyType.Exe: iniEXEFiles.Add(iniPath); break; case SonicRetro.SAModel.SAEditorCommon.ManualBuildWindow.AssemblyType.DLL: if (SAToolsHub.setGame == "SA2PC") { iniDLLFiles.Add(iniPath); } else { SA_Tools.SplitDLL.DllIniData dllIniData = SonicRetro.SAModel.SAEditorCommon.DLLModGenerator.DLLModGen.LoadINI(iniPath, ref itemsToExport); SonicRetro.SAModel.SAEditorCommon.DLLModGenerator.DLLModGen.ExportINI(dllIniData, itemsToExport, Path.Combine(modFolder, assembly.Key + "_data.ini")); } break; default: break; } } if (iniEXEFiles.Count > 0) { EXEiniData = SonicRetro.SAModel.SAEditorCommon.StructConverter.StructConverter.LoadMultiINI(iniEXEFiles, ref itemsEXEToExport); SonicRetro.SAModel.SAEditorCommon.StructConverter.StructConverter.ExportINI(EXEiniData, itemsEXEToExport, Path.Combine(modFolder, gameEXE + "_data.ini")); } if (iniDLLFiles.Count > 0) { DLLiniData = SonicRetro.SAModel.SAEditorCommon.DLLModGenerator.DLLModGen.LoadMultiINI(iniDLLFiles, ref itemsDLLToExport); SonicRetro.SAModel.SAEditorCommon.DLLModGenerator.DLLModGen.ExportINI(DLLiniData, itemsDLLToExport, Path.Combine(modFolder, "Data_DLL_orig_data.ini")); } if (sa2MdlMtnFiles.Count > 0) { string filePath; if (Directory.Exists(Path.Combine(SAToolsHub.projectDirectory, "figure\\bin"))) { filePath = Path.Combine(SAToolsHub.projectDirectory, "figure\\bin"); } else { filePath = Path.Combine(SAToolsHub.projectDirectory, "resource/gd_PC"); } foreach (string folder in sa2MdlMtnFiles) { string file = Path.Combine(filePath, folder); if (file.Contains("mdl")) { sa2MDL.Build(true, file); } if (file.Contains("mtn")) { sa2MTN.Build(true, file); } } } }