import type { Vec2 } from '../core/types'; export interface FluidConfig { particleCount: number; particleRadius: number; restDensity: number; stiffness: number; viscosity: number; gravity: Vec2; boundaryMin: Vec2; boundaryMax: Vec2; smoothingRadius: number; timeStep: number; surfaceTension: number; colorMode: 'velocity' | 'density' | 'pressure' | 'solid'; renderMode: 'particles' | 'metaballs' | 'mesh'; } export declare const DEFAULT_FLUID_CONFIG: FluidConfig; export interface FluidParticle { position: Vec2; velocity: Vec2; acceleration: Vec2; density: number; pressure: number; mass: number; } export declare function createFluidParticles(config: FluidConfig): FluidParticle[]; export declare function stepFluid(particles: FluidParticle[], config: FluidConfig): void; export interface SoftBodyConfig { stiffness: number; damping: number; gravity: Vec2; pressure: number; friction: number; maxStretch: number; iterations: number; } export declare const DEFAULT_SOFT_BODY: SoftBodyConfig; export interface SoftBodyNode { position: Vec2; prevPosition: Vec2; velocity: Vec2; mass: number; pinned: boolean; } export interface SoftBodySpring { nodeA: number; nodeB: number; restLength: number; stiffness: number; damping: number; } export interface SoftBody { nodes: SoftBodyNode[]; springs: SoftBodySpring[]; config: SoftBodyConfig; } export declare function createSoftBodyCircle(center: Vec2, radius: number, segments: number, config: SoftBodyConfig): SoftBody; export declare function stepSoftBody(body: SoftBody, dt: number): void; export interface DestructionConfig { maxFragments: number; minFragmentSize: number; explosionForce: number; debrisLifetime: number; cascadeChance: number; cascadeForceMultiplier: number; particlesPerBreak: number; } export declare const DEFAULT_DESTRUCTION: DestructionConfig; export interface DestructibleObject { id: string; health: number; maxHealth: number; position: Vec2; width: number; height: number; material: 'wood' | 'stone' | 'metal' | 'glass' | 'ice'; fragments?: Fragment[]; destroyed: boolean; } export interface Fragment { position: Vec2; velocity: Vec2; rotation: number; angularVelocity: number; width: number; height: number; lifetime: number; } export declare function shatterObject(obj: DestructibleObject, impactPoint: Vec2, force: number, config: DestructionConfig): Fragment[]; export interface RopeConfig { segmentCount: number; segmentLength: number; gravity: Vec2; damping: number; iterations: number; stiffness: number; breakForce: number; collisionRadius: number; } export declare const DEFAULT_ROPE_CONFIG: RopeConfig; export interface RopePoint { position: Vec2; prevPosition: Vec2; pinned: boolean; } export interface Rope { points: RopePoint[]; config: RopeConfig; broken: boolean; breakIndex: number; } export declare function createRope(startPos: Vec2, endPos: Vec2, config: RopeConfig): Rope; export declare function stepRope(rope: Rope, dt: number): void; export interface ClothConfig { width: number; height: number; resolutionX: number; resolutionY: number; gravity: Vec2; damping: number; stiffness: number; tearThreshold: number; windForce: Vec2; windTurbulence: number; iterations: number; pinnedRow: 'top' | 'bottom' | 'none' | 'both'; } export declare const DEFAULT_CLOTH: ClothConfig; export interface ClothNode { position: Vec2; prevPosition: Vec2; pinned: boolean; } export interface ClothLink { a: number; b: number; restLength: number; torn: boolean; } export interface ClothMesh { nodes: ClothNode[]; links: ClothLink[]; config: ClothConfig; cols: number; rows: number; } export declare function createCloth(originX: number, originY: number, config: ClothConfig): ClothMesh; export declare function stepCloth(cloth: ClothMesh, dt: number, time: number): void;