/** * Per-frame look channel shared between an event-driven capture layer (writer * of raw pointer deltas) and a frame-driven controller (consumer), plus the * latest committed pose for same-frame readers such as presence sync. Kept as * plain mutable state on purpose: routing per-frame deltas through a reactive * store would notify subscribers every frame for state no UI reads. */ export interface LookDeltas { yaw: number; pitch: number; } /** Plain JSON state of a {@link LookChannel}: the pending pixel deltas and the committed pose. */ export interface LookChannelState { deltaX: number; deltaY: number; yaw: number; pitch: number; verticalOffset: number; } export interface LookChannel { accumulate(dx: number, dy: number): void; /** Yaw/pitch deltas (radians) for this frame; clears the accumulator. */ consume(): LookDeltas; setYaw(yaw: number): void; readYaw(): number; setPitch(pitch: number): void; readPitch(): number; setVerticalOffset(offset: number): void; readVerticalOffset(): number; snapshot(): LookChannelState; restore(next: LookChannelState): void; } export interface LookChannelOptions { /** Radians of rotation per pixel of pointer travel. */ sensitivity: number; /** Clamp for the vertical offset register (e.g. peak jump height). */ maxVerticalOffset?: number; } export declare function createLookChannel({ sensitivity, maxVerticalOffset }: LookChannelOptions): LookChannel;