import type { ComputeNode } from 'three/webgpu'; import type { TSLFloatNode, TSLMat4Node, TSLStorageNode } from '../../../types/tsl.cjs'; import type { GPUInteractionSimulationKind } from '../GPUInteractionSimulation.cjs'; import { type InteractionQueryWorld } from './InteractionGridQueries.cjs'; export interface ParticleColliderConstraintBuffers { positions: TSLStorageNode<'vec3'>; velocities: TSLStorageNode<'vec3'>; prevPositions?: TSLStorageNode<'vec3'> | null | undefined; } export interface ParticleColliderConstraintOptions { layer?: number | undefined; mask?: number | undefined; particleRadius?: number | undefined; friction?: number | undefined; restitution?: number | undefined; particleSpacing?: number | undefined; avoidanceDistance?: number | undefined; lookAheadTime?: number | undefined; avoidanceStrength?: number | undefined; velocityOnly?: boolean | undefined; positionOnly?: boolean | undefined; queryMode?: 'grid' | 'scan' | undefined; readonly [name: string]: unknown; } export interface ParticleColliderTransforms { domainMatrix?: TSLMat4Node | undefined; domainMatrixInverse?: TSLMat4Node | undefined; } declare function createParticleColliderConstraintPass(world: InteractionQueryWorld, buffers: ParticleColliderConstraintBuffers, particleCount: number, deltaTime: TSLFloatNode, options?: ParticleColliderConstraintOptions, mode?: GPUInteractionSimulationKind, transforms?: ParticleColliderTransforms): ComputeNode; export { createParticleColliderConstraintPass };