import type { Vec2, Color } from '../core/types'; export declare class SeededRandom { private s; constructor(seed?: number); /** Returns [0, 1). */ next(): number; /** Returns integer in [min, max] (inclusive). */ int(min: number, max: number): number; /** Returns float in [min, max). */ float(min: number, max: number): number; /** Returns true with given probability (0-1). */ chance(probability: number): boolean; /** Pick a random element from an array. */ pick(arr: readonly T[]): T; /** Shuffle array in-place (Fisher-Yates). */ shuffle(arr: T[]): T[]; /** Weighted random pick. Returns index. */ weighted(weights: number[]): number; /** Random color. */ color(alpha?: number): Color; /** Random unit vector. */ unitVec2(): Vec2; /** Random point inside a circle. */ insideCircle(radius: number): Vec2; } export declare class PerlinNoise { private perm; constructor(seed?: number); /** Get noise value at (x, y) → [-1, 1]. */ noise2D(x: number, y: number): number; /** Fractal Brownian Motion (layered noise). */ fbm(x: number, y: number, octaves?: number, lacunarity?: number, gain?: number): number; } export interface WaveEntry { type: string; count: number; delay: number; spawnInterval: number; } export interface WaveConfig { baseEnemyCount: number; countGrowth: number; typeProbabilities: { type: string; weight: number; minWave: number; }[]; groupSize: [number, number]; groupDelay: [number, number]; spawnInterval: [number, number]; } export declare class WaveGenerator { private rng; constructor(seed?: number); generateWave(waveNumber: number, config: WaveConfig): WaveEntry[]; } export interface LootDrop { id: string; weight: number; /** Drop quantity range. */ quantity: [number, number]; /** Minimum level to be eligible. */ minLevel?: number; /** Maximum number of times this can drop per roll session. */ maxPerRoll?: number; } export declare class LootTable { private rng; private drops; constructor(drops: LootDrop[], seed?: number); /** Roll N items from the table. */ roll(count: number, level?: number): { id: string; quantity: number; }[]; /** Simple yes/no chance to drop each item independently. */ rollEach(level?: number): { id: string; quantity: number; }[]; } export declare class ProceduralSprite { private rng; constructor(seed?: number); /** * Generate a symmetrical pixel art sprite as ImageData. * Good for enemies, ships, items. */ generate(width: number, height: number, palette: Color[], symmetry?: 'none' | 'horizontal' | 'vertical' | 'both'): ImageData; }