export type FlowVec3 = readonly [number, number, number]; export interface FlowTubeConfig { from: FlowVec3; to: FlowVec3; /** Tube radius; flow strength fades from the axis to zero here. */ radius: number; /** Axial flow speed on the core at full spool. */ strength: number; /** Radial falloff exponent — `1` linear, `2` (default) keeps a fat core with soft edges. */ falloff?: number; /** Extra reach past each end where the axial envelope fades to zero; default `0` (hard caps). */ capFalloff?: number; } /** * An axial corridor of directional flow with radial core falloff and a spool scalar — fan tunnels, * updraft shafts, river narrows, thruster wash. Pure math: sample `velocityAt(point, spool)` and add * it to whatever integrator moves the body (walk controller drift, `BuoyantBody`, a custom sim). */ export interface FlowTube { readonly axis: FlowVec3; readonly length: number; /** Flow velocity at a world point, scaled by `spool` in `[0, 1]` (default `1`); zero outside the tube. */ velocityAt(point: FlowVec3, spool?: number): FlowVec3; /** The radial × axial envelope in `[0, 1]` at a world point — feed particle density, audio gain, rumble. */ intensityAt(point: FlowVec3): number; } export declare function createFlowTube(config: FlowTubeConfig): FlowTube; /** Sum several tubes' flow at one point — each entry carries its own spool. */ export declare function combineFlowVelocity(tubes: readonly (FlowTube | { tube: FlowTube; spool: number; })[], point: FlowVec3): FlowVec3;