@thi.ng/timestep
Version:
Deterministic fixed timestep simulation updates with state interpolation
86 lines • 2.89 kB
TypeScript
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