using MultiversalDiplomacy.Model; namespace MultiversalDiplomacy.Script; /// /// A script handler for interacting with a loaded game. /// public class GameScriptHandler : IScriptHandler { public GameScriptHandler(World world) { World = world; } public string Prompt => "5dp> "; public World World { get; set; } public IScriptHandler? HandleInput(string input) { var args = input.Split(' ', StringSplitOptions.RemoveEmptyEntries); if (args.Length == 0) { return this; } var command = args[0]; switch (command) { case "help": case "?": Console.WriteLine("commands:"); Console.WriteLine(" list: list things in a game category"); Console.WriteLine(" orders: submit order sets"); break; case "list" when args.Length == 1: Console.WriteLine("usage:"); Console.WriteLine(" list ordersets: unadjudicated order sets"); Console.WriteLine(" list powers: the powers in the game"); break; case "list" when args[1] == "ordersets": foreach (OrderSet orderSet in World.OrderSets.Where(os => !os.Adjudicated)) { var lines = orderSet.Text.Split('\n'); var firstLine = lines[0].Trim(); Console.WriteLine($" {firstLine} ({lines.Length - 1} orders)"); } break; case "list" when args[1] == "powers": Console.WriteLine("Powers:"); foreach (Power power in World.Powers) { Console.WriteLine($" {power.Name}"); } break; case "orders" when args.Length == 1: Console.WriteLine("usage: orders [power]"); break; case "orders": var handler = new OrderSetScriptHandler(this, World, input); return handler; default: Console.WriteLine("Unrecognized command"); break; } return this; } }