import type { Vec2 } from '../core/types';
export interface TopDownRacingConfig {
    maxSpeed: number;
    acceleration: number;
    braking: number;
    friction: number;
    turnSpeed: number;
    driftFactor: number;
    boostMultiplier: number;
    boostDuration: number;
    lapCount: number;
    maxPlayers: number;
    aiCount: number;
    collisionBounce: number;
}
export declare const DEFAULT_TOP_DOWN_RACING_CONFIG: TopDownRacingConfig;
export interface RacerState {
    position: Vec2;
    angle: number;
    speed: number;
    lateralSpeed: number;
    lap: number;
    checkpoint: number;
    boostTimer: number;
    finished: boolean;
    raceTime: number;
}
export declare function createRacerState(startPos: Vec2, startAngle: number): RacerState;
export declare function updateRacer(state: RacerState, input: {
    throttle: number;
    steer: number;
    brake: boolean;
    boost: boolean;
}, config: TopDownRacingConfig, dt: number): void;
export interface TrackCheckpoint {
    x: number;
    y: number;
    width: number;
    angle: number;
}
export interface SideScrollerRacingConfig {
    scrollSpeed: number;
    laneCount: number;
    laneWidth: number;
    playerSpeed: number;
    obstacleFrequency: number;
    coinFrequency: number;
    powerUpFrequency: number;
    difficultyScale: number;
    maxLives: number;
    iFrameDuration: number;
}
export declare const DEFAULT_SIDE_SCROLLER_RACING_CONFIG: SideScrollerRacingConfig;
export type SportType = 'soccer' | 'basketball' | 'hockey' | 'volleyball';
export interface SportsConfig {
    sport: SportType;
    fieldWidth: number;
    fieldHeight: number;
    teamSize: number;
    matchDuration: number;
    halves: number;
    ballSpeed: number;
    playerSpeed: number;
    sprintMultiplier: number;
    staminaDrain: number;
    staminaRegen: number;
    goalWidth: number;
    shotPower: number;
    passAccuracy: number;
    aiDifficulty: number;
}
export declare const DEFAULT_SOCCER_CONFIG: SportsConfig;
export declare const DEFAULT_BASKETBALL_CONFIG: SportsConfig;
export interface SportsState {
    score: [number, number];
    currentHalf: number;
    timeRemaining: number;
    possession: 0 | 1;
    ballPosition: Vec2;
    ballVelocity: Vec2;
}
export declare function createSportsState(config: SportsConfig): SportsState;
export interface GolfConfig {
    maxPower: number;
    ballFriction: number;
    ballRestitution: number;
    windEnabled: boolean;
    maxWind: number;
    parPerHole: number;
    holes: number;
    strokeLimit: number;
}
export declare const DEFAULT_GOLF_CONFIG: GolfConfig;
export interface BilliardsConfig {
    tableWidth: number;
    tableHeight: number;
    ballRadius: number;
    friction: number;
    restitution: number;
    maxPower: number;
    pocketRadius: number;
    gameType: '8ball' | '9ball' | 'snooker';
}
export declare const DEFAULT_BILLIARDS_CONFIG: BilliardsConfig;
export interface BilliardsBall {
    id: number;
    x: number;
    y: number;
    vx: number;
    vy: number;
    pocketed: boolean;
    color: string;
    stripe: boolean;
}
export declare function updateBilliardsBalls(balls: BilliardsBall[], config: BilliardsConfig, dt: number): void;
export interface RhythmConfig {
    laneCount: number;
    noteSpeed: number;
    hitWindowPerfect: number;
    hitWindowGreat: number;
    hitWindowGood: number;
    scorePerfect: number;
    scoreGreat: number;
    scoreGood: number;
    comboMultiplierStep: number;
    maxMultiplier: number;
    healthDrain: number;
    healthRegen: number;
    healthMax: number;
}
export declare const DEFAULT_RHYTHM_CONFIG: RhythmConfig;
export type NoteType = 'tap' | 'hold' | 'slide' | 'flick';
export interface RhythmNote {
    time: number;
    lane: number;
    type: NoteType;
    duration?: number;
    hit: boolean;
    hitResult: 'perfect' | 'great' | 'good' | 'miss' | null;
}
export interface RhythmChart {
    songId: string;
    bpm: number;
    offset: number;
    difficulty: number;
    notes: RhythmNote[];
}
export interface RhythmState {
    score: number;
    combo: number;
    maxCombo: number;
    multiplier: number;
    health: number;
    perfects: number;
    greats: number;
    goods: number;
    misses: number;
    songTime: number;
}
export declare function createRhythmState(config: RhythmConfig): RhythmState;
export declare function judgeHit(noteTime: number, hitTime: number, config: RhythmConfig): 'perfect' | 'great' | 'good' | 'miss';
export declare function applyHitResult(state: RhythmState, result: 'perfect' | 'great' | 'good' | 'miss', config: RhythmConfig): void;
