export interface Vec3 { x: number; y: number; z: number; } export interface PositionSample extends Vec3 { t: number; } export interface PositionHistoryConfig { historyMs: number; maxSamples?: number; } /** @internal */ export declare class PositionHistory { private readonly historyMs; private readonly maxSamples; private readonly tracks; constructor(config: PositionHistoryConfig); record(entityId: string, t: number, position: Vec3): void; private trim; entities(): string[]; samples(entityId: string): readonly PositionSample[]; sampleAt(entityId: string, t: number): Vec3 | null; prune(now: number): void; forget(entityId: string): void; } /** @internal */ export declare function createPositionHistory(config: PositionHistoryConfig): PositionHistory; /** @internal */ export declare function rewindTimestamp(nowMs: number, rttMs: number, interpDelayMs: number): number; export interface HitscanRay { origin: Vec3; direction: Vec3; maxDistance?: number; } export interface HitscanTarget { entityId: string; radius: number; } export interface HitscanHit { entityId: string; distance: number; point: Vec3; } /** @internal */ export declare function raySphereDistance(ray: HitscanRay, center: Vec3, radius: number): number | null; /** @internal */ export declare function resolveHitscan(history: PositionHistory, targets: readonly HitscanTarget[], ray: HitscanRay, atMs: number): HitscanHit | null;