@polygonjs/polygonjs
Version:
node-based WebGL 3D engine https://polygonjs.com
78 lines (77 loc) • 2.45 kB
JavaScript
;
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;
}
}