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