import type { PhysicsWorld } from "./PhysicsWorld.js";
import type { Quat } from "./RigidBody.js";
import type { Vec3 } from "./Shape.js";
type MutableQuat = [number, number, number, number];
type QuaternionObject = {
    x: number;
    y: number;
    z: number;
    w: number;
    set?: (x: number, y: number, z: number, w: number) => void;
    toArray?: () => readonly number[];
};
export type ScenePhysicsNode = {
    position?: [number, number, number];
    rotation?: MutableQuat;
    quaternion?: MutableQuat | QuaternionObject;
    getWorldPosition?: () => Vec3;
    getWorldQuaternion?: () => Quat;
    getQuaternion?: () => Quat;
    setWorldPosition?: (position: Vec3) => void;
    setWorldQuaternion?: (rotation: Quat) => void;
    setPosition?: (position: Vec3) => void;
    setRotation?: (rotation: Quat) => void;
    setQuaternion?: (rotation: Quat) => void;
};
export type ScenePhysicsBinding = {
    readonly bodyId: number;
    readonly node: ScenePhysicsNode;
    readonly mode?: "dynamic" | "kinematic";
};
export declare class ScenePhysicsBridge {
    private readonly bindings;
    bind(binding: ScenePhysicsBinding): void;
    unbind(bodyId: number): void;
    pushKinematic(world: Pick<PhysicsWorld, "getBody">): void;
    pullDynamic(world: Pick<PhysicsWorld, "getBody">, alpha?: number): void;
    update(world: Pick<PhysicsWorld, "getBody">, alpha?: number): void;
}
export declare function interpolatePosition(previous: Vec3, current: Vec3, alpha: number): [number, number, number];
export declare function interpolateRotation(previous: Quat, current: Quat, alpha: number): MutableQuat;
export {};
//# sourceMappingURL=ScenePhysicsBridge.d.ts.map