export type InputReplayEventType = "key" | "pointer-button" | "pointer-move" | "pointer-wheel" | "gamepad-axis" | "gamepad-button" | "action" | "frame";
export interface InputReplayEvent {
    readonly type: InputReplayEventType;
    readonly timestampMs: number;
    readonly frame: number;
    readonly code?: string;
    readonly down?: boolean;
    readonly button?: number;
    readonly x?: number;
    readonly y?: number;
    readonly deltaX?: number;
    readonly deltaY?: number;
    readonly gamepadIndex?: number;
    readonly controlIndex?: number;
    readonly action?: string;
    readonly context?: string;
    readonly value?: number;
    readonly vector?: readonly [number, number];
    readonly deltaTimeMs?: number;
}
export interface InputRecordingMetadata {
    readonly version: "1.0.0";
    readonly source: "origin-master-input-recorder-playback-adapted";
    readonly startTimeMs: number;
    readonly endTimeMs: number;
    readonly durationMs: number;
    readonly frameCount: number;
    readonly eventCount: number;
    readonly evidence: {
        readonly oldCodebasePort: true;
        readonly recording: boolean;
        readonly playback: boolean;
        readonly seek: boolean;
        readonly looping: boolean;
    };
}
export interface InputRecording {
    readonly metadata: InputRecordingMetadata;
    readonly events: readonly InputReplayEvent[];
}
export interface InputPlaybackOptions {
    readonly speed?: number;
    readonly loop?: boolean;
}
export interface InputPlaybackSnapshot {
    readonly state: "stopped" | "playing" | "paused";
    readonly currentTimeMs: number;
    readonly emittedEvents: number;
    readonly loopCount: number;
    readonly recordingEventCount: number;
    readonly evidence: InputRecordingMetadata["evidence"];
}
export declare class InputRecorder {
    private readonly events;
    private readonly maxEvents;
    private recording;
    private startTimeMs;
    private lastTimestampMs;
    private frame;
    constructor(options?: {
        readonly maxEvents?: number;
    });
    start(startTimeMs?: number): void;
    stop(endTimeMs?: number): InputRecording;
    recordFrame(deltaTimeMs: number, timestampMs?: number): void;
    recordKey(code: string, down: boolean, timestampMs?: number): void;
    recordPointerButton(button: number, down: boolean, x: number, y: number, timestampMs?: number): void;
    recordPointerMove(x: number, y: number, deltaX: number, deltaY: number, timestampMs?: number): void;
    recordPointerWheel(deltaX: number, deltaY: number, timestampMs?: number): void;
    recordGamepadAxis(gamepadIndex: number, controlIndex: number, value: number, timestampMs?: number): void;
    recordGamepadButton(gamepadIndex: number, controlIndex: number, down: boolean, value: number, timestampMs?: number): void;
    recordAction(context: string, action: string, value: number, vector?: readonly [number, number], timestampMs?: number): void;
    recordingSnapshot(): InputRecording;
    toJSON(): string;
    private push;
}
export declare class InputPlayback {
    private recording;
    private state;
    private currentTimeMs;
    private eventIndex;
    private emittedEvents;
    private loopCount;
    private speed;
    private loop;
    constructor(options?: InputPlaybackOptions);
    load(recording: InputRecording): void;
    play(): void;
    pause(): void;
    stop(): void;
    seek(timeMs: number): void;
    update(deltaTimeMs: number): readonly InputReplayEvent[];
    snapshot(): InputPlaybackSnapshot;
    private requireRecording;
}
export declare function parseInputRecording(json: string): InputRecording;
//# sourceMappingURL=InputReplay.d.ts.map