// 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);
}