From 39066900773e7857faf2d02e7ed51b71d219d97d Mon Sep 17 00:00:00 2001 From: godosa Date: Tue, 6 Oct 2026 23:39:36 +0200 Subject: godosa-engine: initial public history --- src/Godosa.Core/Runs/RunFlags.cs | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 src/Godosa.Core/Runs/RunFlags.cs (limited to 'src/Godosa.Core/Runs/RunFlags.cs') diff --git a/src/Godosa.Core/Runs/RunFlags.cs b/src/Godosa.Core/Runs/RunFlags.cs new file mode 100644 index 0000000..1eca433 --- /dev/null +++ b/src/Godosa.Core/Runs/RunFlags.cs @@ -0,0 +1,39 @@ +using System.Globalization; + +namespace Godosa.Core.Runs; + +/// Shared run flags: --deterministic [seed] (fixed step, seeded streams), --digest [every=N] +/// (state hash lines), --headless (no window; implies deterministic). null = the game's default. +public sealed record RunFlags(bool Deterministic = false, ulong? Seed = null, bool Digest = false, int DigestEvery = 0, bool Headless = false) +{ + public ulong SeedOr(ulong fallback) => Seed ?? fallback; + + /// Consumes the run flag at (and its optional value, advancing ); + /// false when args[i] is no run flag. + public static bool TryTake(IReadOnlyList args, ref int i, ref RunFlags flags) + { + string? next = i + 1 < args.Count ? args[i + 1] : null; + switch (args[i]) + { + case "--deterministic": + flags = flags with { Deterministic = true }; + if (next != null && ulong.TryParse(next, NumberStyles.None, CultureInfo.InvariantCulture, out var seed)) + (flags, i) = (flags with { Seed = seed }, i + 1); + return true; + case "--digest": + flags = flags with { Digest = true }; + if (next != null && next.StartsWith("every=", StringComparison.Ordinal)) + { + if (!int.TryParse(next.AsSpan(6), NumberStyles.None, CultureInfo.InvariantCulture, out var every) || every < 1) + throw new ArgumentException($"--digest {next}: every=N needs N ≥ 1"); + (flags, i) = (flags with { DigestEvery = every }, i + 1); + } + return true; + case "--headless": + flags = flags with { Headless = true, Deterministic = true }; + return true; + default: + return false; + } + } +} -- cgit