/** * SimulationPlayback — State machine for replaying recorded simulation snapshots. * * States: idle → recording → paused → playing ↔ paused * * During playback, interpolates between bracketing snapshots for smooth * scrubbing at arbitrary speeds (including reverse). * * @see SimulationRecorder — produces the snapshot history this consumes */ import { SimulationRecorder } from './SimulationRecorder'; export type PlaybackState = 'idle' | 'recording' | 'paused' | 'playing'; export interface PlaybackConfig { /** Playback speed multiplier (default: 1.0). Negative = reverse. */ playbackSpeed?: number; /** Enable linear interpolation between snapshots (default: true) */ interpolation?: boolean; /** Loop playback when reaching the end (default: false) */ loop?: boolean; } export declare class SimulationPlayback { private state; private currentTime; private speed; private interpolate; private loop; private recorder; private scratchBuffers; constructor(recorder: SimulationRecorder, config?: PlaybackConfig); startRecording(): void; stopRecording(): void; play(): void; pause(): void; stop(): void; seekTo(time: number): void; seekToFrame(index: number): void; seekToProgress(progress: number): void; stepForward(): void; stepBackward(): void; /** * Advance playback by wall-clock delta seconds. * Returns interpolated field data, or null if not in playback mode. */ tick(wallDelta: number): Map | null; /** * Get interpolated fields at the current playback time. * Can be called from paused state for scrubber preview. */ getFieldsAtCurrentTime(): Map | null; getState(): PlaybackState; getCurrentTime(): number; getSpeed(): number; getCurrentFrame(): number; getTotalFrames(): number; getTimeRange(): [number, number]; getProgress(): number; getMemoryUsage(): number; setSpeed(speed: number): void; setLoop(loop: boolean): void; private interpolateFields; } //# sourceMappingURL=SimulationPlayback.d.ts.map