// Provenance: own design — shared run scripts (spec §5.5) namespace Godosa.Core.Runs.Scripts; public enum InputKind { Move, Down, Up, Wheel, KeyDown, KeyUp, Text } public enum MouseButton { Left, Right } /// One simulated user input event at virtual-screen coordinates. public sealed record InputEvent(InputKind Kind, int X = 0, int Y = 0, MouseButton Button = MouseButton.Left, string Key = "", string Text = "", int Delta = 0); /// An event due frames after its step began. public sealed record PlannedInput(int Frame, InputEvent Event); public sealed record InputPlan(IReadOnlyList Events) { public int LastFrame => Events.Count == 0 ? 0 : Events.Max(e => e.Frame); } /// The game's input entry: the real UI in a window, its layout + hit-testing headless. public interface IInputRouter { void Send(InputEvent e); }