import { CellComplex, VecN } from '@holotope/core'; import { XpbdParticleN, XpbdWorldN } from './xpbd-world.js'; export interface XpbdParticleBindingVertexContextN { readonly sourceVertexIndex: number; /** Copied source position; callback mutation cannot edit the complex. */ readonly sourcePosition: VecN; } export type XpbdParticleBindingVertexScalarN = number | ((vertex: XpbdParticleBindingVertexContextN) => number); export type XpbdParticleBindingVertexFixedN = boolean | ((vertex: XpbdParticleBindingVertexContextN) => boolean); export interface CompileXpbdParticleBindingNOptions { readonly id: string; readonly source: CellComplex; /** Positive inertial mass. Default one. */ readonly mass?: XpbdParticleBindingVertexScalarN; /** Mobility policy kept separate from mass. Default false. */ readonly fixed?: XpbdParticleBindingVertexFixedN; /** Multiplier on world gravity. Default one. */ readonly gravityScale?: XpbdParticleBindingVertexScalarN; readonly velocity?: (vertex: XpbdParticleBindingVertexContextN) => VecN | ArrayLike; } export interface XpbdParticleBindingVertexN extends XpbdParticleBindingVertexContextN { readonly mass: number; readonly fixed: boolean; readonly particle: XpbdParticleN; } /** Topology-neutral one-particle-per-source-vertex state binding. */ export declare class XpbdParticleBindingN { readonly id: string; readonly dimension: number; readonly source: CellComplex; readonly vertices: readonly XpbdParticleBindingVertexN[]; readonly particles: readonly XpbdParticleN[]; readonly vertexMasses: Float64Array; private attachedWorld; private constructor(); static compile(options: CompileXpbdParticleBindingNOptions): XpbdParticleBindingN; particleForSourceVertex(sourceVertexIndex: number): XpbdParticleN; /** Registers only the bound particles in one RN point world. */ addToWorld(world: XpbdWorldN): XpbdWorldN; /** Validates all live positions, then copies them into the source buffer. */ writeSourcePositions(): CellComplex; } export declare function compileXpbdParticleBindingN(options: CompileXpbdParticleBindingNOptions): XpbdParticleBindingN; //# sourceMappingURL=xpbd-particle-binding.d.ts.map