UNPKG

@polygonjs/polygonjs

Version:

node-based WebGL 3D engine https://polygonjs.com

78 lines (77 loc) 2.45 kB
"use strict"; import { stringMatchMask } from "../../core/String"; import { NamedFunction5 } from "./_Base"; export var KeyModifierRequirement = /* @__PURE__ */ ((KeyModifierRequirement2) => { KeyModifierRequirement2["OPTIONAL"] = "optional"; KeyModifierRequirement2["PRESSED"] = "pressed"; KeyModifierRequirement2["NOT_PRESSED"] = "not pressed"; return KeyModifierRequirement2; })(KeyModifierRequirement || {}); export const KEY_MODIFIER_REQUIREMENTS = [ "optional" /* OPTIONAL */, "pressed" /* PRESSED */, "not pressed" /* NOT_PRESSED */ ]; function modifierMatchesRequirement(modifier, requirement) { if (requirement == "optional" /* OPTIONAL */) { return true; } if (requirement == "pressed" /* PRESSED */ && modifier == true) { return true; } if (requirement == "not pressed" /* NOT_PRESSED */ && modifier == false) { return true; } return false; } export class keyboardEventMatchesConfig extends NamedFunction5 { static type() { return "keyboardEventMatchesConfig"; } func(keyCodes, _ctrlKey, _shiftKey, _altKey, _metaKey) { const events = this.scene.eventsDispatcher.keyboardEventsController.currentEvents(); if (events.length == 0) { return false; } const eventMatchesAtLeastOneModifier = () => { const ctrlKey = KEY_MODIFIER_REQUIREMENTS[_ctrlKey]; for (let event of events) { if (modifierMatchesRequirement(event.ctrlKey, ctrlKey)) { return true; } } const shiftKey = KEY_MODIFIER_REQUIREMENTS[_shiftKey]; for (let event of events) { if (modifierMatchesRequirement(event.shiftKey, shiftKey)) { return true; } } const altKey = KEY_MODIFIER_REQUIREMENTS[_altKey]; for (let event of events) { if (modifierMatchesRequirement(event.altKey, altKey)) { return true; } } const metaKey = KEY_MODIFIER_REQUIREMENTS[_metaKey]; for (let event of events) { if (modifierMatchesRequirement(event.metaKey, metaKey)) { return true; } } }; const eventMatchesAtLeastOneKeyCode = () => { for (let event of events) { if (keyCodes == "" || stringMatchMask(event.code, keyCodes)) { return true; } } }; if (!eventMatchesAtLeastOneModifier()) { return false; } if (!eventMatchesAtLeastOneKeyCode()) { return false; } return true; } }