using System.Linq; using Texty.Scripts.Game; namespace Texty.Scripts.Commands; public enum LookModifier { At, Around } public partial class LookCommand : Command { public LookCommand() { } public LookCommand(string[] arguments) : base(CommandType.Look, arguments) { (Modifier, arguments) = TryParseModifier(arguments); Target = string.Join(" ", arguments); } public string Target { get; } public LookModifier? Modifier { get; } /// /// Access this LookCommand's modifier as a string. /// /// /// This function is provided as a means for testing the modifier parsing from GDScript. /// private string ModifierAsString => Modifier?.ToString(); public override string ToString() { return $"look {ModifierAsString?.ToLower()} {string.Join(" ", Target)}"; } /// /// Try to parse this LookCommand's modifier from the given arguments. /// /// The arguments given to this look commands /// A pair consisting of the parse modifier and the remaining arguments private static (LookModifier?, string[]) TryParseModifier(string[] arguments) { if (arguments.Length == 0) return (null, arguments); return arguments[0].ToLower() switch { "at" => (LookModifier.At, arguments.Skip(1).ToArray()), "around" => (LookModifier.Around, new string[] { }), _ => (null, arguments) }; } }