UNPKG

@thi.ng/timestep

Version:

Deterministic fixed timestep simulation updates with state interpolation

86 lines 2.89 kB
import type { IDeref } from "@thi.ng/api"; import type { ReadonlyVec, Vec, VecAPI, VecOpV, VecOpVVN } from "@thi.ng/vectors"; import type { ITimeStep, ReadonlyTimeStep, StateUpdate } from "./api.js"; export declare class NumericState implements IDeref<number>, ITimeStep { value: number; update: StateUpdate<number>; curr: number; prev: number; constructor(value: number, update: StateUpdate<number>); deref(): number; /** * Sets {@link NumericState.prev}, {@link NumericState.curr} and * {@link NumericState.value} to given new value. * * @param value */ reset(value: number): void; integrate(dt: number, ctx: ReadonlyTimeStep): void; interpolate(alpha: number, _: ReadonlyTimeStep): void; } export declare class VectorState implements IDeref<ReadonlyVec>, ITimeStep { value: Vec; update: StateUpdate<ReadonlyVec>; prev: Vec; curr: Vec; setFn: VecOpV; mixFn: VecOpVVN; constructor(api: Pick<VecAPI, "set" | "mixN">, value: Vec, update: StateUpdate<ReadonlyVec>); deref(): ReadonlyVec; /** * Copies given vector to {@link VectorState.prev}, {@link VectorState.curr} * and {@link VectorState.value}. * * @param value */ reset(value: ReadonlyVec): void; integrate(dt: number, ctx: ReadonlyTimeStep): void; interpolate(alpha: number): void; } /** * Returns a new {@link NumericState} wrapper for given value `x` and its update * function for use with {@link TimeStep.update}. * * @param x * @param update */ export declare const defNumeric: (x: number, update: StateUpdate<number>) => NumericState; /** * Returns a new {@link VectorState} wrapper for given vector `v` (arbitrary * length) and its update function for use with {@link TimeStep.update}. The * `api` object is used to provide dedicated vector ops used internally. * * @remarks * **IMPORTANT:** The `update` function MUST update the vector received as 1st * arg (which is {@link VectorState.curr}). * * Also see {@link defVector2}, {@link defVector3}, {@link defVector4} for * pre-configured versions. * * @param api * @param v * @param update */ export declare const defVector: (api: Pick<VecAPI, "set" | "mixN">, v: ReadonlyVec, update: StateUpdate<ReadonlyVec>) => VectorState; /** * 2D optimized version of {@link defVector}. * * @param v * @param update */ export declare const defVector2: (v: ReadonlyVec, update: StateUpdate<ReadonlyVec>) => VectorState; /** * 3D optimized version of {@link defVector}. * * @param v * @param update */ export declare const defVector3: (v: ReadonlyVec, update: StateUpdate<ReadonlyVec>) => VectorState; /** * 4D optimized version of {@link defVector}. * * @param v * @param update */ export declare const defVector4: (v: ReadonlyVec, update: StateUpdate<ReadonlyVec>) => VectorState; //# sourceMappingURL=state.d.ts.map