import { Vector3, TargetCamera, Camera } from '../loader/babylonjs-import';
/**
 * Is the snapshot of a camera state. The snapshot can be used to check if the camera state
 * (rotation, position etc.) has changed since the snapshot was created {@link checkIsChanged}. The snapshot
 * can also be updated {@link refresh} so it matches the {@link Camera} from which it was created.
 */
export interface TwinfinityCameraStateSnapshot {
    /**
     * {@link Camera} to which the state snapshot is linked.
     */
    readonly camera: Camera;
    /**
     * `true` if camera has changed state since last time {@link refresh} was called, otherwise `false`
     */
    readonly isChanged: boolean;
    /**
     * Timestamp when last camera change check was true.
     */
    readonly lastChangeTimestamp: number;
    /**
     * Timestamp when camera state was last checked.
     */
    readonly lastCheckTimestamp: number;
    /**
     * Resets the camera state so {@link isChanged} is set to `false` (ie we refresh the snapshot so it is equal to
     * the state of {@link camera}).
     * @returns `true` if {@link isChanged} was `true` when call was made. Otherwise `false`
     */
    refresh(): boolean;
    /**
     * `true` if camera has changed state since last time {@link refresh} or {@link checkIsChanged} was called, otherwise `false`
     * @param checkOnlyDimensions A flag indicating if to check only if the camera dimensions changed, if set to true only width/height of the camera is checked, otherwise translation and rotation of the camera is checked too
     */
    checkIsChanged(checkOnlyDimensions?: boolean): boolean;
}
export declare class TwinfinityDefaultCameraStateSnapshot implements TwinfinityCameraStateSnapshot {
    readonly camera: Camera;
    private readonly _position;
    private _minZ;
    private _maxZ;
    private _mode;
    private _fov;
    private _orthoBottom;
    private _orthoTop;
    private _orthoLeft;
    private _orthoRight;
    private _canvasClientRect;
    private _viewMatrix;
    private _projectionMatrix;
    private _engineHardwareScaling;
    private _lastChangeTimestamp;
    private _lastCheckTimestamp;
    constructor(camera: Camera);
    /**
     * Checks if the camera has changed since the last time _copyCameraStateToSelf(this.camera) was called. If checkOnlyDimensions is true,
     * only the camera dimensions are checked for differences. If checkOnlyDimensions is false, camera dimensions, scale, rotation and translation is checked.
     * @param checkOnlyDimensions Specifies whether to only check camera dimensions (width, height, stuff like that) or to check camera dimensions in addition to everything else
     * @returns A boolean which is true if the current camera state is different from when _copyCameraStateToSelf(this.camera) was last called
     */
    checkIsChanged(checkOnlyDimensions?: boolean): boolean;
    get isChanged(): boolean;
    /**
     * @returns timestamp in miliseconds of when the last refresh that returned true was done.
     */
    get lastChangeTimestamp(): number;
    /**
     * @returns timestamp in miliseconds of when the last refresh was done.
     */
    get lastCheckTimestamp(): number;
    refresh(): boolean;
    protected _copyCameraStateToSelf(camera: Camera): void;
}
export declare class TwinfinityTargetCameraStateSnapshot extends TwinfinityDefaultCameraStateSnapshot {
    private readonly _targetCamera;
    readonly _rotation: Vector3;
    readonly _target: Vector3;
    constructor(_targetCamera: TargetCamera);
    get isChanged(): boolean;
    protected _copyCameraStateToSelf(state: TargetCamera): void;
}
//# sourceMappingURL=TwinfinityCameraStateSnapshot.d.ts.map