using System.Diagnostics; using MrGameEng.Atlases; if (args.Length < 2 || args.Contains("--help") || args.Contains("-h")) { Console.WriteLine( """ MrGameEng.AtlasTool — packs a directory tree of images into texture atlases. Usage: MrGameEng.AtlasTool [options] Options: --group-depth directories forming one atlas (0 = single atlas; default 1) --page-size maximum page size in pixels (default 2048) --padding gap between images in pixels (default 2) --root-name atlas name for files above group depth (default "Atlas") --force rebuild even when sources are unchanged """ ); return args.Length < 2 && !args.Contains("--help") && !args.Contains("-h") ? 1 : 0; } int Option(string name, int fallback) { var index = Array.IndexOf(args, name); if (index < 0) { return fallback; } if (index + 1 < args.Length && int.TryParse(args[index + 1], out var value) && value >= 0) { return value; } Console.Error.WriteLine($"Option {name} requires a non-negative integer value."); Environment.Exit(1); return fallback; // недостижимо } var rootNameIndex = Array.IndexOf(args, "--root-name"); var options = new AtlasBuildOptions { SourceDirectory = args[0], OutputDirectory = args[1], GroupDepth = Option("--group-depth", 1), MaxPageSize = Option("--page-size", 2048), Padding = Option("--padding", 2), RootAtlasName = rootNameIndex >= 0 && rootNameIndex + 1 < args.Length ? args[rootNameIndex + 1] : "Atlas", Force = args.Contains("--force"), }; var stopwatch = Stopwatch.StartNew(); var result = AtlasBuilder.Build(options); stopwatch.Stop(); foreach (var group in result.Groups) { Console.WriteLine( group.Skipped ? $" {group.Name}: up to date ({group.RegionCount} regions, {group.PageCount} pages)" : $" {group.Name}: {group.RegionCount} regions -> {group.PageCount} pages" ); } foreach (var orphan in result.DeletedOrphans) { Console.WriteLine($" deleted orphan {orphan}"); } var built = result.Groups.Count(g => !g.Skipped); Console.WriteLine( $"Done: {built} atlases built, {result.Groups.Count - built} up to date, {stopwatch.Elapsed.TotalSeconds:F1}s." ); return 0;