From ac99f4dd5ebcb18415c22dff8a5deb3ca11e0954 Mon Sep 17 00:00:00 2001 From: Julian Giebel Date: Tue, 8 Nov 2022 15:03:34 +0100 Subject: [PATCH] Map renderer file name option (#12463) * Add option for supplying map names instead of ids as argument * Allow options to be used with the map selector --- Content.MapRenderer/CommandLineArguments.cs | 20 ++++++++- Content.MapRenderer/Program.cs | 47 +++++++++++++++++---- 2 files changed, 57 insertions(+), 10 deletions(-) diff --git a/Content.MapRenderer/CommandLineArguments.cs b/Content.MapRenderer/CommandLineArguments.cs index 6cfa3c71ad..2812cc5f9f 100644 --- a/Content.MapRenderer/CommandLineArguments.cs +++ b/Content.MapRenderer/CommandLineArguments.cs @@ -10,8 +10,8 @@ public sealed class CommandLineArguments public List Maps { get; set; } = new(); public OutputFormat Format { get; set; } = OutputFormat.png; public bool ExportViewerJson { get; set; } = false; - public string OutputPath { get; set; } = DirectoryExtensions.MapImages().FullName; + public bool ArgumentsAreFileNames { get; set; } = false; public static bool TryParse(IReadOnlyList args, [NotNullWhen(true)] out CommandLineArguments? parsed) { @@ -20,7 +20,8 @@ public sealed class CommandLineArguments if (args.Count == 0) { PrintHelp(); - return false; + //Returns true here so the user can select what maps they want to render + return true; } using var enumerator = args.GetEnumerator(); @@ -53,6 +54,11 @@ public sealed class CommandLineArguments parsed.OutputPath = enumerator.Current; break; + case "-f": + case "--files": + parsed.ArgumentsAreFileNames = true; + break; + case "-h": case "--help": PrintHelp(); @@ -64,6 +70,13 @@ public sealed class CommandLineArguments } } + if (parsed.ArgumentsAreFileNames && parsed.Maps.Count == 0) + { + Console.WriteLine("No file names specified!"); + PrintHelp(); + return false; + } + return true; } @@ -80,6 +93,9 @@ Options: -o / --output Changes the path the rendered maps will get saved to. Defaults to Resources/MapImages + -f / --files + This option tells the map renderer that you supplied a list of map file names instead of their ids. + Example: Content.MapRenderer -f box.yml bagel.yml -h / --help Displays this help text"); } diff --git a/Content.MapRenderer/Program.cs b/Content.MapRenderer/Program.cs index 0708ea8255..ccd8f04757 100644 --- a/Content.MapRenderer/Program.cs +++ b/Content.MapRenderer/Program.cs @@ -25,10 +25,14 @@ namespace Content.MapRenderer internal static async Task Main(string[] args) { - if (args.Length == 0) + + if (!CommandLineArguments.TryParse(args, out var arguments)) + return; + + if (arguments.Maps.Count == 0) { Console.WriteLine("Didn't specify any maps to paint! Loading the map list..."); - + await using var server = await PoolManager.GetServerClient(); var mapIds = server.Pair.Server .ResolveDependency() @@ -87,9 +91,7 @@ namespace Content.MapRenderer selectedMapPrototypes.Add(mapIds[id]); } - var argsLength = args.Length; - Array.Resize(ref args, argsLength + selectedMapPrototypes.Count); - selectedMapPrototypes.CopyTo(args, argsLength); + arguments.Maps.AddRange(selectedMapPrototypes); if (selectedMapPrototypes.Count == 0) { @@ -100,8 +102,37 @@ namespace Content.MapRenderer Console.WriteLine($"Selected maps: {string.Join(", ", selectedMapPrototypes)}"); } - if (!CommandLineArguments.TryParse(args, out var arguments)) - return; + if (arguments.ArgumentsAreFileNames) + { + Console.WriteLine("Retrieving map ids by map file names..."); + + Console.Write("Fetching map prototypes... "); + await using var server = await PoolManager.GetServerClient(); + var mapPrototypes = server.Pair.Server + .ResolveDependency() + .EnumeratePrototypes() + .ToArray(); + Console.WriteLine("[Done]"); + + var ids = new List(); + + foreach (var mapPrototype in mapPrototypes) + { + if (arguments.Maps.Contains(mapPrototype.MapPath.Filename)) + { + ids.Add(mapPrototype.ID); + Console.WriteLine($"Found map: {mapPrototype.MapName}"); + } + } + + if (ids.Count == 0) + { + await Console.Error.WriteLineAsync("Found no maps for the given file names!"); + return; + } + + arguments.Maps = ids; + } await Run(arguments); } @@ -123,7 +154,7 @@ namespace Content.MapRenderer mapViewerData.ParallaxLayers.Add(LayerGroup.DefaultParallax()); var directory = Path.Combine(arguments.OutputPath, map); - + var i = 0; try {