private static void NewGuid(List <string> args, XCom2Edition edition) { if (!LocateMod(args, out ModInfo modInfo) || args.Count > 0) { HelpNewGuid(); return; } var project = ModProject.Load(modInfo, edition); project.Id = Guid.NewGuid(); project.Save(modInfo.ProjectPath); }
public void Build(ModBuildType buildType) { Report.Verbose($"{buildType} build of {modInfo.ModName}"); // Load project first, to check folder structure is as we expect before we start moving files. Report.Verbose("Loading project"); modProject = ModProject.Load(modInfo, edition); if (!string.Equals(modProject.Title, modInfo.ModName, StringComparison.Ordinal)) { Report.Warning($"Mod name {modInfo.ModName} does not match title '{modProject.Title}' in project {modInfo.ProjectName}"); } // Switching between building with/without the highlander requires a full build. if (IsSdkBuiltWithHighlander() != Settings.Default.Highlander) { var highlander = Settings.Default.Highlander; Report.Warning($"This is a {(highlander ? "" : "non-")}highlander build, but {KeyStandardPackageCompiledScriptFileName} was {(highlander ? "not " : "")}built with the highlander; switching to full build"); buildType = ModBuildType.Full; } else { var highlander = Settings.Default.Highlander; Report.Verbose($"This is a {(highlander ? "" : "non-")}highlander build, as is {KeyStandardPackageCompiledScriptFileName}"); } CleanModStaging(); ThrowIfCancelled(); CleanSdkMods(); Directory.CreateDirectory(modStagingPath); StageModFolder(ModInfo.SourceCodeFolder); StageModFolder(ModInfo.ConfigFolder); StageModFolder(ModInfo.LocalizationFolder); StageModFolder(ModInfo.ContentFolder); StageModMetadata(); ThrowIfCancelled(); if (modHasSourceCode) { switch (buildType) { case ModBuildType.Full: CleanSdkSourceCode(); RestoreSdkSourceCode(); CopyModSourceCodeToSdk(); CleanSdkCompiledScripts(); CompileGame(); break; case ModBuildType.Fast: CleanSdkSourceCode(); RestoreSdkSourceCode(); CopyModSourceCodeToSdk(); CleanModSdkCompiledScripts(); CompileGame(); break; case ModBuildType.Smart: var flags = GetBuiltStandardPackageFlags(); if (!flags.HasValue) { Report.Verbose($"{KeyStandardPackageCompiledScriptFileName} invalid or not found, switching to full build"); goto case ModBuildType.Full; } if (Settings.Default.Debug != flags.Value.HasFlag(PackageFlags.Debug)) { Settings.Default.Debug = !Settings.Default.Debug; Report.Verbose($"Detected {(Settings.Default.Debug ? "debug" : "release")} build of {KeyStandardPackageCompiledScriptFileName}"); } SmartCleanSdkSourceCode(); CopyModSourceCodeToSdk(); SmartCleanSdkCompiledScripts(); break; default: throw new ArgumentOutOfRangeException(nameof(buildType)); } CompileMod(); if (modHasShaderContent) { switch (buildType) { case ModBuildType.Full: case ModBuildType.Fast: CompileShaders(); break; case ModBuildType.Smart: if (IsDeployedShaderCacheUpToDate()) { CopyDeployedShaderCacheToStaging(); } else { CompileShaders(); } break; default: throw new ArgumentOutOfRangeException(nameof(buildType)); } } StageModCompiledScripts(); SmartCleanSdkSourceCode(); } DeployMod(); }