Compare commits

...

2 Commits

Author SHA1 Message Date
Tim Van Baak 5167978f8c Update some log statements 2024-08-21 14:27:48 +00:00
Tim Van Baak aaf3320cf8 Add a handler for asserting against orders 2024-08-21 14:25:25 +00:00
3 changed files with 59 additions and 3 deletions

View File

@ -27,8 +27,9 @@ public class GameScriptHandler(World world, bool strict = false) : IScriptHandle
// "---" submits the orders for validation to allow for assertions about it
if (input == "---") {
Console.WriteLine("Submitting orders for validation");
// TODO submit orders
// TODO return a new handler that handles asserts
return new ValidatedOrdersScriptHandler(World, Strict);
}
// A block of orders for a single power beginning with "{name}:"
@ -43,8 +44,6 @@ public class GameScriptHandler(World world, bool strict = false) : IScriptHandle
return null;
}
Console.WriteLine($"{CurrentPower}: {input}");
return this;
}

View File

@ -44,6 +44,7 @@ public class SetupScriptHandler(World world, bool strict = false) : IScriptHandl
case "begin":
case "---":
Console.WriteLine("Starting game");
return new GameScriptHandler(World, Strict);
case "list" when args.Length == 1:

View File

@ -0,0 +1,56 @@
using System.Text.RegularExpressions;
using MultiversalDiplomacy.Model;
namespace MultiversalDiplomacy.Script;
public class ValidatedOrdersScriptHandler(World world, bool strict = false) : IScriptHandler
{
public string Prompt => "valid> ";
public World World { get; private set; } = world;
/// <summary>
/// Whether unsuccessful commands should terminate the script.
/// </summary>
public bool Strict { get; } = strict;
public IScriptHandler? HandleInput(string input)
{
var args = input.Split(' ', StringSplitOptions.RemoveEmptyEntries);
if (args.Length == 0)
{
return this;
}
var command = args[0];
switch (command)
{
case "assert" when args.Length == 1:
Console.WriteLine("Usage:");
break;
case "assert":
string assertion = input["assert ".Length..];
OrderRegex re = new(World);
Regex prov = new($"{re.Province} (.*)");
Match match = prov.Match(assertion);
if (!match.Success) {
Console.WriteLine($"Could not parse province from {assertion}");
return Strict ? null : this;
}
// TODO look up order once orders are validated and adjudicated
Console.WriteLine("Order lookup not implemented yet");
return null;
default:
// noop on comments that begin with #
if (command.StartsWith('#')) break;
Console.WriteLine($"Unrecognized command: {command}");
if (Strict) return null;
break;
}
return this;
}
}