import type { EntityId } from '../core/types';
export interface TowerDefenseConfig {
    tileSize: number;
    gridWidth: number;
    gridHeight: number;
    startGold: number;
    startLives: number;
    waveCount: number;
    waveInterval: number;
    interWaveDelay: number;
    sellRefundRate: number;
    maxTowersPerType: number;
    speedMultipliers: number[];
}
export declare const DEFAULT_TOWER_DEFENSE_CONFIG: TowerDefenseConfig;
export type TowerTargeting = 'first' | 'last' | 'strongest' | 'weakest' | 'closest';
export interface TowerDef {
    id: string;
    name: string;
    cost: number;
    range: number;
    damage: number;
    attackSpeed: number;
    projectileSpeed: number;
    aoe: boolean;
    aoeRadius: number;
    slowPercent: number;
    slowDuration: number;
    targeting: TowerTargeting;
    upgradePath: string[];
}
export interface EnemyWaveDef {
    waveNumber: number;
    enemies: Array<{
        enemyId: string;
        count: number;
        delay: number;
        pathIndex: number;
    }>;
    reward: number;
}
export interface TDEnemyDef {
    id: string;
    name: string;
    health: number;
    speed: number;
    armor: number;
    reward: number;
    flying: boolean;
    special: 'none' | 'heal' | 'shield' | 'split' | 'boss';
}
export interface TDState {
    gold: number;
    lives: number;
    wave: number;
    score: number;
    towers: Array<{
        defId: string;
        gridX: number;
        gridY: number;
        upgradeLevel: number;
    }>;
    inWave: boolean;
    speed: number;
}
export declare function createTDState(config: TowerDefenseConfig): TDState;
export interface RTSConfig {
    mapWidth: number;
    mapHeight: number;
    maxPopulation: number;
    startResources: RTSResources;
    buildSpeed: number;
    gatherRate: number;
    fogOfWar: boolean;
    maxSelectCount: number;
    controlGroups: number;
}
export interface RTSResources {
    gold: number;
    wood: number;
    food: number;
    stone: number;
}
export declare const DEFAULT_RTS_CONFIG: RTSConfig;
export type UnitCommand = 'move' | 'attack' | 'patrol' | 'hold' | 'gather' | 'build' | 'repair' | 'stop';
export interface RTSUnitDef {
    id: string;
    name: string;
    health: number;
    damage: number;
    attackSpeed: number;
    range: number;
    moveSpeed: number;
    armor: number;
    cost: RTSResources;
    buildTime: number;
    populationCost: number;
    canGather: boolean;
    canBuild: boolean;
    abilities: string[];
}
export interface RTSBuildingDef {
    id: string;
    name: string;
    health: number;
    width: number;
    height: number;
    cost: RTSResources;
    buildTime: number;
    produces: string[];
    researches: string[];
    providesPopulation: number;
    requiresBuilding: string | null;
}
export interface RTSState {
    resources: RTSResources;
    population: number;
    maxPopulation: number;
    selectedUnits: EntityId[];
    controlGroups: Map<number, EntityId[]>;
}
export declare function createRTSState(config: RTSConfig): RTSState;
export interface TacticsConfig {
    gridWidth: number;
    gridHeight: number;
    maxUnitsPerSide: number;
    movementType: 'manhattan' | 'diagonal';
    heightLevels: number;
    heightAdvantageBonus: number;
    coverBonus: number;
    flanking: boolean;
    flankingBonus: number;
    criticalHitChance: number;
    initiativeSystem: boolean;
    undoMoves: boolean;
    turnTimeLimit: number;
}
export declare const DEFAULT_TACTICS_CONFIG: TacticsConfig;
export interface TacticsUnitDef {
    id: string;
    name: string;
    classType: string;
    health: number;
    moveRange: number;
    attackRange: number;
    damage: number;
    defense: number;
    initiative: number;
    skills: TacticsSkillDef[];
}
export interface TacticsSkillDef {
    id: string;
    name: string;
    range: number;
    aoe: number;
    damage: number;
    cooldown: number;
    mpCost: number;
    effect: string;
}
export type TacticsTile = 'floor' | 'wall' | 'water' | 'cover_low' | 'cover_high' | 'stairs' | 'pit';
export interface TacticsTurnOrder {
    units: Array<{
        entityId: EntityId;
        initiative: number;
        acted: boolean;
    }>;
    currentIndex: number;
    turnNumber: number;
}
export declare function createTurnOrder(units: Array<{
    entityId: EntityId;
    initiative: number;
}>): TacticsTurnOrder;
export declare function nextUnit(order: TacticsTurnOrder): EntityId | null;
export interface CityBuilderConfig {
    gridWidth: number;
    gridHeight: number;
    startMoney: number;
    taxRate: number;
    populationGrowthRate: number;
    demandCycle: number;
    buildingCategories: string[];
    happinessFactors: string[];
    pollutionDecay: number;
}
export declare const DEFAULT_CITY_BUILDER_CONFIG: CityBuilderConfig;
export interface CityBuildingDef {
    id: string;
    name: string;
    category: string;
    cost: number;
    width: number;
    height: number;
    income: number;
    upkeep: number;
    populationCapacity: number;
    jobCapacity: number;
    happiness: number;
    pollution: number;
    powerRequired: number;
    waterRequired: number;
    requirements: string[];
}
export interface CityState {
    money: number;
    population: number;
    happiness: number;
    demand: {
        residential: number;
        commercial: number;
        industrial: number;
    };
    buildings: Array<{
        defId: string;
        gridX: number;
        gridY: number;
    }>;
    totalIncome: number;
    totalUpkeep: number;
}
export declare function createCityState(config: CityBuilderConfig): CityState;
export declare function updateCity(state: CityState, config: CityBuilderConfig, dt: number): void;
export interface IdleConfig {
    baseClickValue: number;
    offlineProgressRate: number;
    maxOfflineHours: number;
    prestigeThreshold: number;
    prestigeMultiplier: number;
    autoSaveInterval: number;
    notationStyle: 'standard' | 'scientific' | 'engineering';
}
export declare const DEFAULT_IDLE_CONFIG: IdleConfig;
export interface IdleGeneratorDef {
    id: string;
    name: string;
    baseCost: number;
    costMultiplier: number;
    baseOutput: number;
    unlockAt: number;
}
export interface IdleUpgradeDef {
    id: string;
    name: string;
    description: string;
    cost: number;
    targetGenerator: string;
    multiplier: number;
    purchased: boolean;
}
export interface IdleState {
    currency: number;
    totalEarned: number;
    clickValue: number;
    generators: Map<string, number>;
    upgrades: Set<string>;
    prestigeCount: number;
    prestigeMultiplier: number;
    lastSave: number;
}
export declare function createIdleState(): IdleState;
export declare function getGeneratorCost(def: IdleGeneratorDef, owned: number): number;
export declare function getIdleIncome(state: IdleState, defs: IdleGeneratorDef[]): number;
export declare function formatNumber(n: number, style?: IdleConfig['notationStyle']): string;
