import type { Vec2, EntityId } from '../core/types';
export interface PlatformerConfig {
    moveSpeed: number;
    jumpForce: number;
    gravity: number;
    maxJumps: number;
    coyoteTime: number;
    jumpBufferTime: number;
    wallSlideSpeed: number;
    wallJumpForce: Vec2;
    dashSpeed: number;
    dashDuration: number;
    groundCheckDistance: number;
    maxFallSpeed: number;
}
export declare const DEFAULT_PLATFORMER_CONFIG: PlatformerConfig;
export interface PlatformerState {
    grounded: boolean;
    jumpsRemaining: number;
    coyoteTimer: number;
    jumpBufferTimer: number;
    wallSliding: boolean;
    dashing: boolean;
    dashTimer: number;
    facingRight: boolean;
    velocity: Vec2;
}
export declare function createPlatformerState(): PlatformerState;
export declare function updatePlatformer(state: PlatformerState, input: {
    moveX: number;
    jump: boolean;
    dash: boolean;
}, config: PlatformerConfig, dt: number): Vec2;
export interface RunAndGunConfig {
    moveSpeed: number;
    jumpForce: number;
    gravity: number;
    fireRate: number;
    bulletSpeed: number;
    bulletDamage: number;
    spreadAngle: number;
    maxAmmo: number;
    reloadTime: number;
    aimDirections: 8 | 4;
    scrollSpeed: number;
}
export declare const DEFAULT_RUN_AND_GUN_CONFIG: RunAndGunConfig;
export type WeaponType = 'pistol' | 'shotgun' | 'machinegun' | 'rocket' | 'laser' | 'flamethrower';
export interface WeaponDef {
    type: WeaponType;
    name: string;
    damage: number;
    fireRate: number;
    bulletSpeed: number;
    spread: number;
    bulletsPerShot: number;
    ammoMax: number;
    reloadTime: number;
    piercing: boolean;
    explosive: boolean;
    explosionRadius: number;
}
export declare const PRESET_WEAPONS: Record<WeaponType, WeaponDef>;
export interface BeatEmUpConfig {
    moveSpeed: number;
    combo: ComboChain[];
    grabRange: number;
    throwDamage: number;
    knockbackForce: number;
    healthMax: number;
    lives: number;
    iFrameDuration: number;
    specialMeterMax: number;
    specialCostPerUse: number;
    laneCount: number;
    laneHeight: number;
}
export interface ComboChain {
    name: string;
    sequence: string[];
    damage: number[];
    timing: number;
}
export declare const DEFAULT_BEAT_EM_UP_CONFIG: BeatEmUpConfig;
export interface BeatEmUpState {
    comboIndex: number;
    comboTimer: number;
    specialMeter: number;
    iFrameTimer: number;
    health: number;
    lives: number;
    currentLane: number;
}
export declare function createBeatEmUpState(config: BeatEmUpConfig): BeatEmUpState;
export interface HackAndSlashConfig {
    moveSpeed: number;
    attackSpeed: number;
    attackRange: number;
    attackArc: number;
    damage: number;
    critChance: number;
    critMultiplier: number;
    dodgeSpeed: number;
    dodgeDuration: number;
    dodgeCooldown: number;
    healthMax: number;
    manaMax: number;
    manaRegen: number;
    xpPerLevel: number;
    xpScaling: number;
    skillSlots: number;
}
export declare const DEFAULT_HACK_AND_SLASH_CONFIG: HackAndSlashConfig;
export interface SkillDef {
    id: string;
    name: string;
    manaCost: number;
    cooldown: number;
    damage: number;
    range: number;
    aoe: boolean;
    aoeRadius: number;
    projectile: boolean;
    projectileSpeed: number;
}
export interface TwinStickConfig {
    moveSpeed: number;
    fireRate: number;
    bulletSpeed: number;
    bulletDamage: number;
    bulletLifetime: number;
    healthMax: number;
    shieldMax: number;
    shieldRegenRate: number;
    shieldRegenDelay: number;
    maxBullets: number;
    spreadAngle: number;
    bulletCount: number;
    homingStrength: number;
}
export declare const DEFAULT_TWIN_STICK_CONFIG: TwinStickConfig;
export interface TwinStickState {
    health: number;
    shield: number;
    shieldRegenTimer: number;
    fireTimer: number;
    score: number;
    killStreak: number;
    multiplier: number;
}
export declare function createTwinStickState(config: TwinStickConfig): TwinStickState;
export interface Projectile {
    id: number;
    x: number;
    y: number;
    vx: number;
    vy: number;
    damage: number;
    lifetime: number;
    ownerId: EntityId;
    piercing: boolean;
    hitEntities: Set<EntityId>;
}
export declare class ProjectilePool {
    private pool;
    private active;
    private nextId;
    spawn(x: number, y: number, vx: number, vy: number, damage: number, lifetime: number, ownerId: EntityId, piercing?: boolean): Projectile;
    update(dt: number): void;
    getActive(): readonly Projectile[];
    remove(id: number): void;
    clear(): void;
}
