import type { Vec2, Rect } from '../core/types';
export interface CameraShake {
    intensity: number;
    duration: number;
    elapsed: number;
    decay: boolean;
}
export declare class Camera2D {
    position: Vec2;
    zoom: number;
    rotation: number;
    private _viewportWidth;
    private _viewportHeight;
    private _target;
    private _smoothing;
    private _deadzone;
    private _bounds;
    private _shake;
    private _shakeOffset;
    constructor(viewportWidth: number, viewportHeight: number);
    get viewportWidth(): number;
    get viewportHeight(): number;
    get worldBounds(): Rect;
    follow(target: Vec2, smoothing?: number, deadzone?: Vec2): void;
    unfollow(): void;
    /** Set world boundaries the camera cannot exceed. */
    setBounds(bounds: Rect | null): void;
    shake(intensity: number, duration: number, decay?: boolean): void;
    /** World position → screen position */
    worldToScreen(world: Vec2): Vec2;
    /** Screen position → world position */
    screenToWorld(screen: Vec2): Vec2;
    /** Check if a world-space rect is visible. */
    isVisible(rect: Rect): boolean;
    resize(width: number, height: number): void;
    update(dt: number): void;
    /** Apply camera transform to a Canvas2D context. */
    applyTransform(ctx: CanvasRenderingContext2D): void;
}
