import type { IEventContainer } from "../collection/EventContainer";
import type { Camera } from "../script/render/Camera";
import type { CameraInfo } from "./CameraInfo";
import type { ReadonlyColor } from "./ReadonlyColor";
/**
 * The container that has the camera currently in use for rendering.
 *
 * you can use Unsafe API by casting this to `CameraContainer`
 */
export interface IReadonlyCameraContainer {
    /**
     * get current render camera
     */
    get camera(): Camera | null;
}
/**
 * schedule camera by priority to be rendered
 * do not drive this class
 */
export declare class CameraContainer {
    private _currentCameraInfo;
    private readonly _cameraInfoMap;
    private readonly _cameraQueue;
    private readonly _onChangeBackgroundColor;
    private readonly _onCameraChangedEvent;
    /**
     * get current render camera
     */
    get camera(): Camera | null;
    /**
     * get current camera priority
     *
     * This is the API used to make wrapper of three.js Camera
     * There is no use unless you use raw three.js objects that are not managed by the engine
     */
    get currentCameraPriority(): number;
    /**
     * add new camera to camera container
     * @param camera
     * @param info
     *
     * This is the API used to make wrapper of three.js Camera
     * There is no use unless you use raw three.js objects that are not managed by the engine
     */
    addCamera(camera: Camera, info: CameraInfo): void;
    /**
     * remove camera from camera container
     * @param camera
     *
     * This is the API used to make wrapper of three.js Camera
     * There is no use unless you use raw three.js objects that are not managed by the engine
     */
    removeCamera(camera: Camera): void;
    /**
     * change camera priority
     * @param camera
     * @param priority
     *
     * This is the API used to make wrapper of three.js Camera
     * There is no use unless you use raw three.js objects that are not managed by the engine
     */
    changeCameraPriority(camera: Camera, priority: number): void;
    /**
     * change camera background color
     * @param camera
     * @param color
     *
     * This is the API used to make wrapper of three.js Camera
     * There is no use unless you use raw three.js objects that are not managed by the engine
     */
    changeCameraBackgroundColor(camera: Camera, color: null | ReadonlyColor | THREE.Texture): void;
    private setCamera;
    get onCameraChanged(): IEventContainer<(camera: Camera) => void>;
}
