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;