import { type AccumulatorMeterState, type MeterMode, type MeterTier } from "./accumulatorMeter.js"; export interface EventMeterConfig { max: number; mode?: MeterMode; decayPerSecond?: number; decayDelayMs?: number; tiers?: readonly MeterTier[]; gains: Record; resets?: readonly string[]; } export interface EventMeterFeedResult { tag: string; reset: boolean; amount: number; value: number; fraction: number; fired: boolean; ready: boolean; overflow: number; tier: string | null; tierChanged: boolean; } /** Event meter persistence uses the underlying accumulator's complete state. */ export type EventMeterState = AccumulatorMeterState; export interface EventMeter { /** Detached value, hold latch, and decay-delay timer. */ state(): EventMeterState; /** Restore using the caller's existing event and decay configuration. */ restore(next: EventMeterState): void; value(): number; fraction(): number; tier(): string | null; ready(): boolean; feed(tag: string, scale?: number): EventMeterFeedResult; consume(): boolean; drain(amount: number): void; reset(): void; /** Advance decay and its delay; pass false to pause both while a source is visible. */ tick(dtSeconds: number, decayEnabled?: boolean): void; } /** * A heat/hype gauge that rises as tagged events land and cools between them, firing when it fills or breaks — the streak/overdrive meter shooters and fighters hand-roll. * * @capability event-meter a heat/streak/alert gauge (wanted level, rage, combo) that builds from repeated events and cools down over time */ export declare function createEventMeter(config: EventMeterConfig): EventMeter;