import { Disposable, Listener } from '@vertexvis/utils';
import { KeyBinding } from '../keyBinding';
export interface ViewerWalkModeConfiguration {
    teleportHeightPercentage: number;
    teleportDistancePercentage: number;
    teleportCollisionDistance: number;
    keyboardWalkSpeed: number;
    keyboardPivotDegrees: number;
    keyboardRepeatIntervalMs: number;
}
export type ViewerTeleportMode = 'teleport' | 'teleport-and-align' | 'teleport-toward';
export declare enum ViewerWalkModeOperation {
    'MOVE_DOWN' = "MOVE_DOWN",
    'MOVE_UP' = "MOVE_UP",
    'PIVOT_DOWN' = "PIVOT_DOWN",
    'PIVOT_LEFT' = "PIVOT_LEFT",
    'PIVOT_RIGHT' = "PIVOT_RIGHT",
    'PIVOT_UP' = "PIVOT_UP",
    'WALK_BACKWARD' = "WALK_BACKWARD",
    'WALK_FORWARD' = "WALK_FORWARD",
    'WALK_LEFT' = "WALK_LEFT",
    'WALK_RIGHT' = "WALK_RIGHT"
}
export type ViewerWalkModeKeyBindings = Record<ViewerWalkModeOperation, KeyBinding[]>;
export declare class WalkModeModel {
    private keyBindings;
    private configuration;
    private excludedPredicate?;
    private enabled;
    private teleportMode?;
    private enabledChanged;
    private teleportModeChanged;
    private configurationChanged;
    private keyBindingsChanged;
    setEnabled(enabled: boolean): void;
    setTeleportMode(mode?: ViewerTeleportMode): void;
    setConfiguration(configuration: ViewerWalkModeConfiguration): void;
    addKeyBinding(operation: ViewerWalkModeOperation, keyBinding: KeyBinding): void;
    replaceKeyBinding(operation: ViewerWalkModeOperation, keyBinding: KeyBinding): void;
    setExcludedPredicate(predicate: (el: Element) => boolean): void;
    getEnabled(): boolean;
    getTeleportMode(): ViewerTeleportMode | undefined;
    getTeleportHeightPercentage(): number;
    getKeyboardWalkSpeed(): number;
    getKeyboardPivotDegrees(): number;
    getKeyboardRepeatInterval(): number;
    getConfiguration(): ViewerWalkModeConfiguration;
    getKeyBindings(): ViewerWalkModeKeyBindings;
    operationMatches(operation: ViewerWalkModeOperation, state: Record<string, boolean>): boolean;
    isElementExcluded(el: Element): boolean;
    onEnabledChange(listener: Listener<boolean>): Disposable;
    onTeleportModeChange(listener: Listener<ViewerTeleportMode | undefined>): Disposable;
    onConfigurationChange(listener: Listener<ViewerWalkModeConfiguration>): Disposable;
    onKeyBindingsChange(listener: Listener<ViewerWalkModeKeyBindings>): Disposable;
}
