import { SpringConfig } from '../hooks/useMultiSpringBasic';
export interface PhysicsBody {
    id: string;
    position: {
        x: number;
        y: number;
    };
    velocity: {
        x: number;
        y: number;
    };
    acceleration: {
        x: number;
        y: number;
    };
    mass: number;
    radius: number;
    friction: number;
    restitution: number;
    fixed: boolean;
    forces: Array<{
        x: number;
        y: number;
        duration?: number;
    }>;
}
export interface PhysicsWorld {
    bodies: Map<string, PhysicsBody>;
    gravity: {
        x: number;
        y: number;
    };
    bounds: {
        left: number;
        right: number;
        top: number;
        bottom: number;
    };
    timeStep: number;
    substeps: number;
}
export interface CollisionInfo {
    bodyA: PhysicsBody;
    bodyB: PhysicsBody;
    normal: {
        x: number;
        y: number;
    };
    penetration: number;
    contactPoint: {
        x: number;
        y: number;
    };
}
export declare class GalileoPhysicsSystem {
    private world;
    private animationFrame;
    private lastTime;
    private paused;
    constructor(config?: Partial<PhysicsWorld>);
    addBody(body: PhysicsBody): void;
    removeBody(id: string): void;
    getBody(id: string): PhysicsBody | undefined;
    updateBody(id: string, updates: Partial<PhysicsBody>): void;
    applyForce(id: string, force: {
        x: number;
        y: number;
    }, duration?: number): void;
    applyImpulse(id: string, impulse: {
        x: number;
        y: number;
    }): void;
    start(): void;
    stop(): void;
    pause(): void;
    resume(): void;
    private animate;
    private step;
    private updateForces;
    private integrateMotion;
    private handleCollisions;
    private checkCollision;
    private resolveCollision;
    private applyConstraints;
    setGravity(gravity: {
        x: number;
        y: number;
    }): void;
    setBounds(bounds: Partial<PhysicsWorld['bounds']>): void;
    getAllBodies(): PhysicsBody[];
    clear(): void;
    static createCircleBody(id: string, x: number, y: number, radius: number, mass?: number, options?: Partial<PhysicsBody>): PhysicsBody;
    static createFixedBody(id: string, x: number, y: number, radius: number): PhysicsBody;
}
export declare function usePhysicsSystem(config?: Partial<PhysicsWorld>): GalileoPhysicsSystem | undefined;
export declare class SpringPhysics {
    static calculateSpringForce(current: number, target: number, velocity: number, config: SpringConfig): {
        force: number;
        newVelocity: number;
    };
    static interpolateSpring(from: number, to: number, progress: number, config: SpringConfig): number;
}
export declare const physicsUtils: {
    calculateTrajectory: (initialPosition: {
        x: number;
        y: number;
    }, initialVelocity: {
        x: number;
        y: number;
    }, gravity: {
        x: number;
        y: number;
    }, time: number) => {
        x: number;
        y: number;
    };
    calculateCollisionPoint: (bodyA: PhysicsBody, bodyB: PhysicsBody) => {
        x: number;
        y: number;
    } | null;
    applyExplosion: (bodies: PhysicsBody[], center: {
        x: number;
        y: number;
    }, force: number, radius: number) => void;
};
//# sourceMappingURL=galileoPhysicsSystem.d.ts.map