import RAPIER from '@dimforge/rapier3d-compat'; import { Component } from '@certe/atmos-core'; import type { GameObject } from '@certe/atmos-core'; import type { PhysicsWorld } from './physics-world.js'; export interface JointOptions { connectedObject?: GameObject; anchor?: { x: number; y: number; z: number; }; connectedAnchor?: { x: number; y: number; z: number; }; autoConfigureConnectedAnchor?: boolean; } export declare abstract class Joint extends Component { joint: RAPIER.ImpulseJoint | null; protected _connectedObject: GameObject | null; protected _world: PhysicsWorld | null; private readonly _anchor; private readonly _connectedAnchor; private _autoConfigureConnectedAnchor; get anchor(): Float32Array; set anchor(v: Float32Array); get connectedAnchor(): Float32Array; set connectedAnchor(v: Float32Array); get autoConfigureConnectedAnchor(): boolean; set autoConfigureConnectedAnchor(v: boolean); get connectedObject(): GameObject | null; set connectedObject(value: GameObject | null); init(world: PhysicsWorld, options?: JointOptions): void; protected abstract _createJointData(): RAPIER.JointData; protected _toXYZ(v: Float32Array): { x: number; y: number; z: number; }; protected _tryCreateJoint(): void; /** Destroy current joint and recreate it (used when creation-time params change). */ protected _recreateJoint(): void; /** Recompute auto-configured values (anchor/axis) without recreating the Rapier joint. */ refreshAutoConfig(): void; /** Recreate the joint so auto-configured anchors/axes update after transforms change. */ syncAutoConfig(): void; private _computeConnectedAnchor; protected _removeJoint(): void; onDestroy(): void; } //# sourceMappingURL=joint.d.ts.map