export interface DashConfig { distance: number; durationMs: number; iframes: { fromMs: number; toMs: number; }; staminaCost: number; staminaMax: number; staminaRegenPerSecond: number; cooldownMs: number; } export interface DashDirection { x: number; z: number; } export type DashRejection = { reason: "no-stamina" | "cooldown" | "dashing"; }; export interface DashBurst { direction: DashDirection; durationMs: number; distance: number; } /** @internal */ export declare function iframeActive(config: DashConfig, elapsedMs: number): boolean; /** @internal */ export declare function dashEase(t: number): number; /** * Compute a dash/dodge burst's displacement over its window, with i-frame timing for dodges. * * @capability dash-move a dash/dodge burst with i-frames and cooldown * @internal */ export declare function dashDisplacement(config: DashConfig, dir: DashDirection, elapsedMs: number): [number, number, number]; /** @internal */ export declare function dashOffset(config: DashConfig, dir: DashDirection, elapsedMs: number): [number, number, number]; /** @internal */ export declare function dashFrameDelta(config: DashConfig, dir: DashDirection, previousElapsedMs: number, elapsedMs: number): [number, number, number]; export interface DashState { tryDash(direction: DashDirection, nowMs: number): DashRejection | DashBurst; tick(dtSeconds: number, nowMs: number): void; stamina(): number; staminaFraction(): number; isDashing(nowMs: number): boolean; isInvulnerable(nowMs: number): boolean; displacement(nowMs: number): [number, number, number]; offset(nowMs: number): [number, number, number]; } /** @internal */ export declare function createDashState(config: DashConfig): DashState;