export interface ThreatTableConfig { decayPerSecond?: number; max?: number; forgetBelow?: number; } export interface ThreatEntry { sourceId: string; threat: number; } export interface HighestThreatOptions { current?: string | null; stickiness?: number; } /** Plain JSON state of a {@link ThreatTable}; `entries` keeps insertion order, which breaks ties in `highest`. */ export interface ThreatTableState { entries: [sourceId: string, threat: number][]; forcedSource: string | null; forcedRemaining: number; } export interface ThreatTable { add(sourceId: string, amount: number): number; set(sourceId: string, amount: number): void; threatOf(sourceId: string): number; decay(dt: number): void; highest(options?: HighestThreatOptions): string | null; ranked(): ThreatEntry[]; taunt(sourceId: string, durationSeconds: number): void; forcedTarget(): string | null; remove(sourceId: string): void; clear(): void; size(): number; snapshot(): ThreatTableState; restore(next: ThreatTableState): void; } export declare function createThreatTable(config?: ThreatTableConfig): ThreatTable;