import { Observer, SubscriptionOptions } from "../../utils/observable"; export type Position = { x: number; y: number; }; export type Velocity = { vx: number; vy: number; }; export type DestinationUpdate = Position & { type: 'destination'; }; export type DeltaUpdate = Position & { type: 'delta'; }; export type PositionUpdate = DestinationUpdate | DeltaUpdate; export declare class CameraPositionUpdateBatcher { private nextPosition; private delta; private observable; private queuePositionUpdateCount; private queuePositionUpdateToCount; private queuePositionUpdateByCount; private lastUpdateCount; constructor(); /** * Queue an absolute position update to be processed in the next animation frame */ queuePositionUpdate(x: number, y: number): void; /** * Queue a position update to a specific destination to be processed in the next animation frame * This will override any pending delta updates */ queuePositionUpdateTo(destination: Position): void; /** * Queue a position update by delta to be processed in the next animation frame * This will be ignored if there's a pending destination update */ queuePositionUpdateBy(delta: Position): void; /** * Process and clear all queued position updates * @returns the update to apply to the position, with type information */ processQueuedUpdates(): PositionUpdate | null; /** * Subscribe to position updates */ subscribe(observer: Observer<[PositionUpdate]>, options?: SubscriptionOptions): () => void; /** * Get debug information about queue method calls since last update */ getDebugInfo(): { lastUpdateTotalCalls: number; queuePositionUpdateCalls: number; queuePositionUpdateToCalls: number; queuePositionUpdateByCalls: number; }; }