/**
 * Building - Base building class with type hierarchy and constructing-form support
 * Extended from Entity with building-specific properties and construction mechanics
 */
import type { ArmorType } from "./core.js";
import { Entity } from "./entity.js";
/**
 * Building type system
 */
export type BuildingType = "base" | "extractor" | "supply" | "production" | "tech" | "special" | "constructing-unit" | "merc-outpost" | "ultimate";
/**
 * Base Building class for all structures
 * Usage: new Building("Name", (building) => { building.buildingType = "production"; }, import.meta.filename)
 */
export declare abstract class Building extends Entity {
    get type(): string;
    abstract get buildingType(): BuildingType;
    buildTime: number;
    get hpInitial(): number | undefined;
    providesBiomass?: number;
    gathersFlux?: number;
    gathersRichFlux?: number;
    creates?: string[];
    unlocks?: string[];
    produces?: string[];
    get subtype(): string;
    armorType: ArmorType;
    speed: number;
    vision: number;
    armor: number;
    toJSON(): Record<string, any>;
}
/**
 * Base Building - Main faction base/headquarters
 * Usage: new BaseBuilding("Root Colony", (base) => { base.tier = "T1"; })
 */
export declare abstract class BaseBuilding extends Building {
    constructor();
    get buildingType(): BuildingType;
    get subtype(): string;
}
/**
 * Extractor Building - Resource gathering structures
 * Universal base class for all faction extractors with common defaults
 */
export declare abstract class ExtractorBuilding extends Building {
    tier: string;
    buildTime: number;
    buildCount: number;
    gathersHexite: number;
    gathersEmptyHexite: number;
    constructor();
    get buildingType(): BuildingType;
    get subtype(): string;
}
/**
 * Supply Building - Provides supply/housing
 * Usage: new SupplyBuilding("Cultivator", (supply) => { supply.providesSupply = 10; })
 */
export declare abstract class SupplyBuilding extends Building {
    providesSupply?: number;
    constructor();
    get buildingType(): BuildingType;
    get subtype(): string;
    toJSON(): Record<string, any>;
}
/**
 * Production Building - Creates units
 * Usage: new ProductionBuilding("Incubator", (prod) => { prod.tier = "T1"; })
 */
export declare abstract class ProductionBuilding extends Building {
    constructor();
    get buildingType(): BuildingType;
    get subtype(): string;
}
/**
 * Tech Building - Research and upgrades
 * Usage: new TechBuilding("Augmentation Pool", (tech) => { tech.tier = "T2"; })
 */
export declare abstract class TechBuilding extends Building {
    researches?: string[];
    constructor();
    get buildingType(): BuildingType;
    get subtype(): string;
    toJSON(): Record<string, any>;
}
/**
 * Special Building - Unique faction abilities
 * Usage: new SpecialBuilding("Skrelling Nest", (special) => { special.tier = "T2"; })
 */
export declare abstract class SpecialBuilding extends Building {
    constructor();
    get buildingType(): BuildingType;
    get subtype(): string;
}
/**
 * Constructing-Form Building - Buildings that transform into units
 * Used for Terror Tank, Dreadnought, and similar units that have building phases
 * Usage: new ConstructingFormBuilding("Terror Tank (Constructing)", (form) => { form.transformsInto = "terror-tank"; })
 */
export declare abstract class ConstructingFormBuilding extends Building {
    transformsInto?: string;
    constructionTime?: number;
    constructor();
    get buildingType(): BuildingType;
    get subtype(): string;
    toJSON(): Record<string, any>;
}
/**
 * Mercenary Outpost Building - Neutral mercenary structures
 * Usage: new MercenaryOutpostBuilding("Mercenary Outpost", (merc) => { merc.tier = "T1"; })
 */
export declare abstract class MercenaryOutpostBuilding extends Building {
    constructor();
    get buildingType(): BuildingType;
    get subtype(): string;
}
/**
 * Ultimate Building - End-game superstructures
 * Usage: new UltimateBuilding("Supreme Command", (ultimate) => { ultimate.tier = "T4"; })
 */
export declare abstract class UltimateBuilding extends Building {
    constructor();
    get buildingType(): BuildingType;
    get subtype(): string;
}
/**
 * AnyBuilding Union Type - All concrete building implementations
 * Use this instead of any for type safety
 */
export type AnyBuilding = BaseBuilding | ExtractorBuilding | SupplyBuilding | ProductionBuilding | TechBuilding | SpecialBuilding | ConstructingFormBuilding | MercenaryOutpostBuilding | UltimateBuilding;
//# sourceMappingURL=building.d.ts.map