import { NgZone } from '@angular/core'; import { KeyboardAction } from '../../models/ac-keyboard-action.enum'; import { CesiumService } from '../cesium/cesium.service'; export declare type KeyboardControlActionFn = (cesiumService: CesiumService, params: any, event: KeyboardEvent) => boolean | void; export declare type KeyboardControlValidationFn = (cesiumService: CesiumService, params: any, event: KeyboardEvent) => boolean; export declare type KeyboardControlDoneFn = (cesiumService: CesiumService, event: KeyboardEvent) => boolean; export interface KeyboardControlParams { action: KeyboardAction | KeyboardControlActionFn; validation?: KeyboardControlValidationFn; params?: { [paramName: string]: any; }; done?: KeyboardControlDoneFn; } export interface KeyboardControlDefinition { [keyboardCharCode: string]: KeyboardControlParams; } /** * Service that manages keyboard keys and execute actions per request. * Inject the keyboard control service into any layer, under your `ac-map` component, * And defined you keyboard handlers using `setKeyboardControls`. * * Simple Example * ```typescript * Component({ * selector: 'keyboard-control-layer', * template: '', * }) * export class KeyboardControlLayerComponent implements OnInit, OnDestroy { * constructor(private keyboardControlService: KeyboardControlService) {} * * ngOnInit() { * this.keyboardControlService.setKeyboardControls({ * W: { action: KeyboardAction.CAMERA_FORWARD }, * S: { action: KeyboardAction.CAMERA_BACKWARD }, * D: { action: KeyboardAction.CAMERA_RIGHT }, * A: { action: KeyboardAction.CAMERA_LEFT }, * }); * } * * ngOnDestroy() { * this.keyboardControlService.removeKeyboardControls(); * } * } * ``` * * Advanced Example * ```typescript * Component({ * selector: 'keyboard-control-layer', * template: '', * }) * export class KeyboardControlLayerComponent implements OnInit, OnDestroy { * constructor(private keyboardControlService: KeyboardControlService) {} * * private myCustomValue = 10; * * ngOnInit() { * this.keyboardControlService.setKeyboardControls({ * W: { * action: KeyboardAction.CAMERA_FORWARD, * validate: (camera, scene, params, key) => { * // Replace `checkCamera` you with your validation logic * if (checkCamera(camera) || params.customParams === true) { * return true; * } * * return false; * }, * params: () => { * return { * myValue: this.myCustomValue, * }; * }, * } * }); * } * * ngOnDestroy() { * this.keyboardControlService.removeKeyboardControls(); * } * } * ``` * Predefined keyboard actions: * + `KeyboardAction.CAMERA_FORWARD` - Moves the camera forward, accepts a numeric parameter named `moveRate` that controls * the factor of movement, according to the camera height. * + `KeyboardAction.CAMERA_BACKWARD` - Moves the camera backward, accepts a numeric parameter named `moveRate` that controls * the factor of movement, according to the camera height. * + `KeyboardAction.CAMERA_UP` - Moves the camera up, accepts a numeric parameter named `moveRate` that controls * the factor of movement, according to the camera height. * + `KeyboardAction.CAMERA_DOWN` - Moves the camera down, accepts a numeric parameter named `moveRate` that controls * the factor of movement, according to the camera height. * + `KeyboardAction.CAMERA_RIGHT` - Moves the camera right, accepts a numeric parameter named `moveRate` that controls * the factor of movement, according to the camera height. * + `KeyboardAction.CAMERA_LEFT` - Moves the camera left, accepts a numeric parameter named `moveRate` that controls * the factor of movement, according to the camera height. * + `KeyboardAction.CAMERA_LOOK_RIGHT` - Changes the camera to look to the right, accepts a numeric parameter named `lookFactor` that * controls the factor of looking, according to the camera current position. * + `KeyboardAction.CAMERA_LOOK_LEFT` - Changes the camera to look to the left, accepts a numeric parameter named `lookFactor` that * controls the factor of looking, according to the camera current position. * + `KeyboardAction.CAMERA_LOOK_UP` - Changes the camera to look up, accepts a numeric parameter named `lookFactor` that controls * the factor of looking, according to the camera current position. * + `KeyboardAction.CAMERA_LOOK_DOWN` - Changes the camera to look down, accepts a numeric parameter named `lookFactor` that controls * the factor of looking, according to the camera current position. * + `KeyboardAction.CAMERA_TWIST_RIGHT` - Twists the camera to the right, accepts a numeric parameter named `amount` that controls * the twist amount * + `KeyboardAction.CAMERA_TWIST_LEFT` - Twists the camera to the left, accepts a numeric parameter named `amount` that controls * the twist amount * + `KeyboardAction.CAMERA_ROTATE_RIGHT` - Rotates the camera to the right, accepts a numeric parameter named `angle` that controls * the rotation angle * + `KeyboardAction.CAMERA_ROTATE_LEFT` - Rotates the camera to the left, accepts a numeric parameter named `angle` that controls * the rotation angle * + `KeyboardAction.CAMERA_ROTATE_UP` - Rotates the camera upwards, accepts a numeric parameter named `angle` that controls * the rotation angle * + `KeyboardAction.CAMERA_ROTATE_DOWN` - Rotates the camera downwards, accepts a numeric parameter named `angle` that controls * the rotation angle * + `KeyboardAction.CAMERA_ZOOM_IN` - Zoom in into the current camera center position, accepts a numeric parameter named * `amount` that controls the amount of zoom in meters. * + `KeyboardAction.CAMERA_ZOOM_OUT` - Zoom out from the current camera center position, accepts a numeric parameter named * `amount` that controls the amount of zoom in meters. */ export declare class KeyboardControlService { private ngZone; private cesiumService; private document; private _currentDefinitions; private _activeDefinitions; private _keyMappingFn; /** * Creats the keyboard control service. */ constructor(ngZone: NgZone, cesiumService: CesiumService, document: any); /** * Initializes the keyboard control service. */ init(): void; /** * Sets the current map keyboard control definitions. * The definitions is a key mapping between a key string and a KeyboardControlDefinition: * - `action` is a predefine action from `KeyboardAction` enum, or a custom method: * `(camera, scene, params, key) => boolean | void` - returning false will cancel the current keydown. * - `validation` is a method that validates if the event should occur or not (`camera, scene, params, key`) * - `params` is an object (or function that returns object) that will be passed into the action executor. * - `done` is a function that will be triggered when `keyup` is triggered. * @param definitions Keyboard Control Definition * @param keyMappingFn - Mapping function for custom keys * @param outsideOfAngularZone - if key down events will run outside of angular zone. */ setKeyboardControls(definitions: KeyboardControlDefinition, keyMappingFn?: (keyEvent: KeyboardEvent) => string, outsideOfAngularZone?: boolean): void; /** * Removes the current set of keyboard control items, and unregister from map events. */ removeKeyboardControls(): void; /** * Returns the current action that handles `char` key string, or `null` if not exists */ private getAction; /** * The default `defaultKeyMappingFn` that maps `KeyboardEvent` into a key string. */ private defaultKeyMappingFn; /** * document's `keydown` event handler */ private handleKeydown; /** * document's `keyup` event handler */ private handleKeyup; /** * `tick` event handler that triggered by Cesium render loop */ private handleTick; /** * * Params resolve function, returns object. * In case of params function, executes it and returns it's return value. * */ private getParams; /** * * Executes a given `KeyboardControlParams` object. * */ private executeAction; /** * Registers to keydown, keyup of `document`, and `tick` of Cesium. */ private registerEvents; /** * Unregisters to keydown, keyup of `document`, and `tick` of Cesium. */ private unregisterEvents; }