export type RingPoint = [number, number]; export interface RingPhase { startTime: number; shrinkDuration: number; fromRadius: number; toRadius: number; damagePerSecond: number; center?: RingPoint; } export interface RingConfig { center: RingPoint; phases: readonly RingPhase[]; } export interface RingSample { center: RingPoint; radius: number; damagePerSecond: number; phase: number; shrinking: boolean; } export interface RingHit { id: string; damage: number; distanceOutside: number; } export interface Ring { at(time: number): RingSample; isOutside(time: number, position: RingPoint): boolean; distanceOutside(time: number, position: RingPoint): number; damageOutside(time: number, dt: number, positions: Iterable<{ id: string; position: RingPoint; }>): RingHit[]; } export declare function ringSampleAt(config: RingConfig, time: number): RingSample; export declare function createRing(config: RingConfig): Ring;