export interface ThreeDriverOptions { /** Advance the simulation by `dt` seconds. Typically `scheduler.update`. */ readonly update: (dt: number) => void; /** Draw the current state. Called once per frame after the sim step(s). */ readonly render: () => void; /** * Fixed simulation step in seconds (e.g. 1/60). When set, the driver runs whole `update(fixedTimestep)` * steps to consume accumulated real time (deterministic step count). When omitted, the driver is * variable-step (one `update(realDelta)` per frame). */ readonly fixedTimestep?: number; /** Max fixed steps per frame before the backlog is discarded (anti spiral-of-death). Default 8. */ readonly maxSubSteps?: number; /** * The requestAnimationFrame to schedule on. Defaults to the global `requestAnimationFrame` when it * exists (browser). Pass one explicitly to drive a custom loop; leave undefined in Node and call * `tick(dt)` manually. */ readonly requestAnimationFrame?: (cb: (timeMs: number) => void) => number; /** The cancelAnimationFrame paired with the rAF above. */ readonly cancelAnimationFrame?: (id: number) => void; } export interface ThreeDriver { /** Begin the rAF loop. No-op if already running or no rAF is available (Node — use `tick`). */ start(): void; /** Stop the rAF loop. */ stop(): void; /** True while the rAF loop is running. */ readonly running: boolean; /** * Advance one frame by `dt` real seconds and render. The manual entry point for Node/tests (and the * loop body the rAF callback calls). Honours `fixedTimestep` (accumulates) when configured. Returns * the number of `update` calls made this frame. */ tick(dt: number): number; } export declare function createThreeDriver(opts: ThreeDriverOptions): ThreeDriver; //# sourceMappingURL=driver.d.ts.map