diff --git a/README.md b/README.md index eb9e1b90..2f5ac5a3 100644 --- a/README.md +++ b/README.md @@ -207,7 +207,7 @@ sendData({ description: 'left joystick used to move the character', }], tap:[{ - keys: { + key: { p: { initialX: 50, initialY: 50, @@ -216,7 +216,7 @@ sendData({ name:'Fire' }], swipe: [{ - keys: { + key: { u: { initialX: 50, initialY: 50, diff --git a/index.d.ts b/index.d.ts index 498ef9b1..cca5fc87 100644 --- a/index.d.ts +++ b/index.d.ts @@ -1,157 +1,165 @@ type KeyEffectDistance = { - distanceX: number; - distanceY: number; + distanceX: number; + distanceY: number; }; interface KeyEffect { - initialX: number; - initialY: number; - name?: string; - description?: string; + initialX: number; + initialY: number; + name?: string; + description?: string; } -interface KeyMap { - keys: Record; - name?: string; - description?: string; +interface KeysMap { + keys: Record; + name?: string; + description?: string; +} + +interface Key { + key: string; + effect: E; + name?: string; + description?: string; } interface KeyMappingConfig { - dpad?: KeyMap[]; - tap?: KeyMap[]; - swipe?: KeyMap[]; + dpad?: KeysMap[]; + tap?: Key[]; + swipe?: Key[]; } type DeviceRendererKeyMapping = { - enable(isEnable: boolean): void; - setConfig(config: KeyMappingConfig): void; - activeKeyMappingDebug(isTraceActivate?: boolean, isGridActivate?: boolean): void; + enable(isEnable: boolean): void; + setConfig(config: KeyMappingConfig): void; + activeKeyMappingDebug(isTraceActivate?: boolean, isGridActivate?: boolean): void; }; type VmEvent = - | 'ANDROID_ID' - | 'baseband' - | 'BATTERY_LEVEL' - | 'BATTERY_STATUS' - | 'battery' - | 'beforeunload' - | 'BLK' - | 'CLIPBOARD' - | 'diskio' - | 'fingerprint' - | 'framework' - | 'gps' - | 'IMEI' - | 'network_profile' - | 'NETWORK' - | 'settings' - | 'SYSTEM_PATCHER_LAST_RESULT' - | 'SYSTEM_PATCHER_STATUS' - | 'systempatcher' - | 'vinput' - | string // This list is not exhaustive and should be completed + | 'ANDROID_ID' + | 'baseband' + | 'BATTERY_LEVEL' + | 'BATTERY_STATUS' + | 'battery' + | 'beforeunload' + | 'BLK' + | 'CLIPBOARD' + | 'diskio' + | 'fingerprint' + | 'framework' + | 'gps' + | 'IMEI' + | 'network_profile' + | 'NETWORK' + | 'settings' + | 'SYSTEM_PATCHER_LAST_RESULT' + | 'SYSTEM_PATCHER_STATUS' + | 'systempatcher' + | 'vinput' + | string; // This list is not exhaustive and should be completed type VmCommunication = { - disconnect(): void; - addEventListener(event: VmEvent, callback: (msg: string) => void): void; - sendData(data: { channel: string; messages: string[] }): void; + disconnect(): void; + addEventListener(event: VmEvent, callback: (msg: string) => void): void; + sendData(data: {channel: string; messages: string[]}): void; }; type RegisteredFunctionDoc = { - apiName: string, - apiDescription: string, -} + apiName: string; + apiDescription: string; +}; type Utils = { - getRegisteredFunctions(): RegisteredFunctionDoc[]; + getRegisteredFunctions(): RegisteredFunctionDoc[]; }; type Media = { - mute(): void; - unmute(): void; + mute(): void; + unmute(): void; }; type Video = { - fullscreen: () => void; + fullscreen: () => void; }; -type Template = 'bootstrap' - | 'fullscreen' - | 'fullwindow' - | 'renderer' - | 'renderer_minimal' - | 'renderer_no_toolbar' - | 'renderer_partial'; +type Template = + | 'bootstrap' + | 'fullscreen' + | 'fullwindow' + | 'renderer' + | 'renderer_minimal' + | 'renderer_no_toolbar' + | 'renderer_partial'; interface RendererSetupOptions { - baseband?: boolean; // Default: false - battery?: boolean; // Default: true - biometrics?: boolean; // Default: true - camera?: boolean; // Default: true - capture?: boolean; // Default: true - clipboard?: boolean; // Default: true - connectionFailedURL?: string; - diskIO?: boolean; // Default: true - fileUpload?: boolean; // Default: true - fileUploadUrl?: string; - fullscreen?: boolean; // Default: true - gamepad?: boolean; // Default: true - giveFeedbackLink?: string; - gps?: boolean; // Default: true - gpsSpeedSupport?: boolean; // Default: false - i18n?: Record; - identifiers?: boolean; // Default: true - keyboard?: boolean; // Default: true - keyboardMapping?: boolean; // Default: true - microphone?: boolean; // Default: false - mobilethrottling?: boolean; // Default: false - mouse?: boolean; // Default: true - navbar?: boolean; // Default: true - network?: boolean; // Default: true - phone?: boolean; // Default: true - power?: boolean; // Default: true - rotation?: boolean; // Default: true - streamBitrate?: boolean; // Default: false - streamResolution?: boolean; // Default: true - stun?: { urls?: string[] }; - template?: Template; // Default: 'renderer' - token?: string; - touch?: boolean; // Default: true - translateHomeKey?: boolean; // Default: false - turn?: { - urls?: string[]; - username?: string; - credential?: string; - default?: boolean; // Default: false - }; - volume?: boolean; // Default: true + baseband?: boolean; // Default: false + battery?: boolean; // Default: true + biometrics?: boolean; // Default: true + camera?: boolean; // Default: true + capture?: boolean; // Default: true + clipboard?: boolean; // Default: true + connectionFailedURL?: string; + diskIO?: boolean; // Default: true + fileUpload?: boolean; // Default: true + fileUploadUrl?: string; + fullscreen?: boolean; // Default: true + gamepad?: boolean; // Default: true + giveFeedbackLink?: string; + gps?: boolean; // Default: true + gpsSpeedSupport?: boolean; // Default: false + i18n?: Record; + identifiers?: boolean; // Default: true + keyboard?: boolean; // Default: true + keyboardMapping?: boolean; // Default: true + microphone?: boolean; // Default: false + mobilethrottling?: boolean; // Default: false + mouse?: boolean; // Default: true + navbar?: boolean; // Default: true + network?: boolean; // Default: true + phone?: boolean; // Default: true + power?: boolean; // Default: true + rotation?: boolean; // Default: true + streamBitrate?: boolean; // Default: false + streamResolution?: boolean; // Default: true + stun?: {urls?: string[]}; + template?: Template; // Default: 'renderer' + token?: string; + touch?: boolean; // Default: true + translateHomeKey?: boolean; // Default: false + turn?: { + urls?: string[]; + username?: string; + credential?: string; + default?: boolean; // Default: false + }; + volume?: boolean; // Default: true } type DefaultTrue = B extends void -? T // Key is not present -: B extends true | undefined - ? T // Key is true or undefined - : B extends false - ? undefined // Key is false - : T | undefined; // Key is true, false or undefined (we cannot infer anything) + ? T // Key is not present + : B extends true | undefined + ? T // Key is true or undefined + : B extends false + ? undefined // Key is false + : T | undefined; // Key is true, false or undefined (we cannot infer anything) -type ExtractKey = O extends { [P in K]: infer T } ? T : void; +type ExtractKey = O extends {[P in K]: infer T} ? T : void; type DeviceRendererApi = { - keyMapping: DefaultTrue, DeviceRendererKeyMapping>; - media: Media; - utils: Utils; - video?: Video; // Available if any plugin (e.g. fullscreen) using it is enabled. - VM_communication: VmCommunication; + keyMapping: DefaultTrue, DeviceRendererKeyMapping>; + media: Media; + utils: Utils; + video?: Video; // Available if any plugin (e.g. fullscreen) using it is enabled. + VM_communication: VmCommunication; }; declare class DeviceRendererFactory { - constructor(); - setupRenderer( - targetElement: HTMLDivElement, - webrtcAddress: string, - options?: O, - ): DeviceRendererApi; + constructor(); + setupRenderer( + targetElement: HTMLDivElement, + webrtcAddress: string, + options?: O, + ): DeviceRendererApi; } -export { DeviceRendererApi, DeviceRendererFactory, RendererSetupOptions, KeyMappingConfig } +export {DeviceRendererApi, DeviceRendererFactory, RendererSetupOptions, KeyMappingConfig}; diff --git a/src/plugins/KeyboardMapping.js b/src/plugins/KeyboardMapping.js index ac9e919c..0d057bed 100644 --- a/src/plugins/KeyboardMapping.js +++ b/src/plugins/KeyboardMapping.js @@ -225,7 +225,8 @@ module.exports = class KeyboardMapping { gestureConfig.forEach((gesture) => { const groupId = generateUID(); this.sequences[groupId] = []; - Object.entries(gesture.keys).forEach(([key, value]) => { + const keyName = gestureType === 'dPad' ? 'keys' : 'key'; + Object.entries(gesture[keyName]).forEach(([key, value]) => { this.state.workingMappedKeysConfig[key] = { ...value, key,