@genart-api/core
Version:
Platform-independent extensible API for browser-based generative art
56 lines (55 loc) • 1.84 kB
TypeScript
/**
* A simple plugin component responsible for scheduling animation frames and
* providing timing and frame number information.
*/
export interface TimeProvider {
/**
* (Re)initializes the time provider's internal state.
*/
start(): void;
/**
* Schedules given frame update function to be executed in the future. The
* given function will be wrapped and called with updated timestamp & frame
* number ({@link TimeProvider.now} will then return the same values, as
* tuple).
*
* @param fn
*/
next(fn: (time: number, frame: number) => void): void;
/**
* Returns tuple of current `[time, frame]` (where `time` is the current
* frame's number of milliseconds since start and `frame` the current frame
* number).
*
* @remarks
* Function is idempotent when called during a single frame update. Can also
* be called via `$genart.timeProvider.now()`.
*/
now(): [number, number];
}
/**
* Collection of default {@link TimeProvider}s.
*/
export interface TimeProviders {
/**
* Default {@link TimeProvider}, `requestAnimationFrame()`-based. Start time
* & frame offsets can be provided (both defaulting to zero).
*
* @param timeOffset
* @param frameOffset
*/
raf(timeOffset?: number, frameOffset?: number): TimeProvider;
/**
* Returns a {@link TimeProvider} for fixed frame rate, offline (aka
* non-realtime) animation use cases, e.g. recording image sequences.
*
* @remarks
* Supports arbitrary delays between frames (default: 250ms) and reference
* frame rates (default: 60fps).
*
* @param frameDelay
* @param referenceFPS
* @param frameOffset
*/
offline(frameDelay?: number, referenceFPS?: number, frameOffset?: number): TimeProvider;
}