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;
