Add a handler for asserting against orders
This commit is contained in:
parent
2745d12d29
commit
aaf3320cf8
@ -28,7 +28,7 @@ public class GameScriptHandler(World world, bool strict = false) : IScriptHandle
|
||||
// "---" submits the orders for validation to allow for assertions about it
|
||||
if (input == "---") {
|
||||
// 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}:"
|
||||
|
56
MultiversalDiplomacy/Script/ValidatedOrdersScriptHandler.cs
Normal file
56
MultiversalDiplomacy/Script/ValidatedOrdersScriptHandler.cs
Normal 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;
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user