import { type Vec3 } from "./Shape.js";
export type RigidBodyType = "dynamic" | "static" | "kinematic";
export type Quat = readonly [number, number, number, number];
export type RigidBodyDescriptor = {
    readonly type?: RigidBodyType;
    readonly position?: Vec3;
    readonly rotation?: Quat;
    readonly velocity?: Vec3;
    readonly angularVelocity?: Vec3;
    readonly mass?: number;
    readonly inertia?: Vec3;
    readonly linearDamping?: number;
    readonly angularDamping?: number;
    readonly restitution?: number;
    readonly friction?: number;
    readonly sleeping?: boolean;
};
export type RigidBodySnapshot = {
    readonly id: number;
    readonly type: RigidBodyType;
    readonly position: Vec3;
    readonly rotation: Quat;
    readonly velocity: Vec3;
    readonly angularVelocity: Vec3;
    readonly mass: number;
    readonly inverseMass: number;
    readonly inverseInertia: Vec3;
    readonly sleeping: boolean;
};
export declare class RigidBody {
    readonly id: number;
    readonly type: RigidBodyType;
    readonly mass: number;
    readonly inverseMass: number;
    readonly restitution: number;
    readonly friction: number;
    position: [number, number, number];
    previousPosition: [number, number, number];
    rotation: [number, number, number, number];
    previousRotation: [number, number, number, number];
    velocity: [number, number, number];
    angularVelocity: [number, number, number];
    linearDamping: number;
    angularDamping: number;
    inverseInertia: [number, number, number];
    sleeping: boolean;
    private accumulatedForce;
    private accumulatedTorque;
    private sleepTimer;
    constructor(id: number, descriptor?: RigidBodyDescriptor);
    setPosition(position: Vec3): void;
    setVelocity(velocity: Vec3): void;
    setRotation(rotation: Quat): void;
    setAngularVelocity(angularVelocity: Vec3): void;
    applyForce(force: Vec3): void;
    applyTorque(torque: Vec3): void;
    applyImpulse(impulse: Vec3): void;
    applyAngularImpulse(impulse: Vec3): void;
    applyImpulseAtPoint(impulse: Vec3, worldPoint: Vec3): void;
    integrate(dt: number, gravity: Vec3): void;
    clearForces(): void;
    speedSquared(): number;
    wake(): void;
    sleep(): void;
    resetSleepTimer(): void;
    accumulateSleepTime(dt: number): number;
    snapshot(): RigidBodySnapshot;
}
//# sourceMappingURL=RigidBody.d.ts.map