import { Rect, Vector2D } from "../geometry";
import { AnyParticle } from "./AnyParticle";
import { SomeParticleForce } from "./SomeParticleForce";
import { ParticleMetadataMap, SomePhysicsEngine } from "./SomePhysicsEngine";
import { SomeSystemForce } from "./SomeSystemForce";
export declare class PhysicsEngine<SomeParticle extends AnyParticle> implements SomePhysicsEngine<SomeParticle> {
    particles: Array<SomeParticle>;
    particleMetadataMap: ParticleMetadataMap;
    particleForces: Array<SomeParticleForce>;
    systemForces: Array<SomeSystemForce>;
    worldBounds: Rect | null;
    gravity: Vector2D;
    restitutionCoefficient: number;
    collisionIterations: number;
    dampingFactor: number;
    constructor();
    addParticle(particle: SomeParticle): void;
    removeParticle(particleOrId: SomeParticle | string): boolean;
    getParticleById(id: string): SomeParticle | undefined;
    addForce(force: SomeParticleForce | SomeSystemForce): void;
    removeForce(force: SomeParticleForce | SomeSystemForce): boolean;
    update(deltaTime: number): void;
    resolveCollisions(): void;
    handleBoundaryConditions(particle: SomeParticle): void;
    clear(): void;
    getTotalKineticEnergy(): number;
    logState(): void;
    getParticleCount(): number;
    setGravity(gravity: Vector2D): void;
    setWorldBounds(bounds: Rect | null): void;
    setRestitutionCoefficient(restitution: number): void;
    setCollisionIterations(iterations: number): void;
    checkIfAllParticlesAtRest(): boolean;
}
//# sourceMappingURL=PhysicsEngine.d.ts.map