@hypernym/frame
Version:
Universal Frame Manager.
57 lines • 1.59 kB
TypeScript
//#region src/index.d.ts
/**
* Creates a universal `frame` manager.
*
* @example
*
* ```ts
* import { createFrame } from '@hypernym/frame'
*
* const frame = createFrame()
*
* const process = frame.add((state) => console.log(state), { loop: true }) // Adds the process
*
* frame.delete(process) // Deletes a specific process
*
* frame.add((state) => console.log(state), { phase: 1 }) // Adds the process to a specific phase (default is 0)
*
* frame.delete() // Deletes all processes, phases and resets the frame state
* ```
*
* @see [Repository](https://github.com/hypernym-studio/frame)
*/
declare function createFrame(options?: FrameOptions): Frame;
//#endregion
//#region src/types.d.ts
type FrameProcess = (state: FrameState) => void;
interface FrameProcessOptions {
loop?: boolean;
phase?: number;
schedule?: boolean;
}
interface FramePhase {
schedule(process: FrameProcess, options?: FrameProcessOptions): FrameProcess;
add(state: FrameState): void;
delete(process: FrameProcess): void;
}
interface FrameState {
delta: number;
timestamp: number;
isRunning: boolean;
}
interface Frame {
add(process: FrameProcess, options?: FrameProcessOptions): FrameProcess;
delete(process?: FrameProcess): void;
start(): void;
stop(): void;
get state(): Readonly<FrameState>;
get fps(): number;
set fps(v: number);
}
interface FrameOptions {
scheduler?: (process: VoidFunction) => number | void;
loop?: boolean;
fps?: number;
}
//#endregion
export { Frame, FrameOptions, FramePhase, FrameProcess, FrameProcessOptions, FrameState, createFrame };