CI / build-test (push) Failing after 1m8s
Add MrGameEng.AI utility-AI module; format codebase with CSharpier New MrGameEng.AI module (ResponseCurve, Consideration, UtilityAction, UtilityAi selector, Blackboard) plus CSharpier formatting applied across the whole engine. Documents the CSharpier convention in CLAUDE.md. @
77 lines
2.3 KiB
C#
77 lines
2.3 KiB
C#
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 <source-dir> <output-dir> [options]
|
|
|
|
Options:
|
|
--group-depth <n> directories forming one atlas (0 = single atlas; default 1)
|
|
--page-size <n> maximum page size in pixels (default 2048)
|
|
--padding <n> gap between images in pixels (default 2)
|
|
--root-name <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;
|