diff --git a/KeepersCompound.Lightmapper/KeepersCompound.Lightmapper.csproj b/KeepersCompound.Lightmapper/KeepersCompound.Lightmapper.csproj index 83a40e2..bd3937a 100644 --- a/KeepersCompound.Lightmapper/KeepersCompound.Lightmapper.csproj +++ b/KeepersCompound.Lightmapper/KeepersCompound.Lightmapper.csproj @@ -8,7 +8,7 @@ - + diff --git a/KeepersCompound.Lightmapper/Program.cs b/KeepersCompound.Lightmapper/Program.cs index 29bbf3c..5cfc502 100644 --- a/KeepersCompound.Lightmapper/Program.cs +++ b/KeepersCompound.Lightmapper/Program.cs @@ -1,46 +1,38 @@ -using System.CommandLine; +using CliFx; +using CliFx.Attributes; +using IConsole = CliFx.Infrastructure.IConsole; namespace KeepersCompound.Lightmapper; -class Program +internal static class Program { - private static void Main(string[] args) + public static async Task Main() => + await new CliApplicationBuilder().AddCommandsFromThisAssembly().Build().RunAsync(); +} + +[Command(Description = "Compute lightmaps for a NewDark .MIS/.COW")] +public class LightCommand : ICommand +{ + [CommandParameter(0, Description = "The path to the root Thief installation.")] + public required string InstallPath { get; init; } + [CommandParameter(1, Description = "The folder name of the fan mission. For OMs this is blank.")] + public required string CampaignName { get; init; } + [CommandParameter(2, Description = "The name of the mission file including extension.")] + public required string MissionName { get; init; } + [CommandOption("output", 'o', Description = "Name of output file excluding extension.")] + public string OutputName { get; init; } = "kc_lit"; + [CommandOption("multiSampling", 'm', Description = "Enables multi-sampled shadows. Higher quality but slower.")] + public bool MultiSampling { get; init; } = false; + + public ValueTask ExecuteAsync(IConsole console) { - var installPathArg = new Argument( - "installPath", - "The path to the root Thief installation."); - var campaignNameArg = new Argument( - "campaignName", - "The folder name of the fan mission. For OMs this is blank."); - var missionNameArg = new Argument( - "missionName", - "The name of the mission file including extension."); - var outputFileOption = new Option( - ["-o", "--output"], - () => "kc_lit", - "Name of output file excluding extension."); - var multiSamplingOption = new Option( - "--multiSampling", - () => false, - "Enables multi-sampled shadows. Higher quality but slower."); - - var rootCommand = new RootCommand("Compute lightmaps for a NewDark .MIS/.COW"); - rootCommand.AddArgument(installPathArg); - rootCommand.AddArgument(campaignNameArg); - rootCommand.AddArgument(missionNameArg); - rootCommand.AddOption(outputFileOption); - rootCommand.AddOption(multiSamplingOption); - rootCommand.SetHandler((installPath, campaignName, missionName, outputFile, multiSampling) => - { - Timing.Reset(); - - var lightMapper = new LightMapper(installPath, campaignName, missionName); - lightMapper.Light(multiSampling); - lightMapper.Save(outputFile); - - Timing.LogAll(); - }, installPathArg, campaignNameArg, missionNameArg, outputFileOption, multiSamplingOption); - - rootCommand.Invoke(args); + Timing.Reset(); + + var lightMapper = new LightMapper(InstallPath, CampaignName, MissionName); + lightMapper.Light(MultiSampling); + lightMapper.Save(OutputName); + + Timing.LogAll(); + return default; } } \ No newline at end of file