import { Bounds } from "./Math";
import { vec3 } from "./Math/Vector";
export interface IRegionManager {
    /**
     * Updates the supplied components regions
     *
     * @param {string} componentId
     * @returns {string[]} the new regions
     */
    updateComponentRegions(componentId: string): string[];
    /**
     * Gets all components of a region
     *
     * @param {string} regionName
     * @returns
     */
    getRegionComponents(regionName: string): string[];
    /**
     * Gets the region identifier for a position
     *
     * @param {Float3} position
     * @returns
     */
    getRegionFromPosition(position: vec3): string;
    /**
     * Gets a list of regions which contain the supplied component
     *
     * @param {string} componentId
     * @returns {string[]}
     */
    getComponentRegions(componentId: string): string[];
    /**
     * Gets a unique list of components which share a region with one of the supplied components
     *
     * @param {string[]} componentIds
     * @param {number} [range=0]
     * @param {("steps" | "distance")} [rangeType="steps"]
     * @returns {string[]}
     */
    getNearbyComponents(componentIds: string[], range?: number, rangeType?: "steps" | "distance"): string[];
    /**
     * Gets a unique list of components inside of the supplied regions
     *
     * @param {string[]} regions
     * @returns {Set<string>}
     */
    getComponentsOfRegions(regions: string[]): Set<string>;
    /**
     * Get the region ids of all regions with match the supplied bounds
     *
     * @param {Bounds} worldBounds
     * @returns {string[]}
     */
    getRegionsFromBounds(worldBounds: Bounds): string[];
    /**
     * Removes a component from all regions
     *
     * @param {string} componentId
     */
    removeComponent(componentId: string): void;
}
