import type { PhysicsWorld } from "./physicsWorld.js"; export interface CarryableConfig { /** Spring stiffness pulling the held body toward the follow point. Default 60. */ followStiffness?: number; /** Spring damping on the follow constraint. Default 12. */ followDamping?: number; /** Clamp on the follow impulse so a heavy item lags instead of teleporting. Default 40. */ maxForce?: number; /** Mass one owner hauls at full speed; heavier → encumbered / needs more owners. Default 8. */ carryCapacity?: number; } /** * Movement multiplier (1 = unhindered, →0 = crushed) for a body of `mass` carried by `owners`. * Pure — the HUD/movement kit reads it to slow a laden hauler (Lethal Company) and to gate items * that need 2+ people (R.E.P.O.). */ export declare function carrySpeedMultiplier(mass: number, carryCapacity: number, owners: number): number; /** * A grabbed physics object following a moving hold point through a spring constraint (the pick — * a raycast — is the caller's/shell's job; core owns the constraint). Supports shared multi-owner * carry (the follow point is the average of owners' hold points), an encumbrance read, and * drop/throw. Reuses `PhysicsWorld.springJoint` to a world anchor moved each frame. */ export declare class Carryable { readonly body: number; private readonly world; private readonly stiffness; private readonly damping; private readonly maxForce; private readonly capacity; private readonly holds; private joint; constructor(world: PhysicsWorld, body: number, config?: CarryableConfig); get held(): boolean; get owners(): number; private mass; speedMultiplier(): number; /** Add an owner grabbing at a hold point; the first owner creates the follow constraint. */ grab(ownerId: number, x: number, y: number, z: number): void; setHoldPoint(ownerId: number, x: number, y: number, z: number): void; release(ownerId: number): void; /** Recompute the follow point (average of live hold points) and drive the constraint. */ update(): void; drop(): void; throw(vx: number, vy: number, vz: number): void; }